Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Thomas Karl Pietrowski 2017-12-08 15:10:12 +01:00
commit a2d327af7f
42 changed files with 499 additions and 344 deletions

2
.gitignore vendored
View File

@ -45,6 +45,8 @@ plugins/cura-big-flame-graph
plugins/cura-siemensnx-plugin
plugins/CuraVariSlicePlugin
plugins/CuraLiveScriptingPlugin
plugins/CuraPrintProfileCreator
plugins/OctoPrintPlugin
#Build stuff
CMakeCache.txt

View File

@ -3,7 +3,7 @@ Cura
This is the new, shiny frontend for Cura. [daid/Cura](https://github.com/daid/Cura.git) is the old legacy Cura that everyone knows and loves/hates.
We re-worked the whole GUI code at Ultimaker, because the old code started to become a unmaintainable.
We re-worked the whole GUI code at Ultimaker, because the old code started to become unmaintainable.
Logging Issues

View File

@ -1,6 +1,5 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtNetwork import QLocalServer
from PyQt5.QtNetwork import QLocalSocket
@ -32,6 +31,7 @@ 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.Arrange import Arrange
from cura.ShapeArray import ShapeArray
from cura.ConvexHullDecorator import ConvexHullDecorator
@ -128,6 +128,7 @@ class CuraApplication(QtApplication):
stacksValidationFinished = pyqtSignal() # Emitted whenever a validation is finished
def __init__(self):
# this list of dir names will be used by UM to detect an old cura directory
for dir_name in ["extruders", "machine_instances", "materials", "plugins", "quality", "user", "variants"]:
Resources.addExpectedDirNameInData(dir_name)
@ -156,7 +157,6 @@ class CuraApplication(QtApplication):
SettingDefinition.addSettingType("extruder", None, str, Validator)
SettingDefinition.addSettingType("optional_extruder", None, str, None)
SettingDefinition.addSettingType("[int]", None, str, None)
SettingFunction.registerOperator("extruderValues", ExtruderManager.getExtruderValues)
@ -181,7 +181,8 @@ class CuraApplication(QtApplication):
ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.DefinitionChangesContainer)
## Initialise the version upgrade manager with Cura's storage paths.
import UM.VersionUpgradeManager #Needs to be here to prevent circular dependencies.
# Needs to be here to prevent circular dependencies.
import UM.VersionUpgradeManager
UM.VersionUpgradeManager.VersionUpgradeManager.getInstance().setCurrentVersions(
{
@ -227,7 +228,9 @@ class CuraApplication(QtApplication):
"TranslateTool",
"FileLogger",
"XmlMaterialProfile",
"PluginBrowser"
"PluginBrowser",
"PrepareStage",
"MonitorStage"
])
self._physics = None
self._volume = None
@ -388,7 +391,6 @@ class CuraApplication(QtApplication):
def needToShowUserAgreement(self):
return self._need_to_show_user_agreement
def setNeedToShowUserAgreement(self, set_value = True):
self._need_to_show_user_agreement = set_value
@ -666,14 +668,14 @@ class CuraApplication(QtApplication):
controller = self.getController()
controller.setActiveStage("PrepareStage")
controller.setActiveView("SolidView")
controller.setCameraTool("CameraTool")
controller.setSelectionTool("SelectionTool")
t = controller.getTool("TranslateTool")
if t:
t.setEnabledAxis([ToolHandle.XAxis, ToolHandle.YAxis,ToolHandle.ZAxis])
t.setEnabledAxis([ToolHandle.XAxis, ToolHandle.YAxis, ToolHandle.ZAxis])
Selection.selectionChanged.connect(self.onSelectionChanged)
@ -717,6 +719,7 @@ class CuraApplication(QtApplication):
run_headless = self.getCommandLineOption("headless", False)
if not run_headless:
self.initializeEngine()
controller.setActiveStage("PrepareStage")
if run_headless or self._engine.rootObjects:
self.closeSplash()

View File

@ -356,14 +356,16 @@ class ExtruderManager(QObject):
# \return \type{List[ContainerStack]} a list of
def getActiveExtruderStacks(self) -> List["ExtruderStack"]:
global_stack = Application.getInstance().getGlobalContainerStack()
if not global_stack:
return None
result = []
machine_extruder_count = global_stack.getProperty("machine_extruder_count", "value")
if global_stack and global_stack.getId() in self._extruder_trains:
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]
def __globalContainerStackChanged(self) -> None:

View File

@ -498,6 +498,7 @@ class MachineManager(QObject):
@pyqtProperty("QVariantList", notify=activeVariantChanged)
def activeVariantNames(self) -> List[str]:
result = []
active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks()
if active_stacks is not None:
for stack in active_stacks:
@ -510,6 +511,7 @@ class MachineManager(QObject):
@pyqtProperty("QVariantList", notify = activeMaterialChanged)
def activeMaterialNames(self) -> List[str]:
result = []
active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks()
if active_stacks is not None:
for stack in active_stacks:
@ -530,6 +532,7 @@ class MachineManager(QObject):
@pyqtProperty("QVariantMap", notify = activeVariantChanged)
def allActiveVariantIds(self) -> Dict[str, str]:
result = {}
active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
if active_stacks is not None: #If we have a global stack.
for stack in active_stacks:
@ -548,10 +551,8 @@ class MachineManager(QObject):
@pyqtProperty("QVariantMap", notify = activeMaterialChanged)
def allActiveMaterialIds(self) -> Dict[str, str]:
result = {}
active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
result[self._global_container_stack.getId()] = self._global_container_stack.material.getId()
if active_stacks is not None: # If we have extruder stacks
for stack in active_stacks:
material_container = stack.material

22
cura/Stages/CuraStage.py Normal file
View File

@ -0,0 +1,22 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import pyqtProperty, QUrl, QObject
from UM.Stage import Stage
class CuraStage(Stage):
def __init__(self, parent = None):
super().__init__(parent)
@pyqtProperty(str, constant = True)
def stageId(self):
return self.getPluginId()
@pyqtProperty(QUrl, constant = True)
def mainComponent(self):
return self.getDisplayComponent("main")
@pyqtProperty(QUrl, constant = True)
def sidebarComponent(self):
return self.getDisplayComponent("sidebar")

2
cura/Stages/__init__.py Normal file
View File

@ -0,0 +1,2 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.

View File

@ -12,7 +12,8 @@ from UM.Platform import Platform
#WORKAROUND: GITHUB-88 GITHUB-385 GITHUB-612
if Platform.isLinux(): # Needed for platform.linux_distribution, which is not available on Windows and OSX
# For Ubuntu: https://bugs.launchpad.net/ubuntu/+source/python-qt4/+bug/941826
if platform.linux_distribution()[0] in ("debian", "Ubuntu", "LinuxMint"): # TODO: Needs a "if X11_GFX == 'nvidia'" here. The workaround is only needed on Ubuntu+NVidia drivers. Other drivers are not affected, but fine with this fix.
linux_distro_name = platform.linux_distribution()[0].lower()
if linux_distro_name in ("debian", "ubuntu", "linuxmint", "fedora"): # TODO: Needs a "if X11_GFX == 'nvidia'" here. The workaround is only needed on Ubuntu+NVidia drivers. Other drivers are not affected, but fine with this fix.
import ctypes
from ctypes.util import find_library
libGL = find_library("GL")
@ -22,9 +23,10 @@ if Platform.isLinux(): # Needed for platform.linux_distribution, which is not av
if Platform.isWindows() and hasattr(sys, "frozen"):
try:
del os.environ["PYTHONPATH"]
except KeyError: pass
except KeyError:
pass
#WORKAROUND: GITHUB-704 GITHUB-708
# WORKAROUND: GITHUB-704 GITHUB-708
# It looks like setuptools creates a .pth file in
# the default /usr/lib which causes the default site-packages
# to be inserted into sys.path before PYTHONPATH.
@ -45,6 +47,7 @@ def exceptHook(hook_type, value, traceback):
_crash_handler = CrashHandler(hook_type, value, traceback)
_crash_handler.show()
sys.excepthook = exceptHook
# Workaround for a race condition on certain systems where there
@ -75,7 +78,7 @@ faulthandler.enable()
# Force an instance of CuraContainerRegistry to be created and reused later.
cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance()
# This prestart up check is needed to determine if we should start the application at all.
# This pre-start up check is needed to determine if we should start the application at all.
if not cura.CuraApplication.CuraApplication.preStartUp():
sys.exit(0)

View File

@ -59,7 +59,9 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter):
version_file = zipfile.ZipInfo("Cura/version.ini")
version_config_parser = configparser.ConfigParser()
version_config_parser.add_section("versions")
version_config_parser.set("versions", "cura_version", Application.getStaticVersion())
version_config_parser.set("versions", "cura_version", Application.getInstance().getVersion())
version_config_parser.set("versions", "build_type", Application.getInstance().getBuildType())
version_config_parser.set("versions", "is_debug_mode", str(Application.getInstance().getIsDebugMode()))
version_file_string = StringIO()
version_config_parser.write(version_file_string)

View File

@ -11,8 +11,20 @@ The existing Layer View has been updated in order to see a live simulation of al
*Quick camera controls
New buttons have been added to the interface that can quickly reposition the camera view of the buildplate.
*Increased processing speeds and performance
A 5-10% speed increase when calculating normals, loading models and slicing.
*Lock model on platform
The move tool has a new option to lock a selected model to the platform.
*Faster profile switching speed
Duplicating and removing a profile could take Ultimaker Cura quite some time, it now happens instantly.
*Faster printer selection
Removing a printer from the library is now instant. No more unresponsive screens.
*Faster processing speed
A 5 - 10 % speed increase when calculating normals, loading models, and slicing.
*Feedrate visualization
Feedrate visualization has been added to the Layer view. Using this gives the user an idea of the print speeds per model part, allowing for better control over prints.
*Jogging
It allows the printhead to be moved with on-screen controls. Contributed by fieldOfView.
@ -52,8 +64,8 @@ If profile settings have been modified in recommended mode under custom mode, a
- Fix for Ultimaker Cura engine crashes on certain models
- Fix for Uninstalling previous versions of Cura on Windows platforms
- Fix for displaying visible settings
- Fix for loading legacy profiles
- Fix for importing custom single extrusion profile
- Fix for importing legacy .ini files
- Prevent skipping user agreement dialog by pressing escape
[3.0.4]
*Bug fixes
@ -97,7 +109,7 @@ The build plate now shows graduations of 10 mm and 1 mm for easy model positioni
Extruder tabs have become buttons and icons have been updated.
*Add an "Export to Cura" button in SOLIDWORKS
SOLIDWORKS plugin can now be installed using an automatic installer.
A macro can be added to your SOLIDWORKS installation that loads your model into Ultimaker Cura.
*Siemens NX macro
When a user updates models in Siemens NX and clicks the button, the updated models replace the models opened in Ultimaker Cura.

View File

@ -61,7 +61,9 @@ class ProcessSlicedLayersJob(Job):
def run(self):
start_time = time()
if Application.getInstance().getController().getActiveView().getPluginId() == "SimulationView":
view = Application.getInstance().getController().getActiveView()
if view.getPluginId() == "SimulationView":
view.resetLayerData()
self._progress_message.show()
Job.yieldThread()
if self._abort_requested:
@ -226,10 +228,6 @@ class ProcessSlicedLayersJob(Job):
if self._progress_message:
self._progress_message.setProgress(100)
view = Application.getInstance().getController().getActiveView()
if view.getPluginId() == "SimulationView":
view.resetLayerData()
if self._progress_message:
self._progress_message.hide()

View File

@ -22,7 +22,7 @@ Cura.MachineAction
onModelChanged:
{
var extruderCount = base.extrudersModel.rowCount();
base.extruderTabsCount = extruderCount > 1 ? extruderCount : 0;
base.extruderTabsCount = extruderCount;
}
}
@ -241,7 +241,6 @@ Cura.MachineAction
UM.TooltipArea
{
visible: manager.definedExtruderCount > 1
height: childrenRect.height
width: childrenRect.width
text: machineExtruderCountProvider.properties.description
@ -291,15 +290,6 @@ Cura.MachineAction
property var afterOnEditingFinished: manager.updateMaterialForDiameter
property string label: catalog.i18nc("@label", "Material diameter")
}
Loader
{
id: nozzleSizeField
visible: !Cura.MachineManager.hasVariants && machineExtruderCountProvider.properties.value == 1
sourceComponent: numericTextFieldWithUnit
property string settingKey: "machine_nozzle_size"
property string label: catalog.i18nc("@label", "Nozzle size")
property string unit: catalog.i18nc("@label", "mm")
}
}
}

View File

@ -0,0 +1,44 @@
// 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
{
width: parent.width
height: parent.height
// 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
}
}

View File

@ -0,0 +1,73 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import os.path
from UM.Application import Application
from UM.PluginRegistry import PluginRegistry
from UM.Resources import Resources
from cura.Stages.CuraStage import CuraStage
## Stage for monitoring a 3D printing while it's printing.
class MonitorStage(CuraStage):
def __init__(self, parent = None):
super().__init__(parent)
# Wait until QML engine is created, otherwise creating the new QML components will fail
Application.getInstance().engineCreatedSignal.connect(self._setComponents)
# Update the status icon when the output device is changed
Application.getInstance().getOutputDeviceManager().activeDeviceChanged.connect(self._setIconSource)
def _setComponents(self):
self._setMainOverlay()
self._setSidebar()
self._setIconSource()
def _setMainOverlay(self):
main_component_path = os.path.join(PluginRegistry.getInstance().getPluginPath("MonitorStage"), "MonitorMainView.qml")
self.addDisplayComponent("main", main_component_path)
def _setSidebar(self):
# TODO: currently the sidebar component for prepare and monitor stages is the same, this will change with the printer output device refactor!
sidebar_component_path = os.path.join(Resources.getPath(Application.getInstance().ResourceTypes.QmlFiles), "Sidebar.qml")
self.addDisplayComponent("sidebar", sidebar_component_path)
def _setIconSource(self):
if Application.getInstance().getTheme() is not None:
icon_name = self._getActiveOutputDeviceStatusIcon()
self.setIconSource(Application.getInstance().getTheme().getIcon(icon_name))
## Find the correct status icon depending on the active output device state
def _getActiveOutputDeviceStatusIcon(self):
output_device = Application.getInstance().getOutputDeviceManager().getActiveDevice()
if not output_device:
return "tab_status_unknown"
if hasattr(output_device, "acceptsCommands") and not output_device.acceptsCommands:
return "tab_status_unknown"
if not hasattr(output_device, "printerState") or not hasattr(output_device, "jobState"):
return "tab_status_unknown"
# TODO: refactor to use enum instead of hardcoded strings?
if output_device.printerState == "maintenance":
return "tab_status_busy"
if output_device.jobState in ["printing", "pre_print", "pausing", "resuming"]:
return "tab_status_busy"
if output_device.jobState == "wait_cleanup":
return "tab_status_finished"
if output_device.jobState in ["ready", ""]:
return "tab_status_connected"
if output_device.jobState == "paused":
return "tab_status_paused"
if output_device.jobState == "error":
return "tab_status_stopped"
return "tab_status_unknown"

View File

@ -0,0 +1,20 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
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
}
}
def register(app):
return {
"stage": MonitorStage.MonitorStage()
}

View File

@ -0,0 +1,8 @@
{
"name": "Monitor Stage",
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Provides a monitor stage in Cura.",
"api": 4,
"i18n-catalog": "cura"
}

View File

@ -0,0 +1,18 @@
# Copyright (c) 2017 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 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), "Sidebar.qml")
self.addDisplayComponent("sidebar", sidebar_component_path)

View File

@ -0,0 +1,20 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from . import PrepareStage
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
def getMetaData():
return {
"stage": {
"name": i18n_catalog.i18nc("@item:inmenu", "Prepare"),
"weight": 0
}
}
def register(app):
return {
"stage": PrepareStage.PrepareStage()
}

View File

@ -0,0 +1,8 @@
{
"name": "Prepare Stage",
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Provides a prepare stage in Cura.",
"api": 4,
"i18n-catalog": "cura"
}

View File

@ -39,7 +39,7 @@ class SliceInfo(Extension):
Preferences.getInstance().addPreference("info/send_slice_info", True)
Preferences.getInstance().addPreference("info/asked_send_slice_info", False)
if not Preferences.getInstance().getValue("info/asked_send_slice_info"):
if not Preferences.getInstance().getValue("info/asked_send_slice_info") and Preferences.getInstance().getValue("info/send_slice_info"):
self.send_slice_info_message = Message(catalog.i18nc("@info", "Cura collects anonymised slicing statistics. You can disable this in the preferences."),
lifetime = 0,
dismissable = False,

View File

@ -698,7 +698,7 @@ class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinte
if self._reply:
self._reply.abort()
self._stage = OutputStage.ready
Application.getInstance().showPrintMonitor.emit(False)
Application.getInstance().getController().setActiveStage("PrepareStage")
@pyqtSlot(int, result=str)
def formatDuration(self, seconds):

View File

@ -672,7 +672,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
Logger.log("d", "Attempting to perform an action without authentication for printer %s. Auth state is %s", self._key, self._authentication_state)
return
Application.getInstance().showPrintMonitor.emit(True)
Application.getInstance().getController().setActiveStage("MonitorStage")
self._print_finished = True
self.writeStarted.emit(self)
self._gcode = getattr(Application.getInstance().getController().getScene(), "gcode_list")
@ -767,7 +767,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
if button == QMessageBox.Yes:
self.startPrint()
else:
Application.getInstance().showPrintMonitor.emit(False)
Application.getInstance().getController().setActiveStage("PrepareStage")
# For some unknown reason Cura on OSX will hang if we do the call back code
# immediately without first returning and leaving QML's event system.
QTimer.singleShot(100, delayedCallback)
@ -850,7 +850,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
self._write_finished = True # post_reply does not always exist, so make sure we unblock writing
if self._post_reply:
self._finalizePostReply()
Application.getInstance().showPrintMonitor.emit(False)
Application.getInstance().getController().setActiveStage("PrepareStage")
## Attempt to start a new print.
# This function can fail to actually start a print due to not being authenticated or another print already

View File

@ -490,7 +490,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self.setJobName(file_name)
self._print_estimated_time = int(Application.getInstance().getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.Seconds))
Application.getInstance().showPrintMonitor.emit(True)
Application.getInstance().getController().setActiveStage("MonitorStage")
self.startPrint()
def _setEndstopState(self, endstop_key, value):
@ -698,7 +698,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._is_printing = False
self._is_paused = False
self._updateJobState("ready")
Application.getInstance().showPrintMonitor.emit(False)
Application.getInstance().getController().setActiveStage("PrepareStage")
## Check if the process did not encounter an error yet.
def hasError(self):

View File

@ -3379,7 +3379,6 @@
"unit": "s",
"type": "float",
"default_value": 10,
"minimum_value": "cool_min_layer_time",
"maximum_value_warning": "600",
"settable_per_mesh": false,
"settable_per_extruder": true

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 3.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-21 16:58+0100\n"
"PO-Revision-Date: 2017-10-05 12:20-0300\n"
"PO-Revision-Date: 2017-12-04 10:20-0300\n"
"Last-Translator: Cláudio Sampaio <patola@makerlinux.com.br>\n"
"Language-Team: Cláudio Sampaio <patola@makerlinux.com.br> and CoderSquirrel <jasaneschio@gmail.com>\n"
"Language: pt_BR\n"
@ -92,7 +92,7 @@ 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 ""
msgstr "Abrir Connect..."
#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214
msgctxt "@info:tooltip"
@ -142,7 +142,7 @@ msgstr "Incapaz de iniciar novo trabalho porque a impressora está ocupada ou n
#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154
msgctxt "@info:title"
msgid "Printer Unavailable"
msgstr ""
msgstr "Impressora Não Disponível"
#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457
msgctxt "@info:status"
@ -594,7 +594,7 @@ msgstr "Conectar pela rede"
#, 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 ""
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:65
#, python-format
@ -605,7 +605,7 @@ msgstr "Novo firmware de %s disponível"
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66
msgctxt "@action:button"
msgid "How to update"
msgstr ""
msgstr "Como atualizar"
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77
msgctxt "@info"
@ -640,7 +640,7 @@ msgstr "Erro ao iniciar %s!"
#: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14
msgctxt "@item:inlistbox"
msgid "Simulation view"
msgstr ""
msgstr "Visão simulada"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100
msgctxt "@info:status"
@ -650,7 +650,7 @@ msgstr "O Cura não mostra as camadas corretamente quando Impressão em Arame es
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101
msgctxt "@info:title"
msgid "Simulation View"
msgstr ""
msgstr "Visão Simulada"
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26
msgid "Modify G-Code"
@ -731,7 +731,7 @@ msgstr "Incapaz de fatiar com os ajustes atuais. Os seguintes ajustes têm erros
#, 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 ""
msgstr "Incapaz de fatiar devido a alguns ajustes por modelo. Os seguintes ajustes têm erros em um ou mais dos modelos: {error_labels}"
#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326
msgctxt "@info:status"
@ -766,25 +766,25 @@ msgstr "Configurar ajustes por Modelo"
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23
msgid "Install"
msgstr ""
msgstr "Instalar"
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43
msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory."
msgstr ""
msgstr "Erro ao copiar arquivos de plugins Siemens NX. Por favor verifique seu UGII_USER_DIR. Ele não está configurado para um diretório."
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81
msgid "Successfully installed Siemens NX Cura plugin."
msgstr ""
msgstr "Plugin Siemens NX do Cura instalado com sucesso."
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65
msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR."
msgstr ""
msgstr "Erro ao copiar arquivos de plugins Siemens NX. Por favor, verifique seu UGII_USER_DIR."
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85
msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX."
msgstr ""
msgstr "Erro ao instalar arquivos de plugins Siemens NX. Não foi possível ajustar a variável de ambiente UGII_USER_DIR para o Simenes NX."
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585
@ -947,7 +947,7 @@ msgstr "Outros"
#: /home/ruben/Projects/Cura/cura/PrintInformation.py:199
msgctxt "@label unknown material"
msgid "Unknown"
msgstr ""
msgstr "Desconhecido"
#: /home/ruben/Projects/Cura/cura/PrintInformation.py:284
#, python-brace-format
@ -1012,12 +1012,12 @@ msgstr "Material Personalizado"
#: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182
msgctxt "@menuitem"
msgid "Global"
msgstr ""
msgstr "Global"
#: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229
msgctxt "@menuitem"
msgid "Not overridden"
msgstr ""
msgstr "Não sobrepujado"
#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117
msgctxt "@info:status"
@ -1066,7 +1066,7 @@ msgstr "Perfil exportado para <filename>{0}</filename>"
#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157
msgctxt "@info:title"
msgid "Export succeeded"
msgstr ""
msgstr "Exportação concluída"
#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183
#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205
@ -1139,84 +1139,87 @@ msgid ""
" <p>Please use the \"Send report\" button to post a bug report automatically to our servers</p>\n"
" "
msgstr ""
"<p><b>Uma exceção fatal aocorreu. Por favor nos envie este Relatório de Erros para consertarmos o problema</p></b>\n"
" <p>Por favor use o botão \"Enviar relatório\" para postar um relato de bug automaticamente em nossos servidores</p>\n"
" "
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:101
msgctxt "@title:groupbox"
msgid "System information"
msgstr ""
msgstr "Informação do Sistema"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:109
msgctxt "@label unknown version of Cura"
msgid "Unknown"
msgstr ""
msgstr "Desconhecida"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:111
#, python-brace-format
msgctxt "@label Cura version"
msgid "<b>Cura version:</b> {version}<br/>"
msgstr ""
msgstr "<b>Versão do Cura:</b> {version}<br/>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:112
#, python-brace-format
msgctxt "@label Platform"
msgid "<b>Platform:</b> {platform}<br/>"
msgstr ""
msgstr "<b>Plataforma:</b> {platform}<br/>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:113
#, python-brace-format
msgctxt "@label Qt version"
msgid "<b>Qt version:</b> {qt}<br/>"
msgstr ""
msgstr "<b>Versão da Qt:</b> {qt}<br/>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:114
#, python-brace-format
msgctxt "@label PyQt version"
msgid "<b>PyQt version:</b> {pyqt}<br/>"
msgstr ""
msgstr "<b>Versão da PyQt:</b> {pyqt}<br/>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:115
#, python-brace-format
msgctxt "@label OpenGL"
msgid "<b>OpenGL:</b> {opengl}<br/>"
msgstr ""
msgstr "<b>OpenGL:</b> {opengl}<br/>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:130
#, python-brace-format
msgctxt "@label OpenGL version"
msgid "<li>OpenGL Version: {version}</li>"
msgstr ""
msgstr "<li>Versão da OpenGL: {version}</li>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:131
#, python-brace-format
msgctxt "@label OpenGL vendor"
msgid "<li>OpenGL Vendor: {vendor}</li>"
msgstr ""
msgstr "<li>Fornecedor da OpenGL: {vendor}</li>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:132
#, python-brace-format
msgctxt "@label OpenGL renderer"
msgid "<li>OpenGL Renderer: {renderer}</li>"
msgstr ""
msgstr "<li>Renderizador da OpenGL: {renderer}</li>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:141
msgctxt "@title:groupbox"
msgid "Exception traceback"
msgstr ""
msgstr "Traceback de exceção"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:208
msgctxt "@title:groupbox"
msgid "Logs"
msgstr ""
msgstr "Registros"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:231
msgctxt "@title:groupbox"
msgid "User description"
msgstr ""
msgstr "Descrição do usuário"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:246
msgctxt "@action:button"
msgid "Send report"
msgstr ""
msgstr "Enviar relatório"
#: /home/ruben/Projects/Cura/cura/CuraApplication.py:256
msgctxt "@info:progress"
@ -1254,7 +1257,7 @@ msgstr "Não é possível abrir nenhum outro arquivo se G-Code estiver sendo car
#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416
msgctxt "@info:status"
msgid "The selected model was too small to load."
msgstr ""
msgstr "O modelo selecionado é pequenos demais para carregar."
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59
msgctxt "@title"
@ -1632,7 +1635,7 @@ msgstr "%1 não está configurada para hospedar um grupo de impressora Ultimaker
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14
msgctxt "@info:tooltip"
msgid "Opens the print jobs page with your default web browser."
msgstr ""
msgstr "Abre a página de trabalhos de impressão com seu navegador default."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131
@ -1667,7 +1670,7 @@ msgstr "A conexão à impressora foi perdida"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257
msgctxt "@label:status"
msgid "Disabled"
msgstr ""
msgstr "Desabilitado"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273
msgctxt "@label:status"
@ -1682,12 +1685,12 @@ msgstr "Finalizado"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290
msgctxt "@label:status"
msgid "Paused"
msgstr ""
msgstr "Pausado"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292
msgctxt "@label:status"
msgid "Resuming"
msgstr ""
msgstr "Continuando"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294
msgctxt "@label:status"
@ -1829,12 +1832,12 @@ msgstr "Tipo de Linha"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104
msgctxt "@label:listbox"
msgid "Feedrate"
msgstr ""
msgstr "Taxa de alimentação"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108
msgctxt "@label:listbox"
msgid "Layer thickness"
msgstr ""
msgstr "Largura de camada"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148
msgctxt "@label"
@ -1884,12 +1887,12 @@ msgstr "Parede Interna"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378
msgctxt "@label"
msgid "min"
msgstr ""
msgstr "mín"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420
msgctxt "@label"
msgid "max"
msgstr ""
msgstr "máx"
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18
msgctxt "@title:window"
@ -2127,7 +2130,7 @@ msgstr "%1 de %2"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368
msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate."
msgstr ""
msgstr "Carregar um projeto limpará todos os modelos da mesa de impressão."
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386
msgctxt "@action:button"
@ -2171,6 +2174,9 @@ msgid ""
"You need to accept this license to install this plugin.\n"
"Do you agree with the terms below?"
msgstr ""
"Este plugin contém uma licença.\n"
"Você precisa aceitar esta licença para instalar este plugin.\n"
"Você concorda com os termos abaixo?"
#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242
msgctxt "@action:button"
@ -2185,7 +2191,7 @@ msgstr "Recusar"
#: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16
msgctxt "@title:window"
msgid "User Agreement"
msgstr ""
msgstr "Termos de Acordo do Usuário"
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25
@ -3068,7 +3074,7 @@ msgstr "Sobre o Cura"
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43
msgctxt "@label"
msgid "version: %1"
msgstr ""
msgstr "versão: %1"
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56
msgctxt "@label"
@ -3167,7 +3173,7 @@ msgstr "Biblioteca de recorte de polígonos"
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135
msgctxt "@Label"
msgid "Python HTTP library"
msgstr ""
msgstr "Biblioteca de HTTP Python"
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137
msgctxt "@label"
@ -3187,7 +3193,7 @@ msgstr "Perfil:"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66
msgctxt "@"
msgid "No Profile Available"
msgstr ""
msgstr "Nenhum Perfil Disponível"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104
msgctxt "@tooltip"
@ -3298,44 +3304,44 @@ msgstr ""
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:336
msgctxt "@label Hours and minutes"
msgid "00h 00min"
msgstr ""
msgstr "00h 00min"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354
msgctxt "@tooltip"
msgid "<b>Time specification</b><br/><table>"
msgstr ""
msgstr "<b>Especificação de tempo</b><br/><table>"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429
msgctxt "@label"
msgid "Cost specification"
msgstr ""
msgstr "Especificação de custo"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445
msgctxt "@label m for meter"
msgid "%1m"
msgstr ""
msgstr "%1m"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446
msgctxt "@label g for grams"
msgid "%1g"
msgstr ""
msgstr "%1g"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444
msgctxt "@label"
msgid "Total:"
msgstr ""
msgstr "Total:"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498
msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost"
msgid "%1m / ~ %2g / ~ %4 %3"
msgstr ""
msgstr "%1m / ~ %2g / ~ %4 %3"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503
msgctxt "@label Print estimates: m for meters, g for grams"
msgid "%1m / ~ %2g"
msgstr ""
msgstr "%1m / ~ %2g"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586
msgctxt "@tooltip"
@ -3460,27 +3466,27 @@ msgstr "Aquecer a mesa antes de imprimir. Você pode continuar ajustando sua imp
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703
msgctxt "@label"
msgid "Printer control"
msgstr ""
msgstr "Controle da Impressora"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717
msgctxt "@label"
msgid "Jog Position"
msgstr ""
msgstr "Posição de Trote"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735
msgctxt "@label"
msgid "X/Y"
msgstr ""
msgstr "X/Y"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842
msgctxt "@label"
msgid "Z"
msgstr ""
msgstr "Z"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907
msgctxt "@label"
msgid "Jog Distance"
msgstr ""
msgstr "Distância de Trote"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018
msgctxt "@label"
@ -3525,7 +3531,7 @@ msgstr "&Sair"
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107
msgctxt "@action:inmenu menubar:view"
msgid "&Reset camera position"
msgstr ""
msgstr "&Recompor posições de câmera"
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114
msgctxt "@action:inmenu"
@ -3767,7 +3773,7 @@ msgstr "Importar todos como modelos"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19
msgctxt "@title:window"
msgid "Ultimaker Cura"
msgstr ""
msgstr "Ultimaker Cura"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81
msgctxt "@title:menu menubar:toplevel"
@ -3924,7 +3930,7 @@ msgstr "Altura de Camada"
#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323
msgctxt "@tooltip"
msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab"
msgstr ""
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:340
msgctxt "@label"
@ -3944,7 +3950,7 @@ msgstr "Mais Rápido"
#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388
msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode."
msgstr ""
msgstr "Você modificou alguns ajustes de perfil. Se você quiser alterá-los, use o modo personalizado."
#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413
msgctxt "@label"
@ -4036,7 +4042,7 @@ msgstr "Material"
#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349
msgctxt "@label"
msgid "<a href='%1'>Check compatibility</a>"
msgstr ""
msgstr "<a href='%1'>Verificar compatibilidade</a>"
#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369
msgctxt "@tooltip"
@ -4176,12 +4182,12 @@ msgstr "Integração ao SolidWorks"
#: SimulationView/plugin.json
msgctxt "description"
msgid "Provides the Simulation view."
msgstr ""
msgstr "Provê a Visão Simulada."
#: SimulationView/plugin.json
msgctxt "name"
msgid "Simulation View"
msgstr ""
msgstr "Visão Simulada"
#: PostProcessingPlugin/plugin.json
msgctxt "description"
@ -4266,12 +4272,12 @@ msgstr "Atualização de Versão de 2.7 para 3.0"
#: VersionUpgrade/VersionUpgrade30to31/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 3.0 to Cura 3.1."
msgstr ""
msgstr "Atualiza configurações do Cura 3.0 para o Cura 3.1."
#: VersionUpgrade/VersionUpgrade30to31/plugin.json
msgctxt "name"
msgid "Version Upgrade 3.0 to 3.1"
msgstr ""
msgstr "Atualização de Versão 3.0 para 3.1"
#: VersionUpgrade/VersionUpgrade26to27/plugin.json
msgctxt "description"
@ -4336,12 +4342,12 @@ msgstr "Ferramenta de Ajustes Por Modelo"
#: cura-siemensnx-plugin/plugin.json
msgctxt "description"
msgid "Helps you to install an 'export to Cura' button in Siemens NX."
msgstr ""
msgstr "Auxilia na instalação de um botão 'exportar para o Cura' no Siemens NX."
#: cura-siemensnx-plugin/plugin.json
msgctxt "name"
msgid "Siemens NX Integration"
msgstr ""
msgstr "Integração ao Siemens NX"
#: 3MFReader/plugin.json
msgctxt "description"
@ -4406,12 +4412,12 @@ msgstr "Gerador de 3MF"
#: UserAgreementPlugin/plugin.json
msgctxt "description"
msgid "Ask the user once if he/she agrees with our license"
msgstr ""
msgstr "Pergunta ao usuário uma única vez sobre concordância com a licença"
#: UserAgreementPlugin/plugin.json
msgctxt "name"
msgid "UserAgreement"
msgstr ""
msgstr "Acordo de Usuário"
#: UltimakerMachineActions/plugin.json
msgctxt "description"

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 3.0\n"
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
"POT-Creation-Date: 2017-11-21 16:58+0000\n"
"PO-Revision-Date: 2017-10-06 08:00-0300\n"
"PO-Revision-Date: 2017-12-04 09:00-0300\n"
"Last-Translator: Cláudio Sampaio <patola@makerlinux.com.br>\n"
"Language-Team: Cláudio Sampaio <patola@makerlinux.com.br> and CoderSquirrel <jasaneschio@gmail.com>\n"
"Language: pt_BR\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 3.0\n"
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
"POT-Creation-Date: 2017-11-21 16:58+0000\n"
"PO-Revision-Date: 2017-10-06 10:00-0300\n"
"PO-Revision-Date: 2017-12-04 10:20-0300\n"
"Last-Translator: Cláudio Sampaio <patola@makerlinux.com.br>\n"
"Language-Team: Cláudio Sampaio <patola@makerlinux.com.br> and CoderSquirrel <jasaneschio@gmail.com>\n"
"Language: pt_BR\n"
@ -613,27 +613,27 @@ msgstr "A altura da camada inicial em mm. Uma camada inicial mais espessa faz a
#: fdmprinter.def.json
msgctxt "slicing_tolerance label"
msgid "Slicing Tolerance"
msgstr ""
msgstr "Tolerância de Fatiamento"
#: fdmprinter.def.json
msgctxt "slicing_tolerance description"
msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process."
msgstr ""
msgstr "Como fatiar camadas com superfícies diagonais. As áreas de uma camada podem ser geradas baseadas em onde o meio da camada interseciona a superfície (Meio). Alternativamente, cada camada pode ter as áreas que se encontram dentro do volume por toda a altura da camada (Exclusivo) ou a camada pode abranger todas as áreas que tenham qualquer penetração dentro do volume (Inclusivo). Exclusivo retém mais detalhes, Inclusivo é melhor para encaixes e Meio toma menos tempo para processar."
#: fdmprinter.def.json
msgctxt "slicing_tolerance option middle"
msgid "Middle"
msgstr ""
msgstr "Meio"
#: fdmprinter.def.json
msgctxt "slicing_tolerance option exclusive"
msgid "Exclusive"
msgstr ""
msgstr "Exclusivo"
#: fdmprinter.def.json
msgctxt "slicing_tolerance option inclusive"
msgid "Inclusive"
msgstr ""
msgstr "Inclusivo"
#: fdmprinter.def.json
msgctxt "line_width label"
@ -808,7 +808,7 @@ msgstr "O carro extrusor usado para imprimir a parede externa. Este ajuste é us
#: fdmprinter.def.json
msgctxt "wall_x_extruder_nr label"
msgid "Inner Wall Extruder"
msgstr ""
msgstr "Extrusor da Parede Interior"
#: fdmprinter.def.json
msgctxt "wall_x_extruder_nr description"
@ -1388,7 +1388,7 @@ msgstr "Padrão de Preenchimento"
#: fdmprinter.def.json
msgctxt "infill_pattern description"
msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, tri-hexagon, cubic, octet, quarter cubic, cross and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction."
msgstr ""
msgstr "O padrão do material de preenchimento da impressão. 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."
#: fdmprinter.def.json
msgctxt "infill_pattern option grid"
@ -1408,7 +1408,7 @@ msgstr "Triângulos"
#: fdmprinter.def.json
msgctxt "infill_pattern option trihexagon"
msgid "Tri-Hexagon"
msgstr ""
msgstr "Tri-Hexágono"
#: fdmprinter.def.json
msgctxt "infill_pattern option cubic"
@ -1463,7 +1463,7 @@ msgstr "Conectar Linhas de Preenchimento"
#: fdmprinter.def.json
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 ""
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 "infill_angles label"
@ -1478,22 +1478,22 @@ msgstr "Uma lista de direções de filetes em números inteiros a usar. Elemento
#: fdmprinter.def.json
msgctxt "infill_offset_x label"
msgid "Infill X Offset"
msgstr ""
msgstr "Deslocamento X do Preenchimento"
#: fdmprinter.def.json
msgctxt "infill_offset_x description"
msgid "The infill pattern is offset this distance along the X axis."
msgstr ""
msgstr "O padrão de preenchimento é corrigido/deslocado nesta distância no eixo X."
#: fdmprinter.def.json
msgctxt "infill_offset_y label"
msgid "Infill Y Offset"
msgstr ""
msgstr "Deslocamento do Preenchimento Y"
#: fdmprinter.def.json
msgctxt "infill_offset_y description"
msgid "The infill pattern is offset this distance along the Y axis."
msgstr ""
msgstr "O padrão de preenchimento é corrigido/deslocado nesta distância no eixo Y."
#: fdmprinter.def.json
msgctxt "sub_div_rad_add label"
@ -1643,7 +1643,7 @@ msgstr "Distância de Expansão do Contorno"
#: fdmprinter.def.json
msgctxt "expand_skins_expand_distance description"
msgid "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used."
msgstr ""
msgstr "A distância em que os contornos são expandidos pra dentro do preenchimento. Valores mais altos fazem o contorno aderir melhor ao padrão de preenchimento e faz as paredes de camadas vizinhas aderirem melhor ao contorno. Valores menores diminuem a quantidade de material usado."
#: fdmprinter.def.json
msgctxt "top_skin_expand_distance label"
@ -1808,22 +1808,22 @@ msgstr "Ajusta o diâmetro do filamento utilizado. Acerte este valor com o diâm
#: fdmprinter.def.json
msgctxt "material_adhesion_tendency label"
msgid "Adhesion Tendency"
msgstr ""
msgstr "Tendência à Aderência"
#: fdmprinter.def.json
msgctxt "material_adhesion_tendency description"
msgid "Surface adhesion tendency."
msgstr ""
msgstr "Tendência de aderência da superfície"
#: fdmprinter.def.json
msgctxt "material_surface_energy label"
msgid "Surface Energy"
msgstr ""
msgstr "Energia de Superfície"
#: fdmprinter.def.json
msgctxt "material_surface_energy description"
msgid "Surface energy."
msgstr ""
msgstr "Energia de superfície."
#: fdmprinter.def.json
msgctxt "material_flow label"
@ -3556,6 +3556,8 @@ 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 skirt a primeira camada da impressão.\n"
"Esta é a distância mínima. Linhas múltiplas de skirt estenderão além desta distância."
#: fdmprinter.def.json
msgctxt "skirt_brim_minimal_length label"
@ -3615,7 +3617,7 @@ msgstr "Amaciamento do Raft"
#: fdmprinter.def.json
msgctxt "raft_smoothing description"
msgid "This setting controls how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle."
msgstr ""
msgstr "Este ajuste controla quanto os cantos internos do contorno do raft são arredondados. Esses cantos internos são convertidos em semicírculos com raio igual ao valor dado aqui. Este ajuste também remove furos no contorno do raft que forem menores que o círculo equivalente."
#: fdmprinter.def.json
msgctxt "raft_airgap label"
@ -4090,12 +4092,12 @@ msgstr "Normalmente o Cura tenta costurar pequenos furos na malha e remover part
#: fdmprinter.def.json
msgctxt "meshfix_maximum_resolution label"
msgid "Maximum Resolution"
msgstr ""
msgstr "Resolução Máxima"
#: fdmprinter.def.json
msgctxt "meshfix_maximum_resolution description"
msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway."
msgstr ""
msgstr "O tamanho mínimo de um segmento de linha após o fatiamento. Se você aumentar este valor, a malha terá uma resolução menor. Isto pode permitir que a impressora mantenha a velocidade que precisa para processar o G-Code e aumentará a velocidade de fatiamento ao remover detalhes da malha que não poderia processar de qualquer jeito."
#: fdmprinter.def.json
msgctxt "multiple_mesh_overlap label"
@ -4130,12 +4132,12 @@ msgstr "Troca quais volumes sobrepondo malhas vão pertencer a cada camada, de m
#: fdmprinter.def.json
msgctxt "remove_empty_first_layers label"
msgid "Remove Empty First Layers"
msgstr ""
msgstr "Remover Camadas Iniciais Vazias"
#: fdmprinter.def.json
msgctxt "remove_empty_first_layers description"
msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle."
msgstr ""
msgstr "Remove camadas vazias entre a primeira camada impressa se estiverem presentes. Desabilitar este ajuste pode criar camadas iniciais vazias se a Tolerância de Fatiamento estiver configurada para Exclusivo ou Meio."
#: fdmprinter.def.json
msgctxt "blackmagic label"
@ -4665,22 +4667,22 @@ 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 ""
msgstr "Deslocamento de extrusão máxima da compensação de taxa de fluxo."
#: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description"
msgid "The maximum distance in mm to compensate."
msgstr ""
msgstr "A distância máxima em mm a compensar."
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label"
msgid "Flow rate compensation factor"
msgstr ""
msgstr "Fator de compensaçõ de taxa de fluxo"
#: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description"
msgid "The multiplication factor for the flow rate -> distance translation."
msgstr ""
msgstr "O fator de multiplicação para a tradução entre taxa de fluxo -> distância."
#: fdmprinter.def.json
msgctxt "wireframe_enabled label"

View File

@ -20,14 +20,16 @@ UM.MainWindow
viewportRect: Qt.rect(0, 0, (base.width - sidebar.width) / base.width, 1.0)
property bool showPrintMonitor: false
// 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
{
target: Printer
onShowPrintMonitor: {
if (show) {
topbar.startMonitoringPrint()
UM.Controller.setActiveStage("MonitorStage")
} else {
topbar.stopMonitoringPrint()
UM.Controller.setActiveStage("PrepareStage")
}
}
}
@ -331,7 +333,7 @@ UM.MainWindow
text: catalog.i18nc("@action:button","Open File");
iconSource: UM.Theme.getIcon("load")
style: UM.Theme.styles.tool_button
tooltip: '';
tooltip: ""
anchors
{
top: topbar.bottom;
@ -358,62 +360,49 @@ UM.MainWindow
Topbar
{
id: topbar
anchors.left:parent.left
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
monitoringPrint: base.showPrintMonitor
onStartMonitoringPrint: base.showPrintMonitor = true
onStopMonitoringPrint: base.showPrintMonitor = false
}
Sidebar
{
id: sidebar;
anchors
{
top: topbar.bottom;
bottom: parent.bottom;
right: parent.right;
}
z: 1
width: UM.Theme.getSize("sidebar").width;
monitoringPrint: base.showPrintMonitor
}
Rectangle
{
id: viewportOverlay
color: UM.Theme.getColor("viewport_overlay")
anchors
{
top: topbar.bottom
bottom: parent.bottom
left:parent.left
right: sidebar.left
}
visible: opacity > 0
opacity: base.showPrintMonitor ? 1 : 0
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.AllButtons
onWheel: wheel.accepted = true
}
}
Loader
{
sourceComponent: Cura.MachineManager.printerOutputDevices.length > 0 ? Cura.MachineManager.printerOutputDevices[0].monitorItem: null
visible: base.showPrintMonitor
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenterOffset: - UM.Theme.getSize("sidebar").width / 2
anchors.verticalCenterOffset: UM.Theme.getSize("sidebar_header").height / 2
property real maximumWidth: viewportOverlay.width
property real maximumHeight: viewportOverlay.height
id: sidebar
anchors
{
top: topbar.bottom
bottom: parent.bottom
right: parent.right
}
width: UM.Theme.getSize("sidebar").width
z: 1
source: UM.Controller.activeStage.sidebarComponent
}
Loader
{
id: main
anchors
{
top: topbar.bottom
bottom: parent.bottom
left: parent.left
right: sidebar.left
}
MouseArea
{
visible: UM.Controller.activeStage.mainComponent != ""
anchors.fill: parent
acceptedButtons: Qt.AllButtons
onWheel: wheel.accepted = true
}
source: UM.Controller.activeStage.mainComponent
}
UM.MessageStack

View File

@ -12,21 +12,23 @@ Menu
title: catalog.i18nc("@title:menu menubar:toplevel", "&View");
id: menu
enabled: !PrintInformation.preSliced
// main views
Instantiator
{
model: UM.ViewModel { }
model: UM.ViewModel{}
MenuItem
{
text: model.name;
checkable: true;
checked: model.active;
exclusiveGroup: group;
onTriggered: UM.Controller.setActiveView(model.id);
text: model.name
checkable: true
checked: model.active
exclusiveGroup: group
onTriggered: UM.Controller.setActiveView(model.id)
}
onObjectAdded: menu.insertItem(index, object)
onObjectRemoved: menu.removeItem(object)
}
ExclusiveGroup { id: group; }
ExclusiveGroup { id: group }
MenuSeparator {}
MenuItem { action: Cura.Actions.homeCamera; }

View File

@ -18,7 +18,6 @@ Item
property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands
property real progress: printerConnected ? Cura.MachineManager.printerOutputDevices[0].progress : 0
property int backendState: UM.Backend.state
property bool showProgress: {
// determine if we need to show the progress bar + percentage

View File

@ -28,6 +28,10 @@ Item {
return catalog.i18nc("@label:PrintjobStatus", "Please load a 3D model");
}
if (base.backendState == "undefined") {
return ""
}
switch(base.backendState)
{
case 1:
@ -46,7 +50,7 @@ Item {
}
function sliceOrStopSlicing() {
if ([1, 5].indexOf(UM.Backend.state) != -1) {
if (backend != "undefined" && [1, 5].indexOf(UM.Backend.state) != -1) {
backend.forceSlice();
} else {
backend.stopSlicing();
@ -81,7 +85,7 @@ Item {
height: parent.height
color: UM.Theme.getColor("progressbar_control")
radius: UM.Theme.getSize("progressbar_radius").width
visible: base.backendState == 2 ? true : false
visible: (base.backendState != "undefined" && base.backendState == 2) ? true : false
}
}
@ -159,10 +163,8 @@ Item {
tooltip: [1, 5].indexOf(UM.Backend.state) != -1 ? catalog.i18nc("@info:tooltip","Slice current printjob") : catalog.i18nc("@info:tooltip","Cancel slicing process")
// 1 = not started, 2 = Processing
enabled: (base.backendState == 1 || base.backendState == 2) && base.activity == true
visible: {
return !autoSlice && (base.backendState == 1 || base.backendState == 2) && base.activity == true;
}
enabled: base.backendState != "undefined" && (base.backendState == 1 || base.backendState == 2) && base.activity == true
visible: base.backendState != "undefined" && !autoSlice && (base.backendState == 1 || base.backendState == 2) && base.activity == true
property bool autoSlice
height: UM.Theme.getSize("save_button_save_to_button").height
@ -235,10 +237,8 @@ Item {
tooltip: UM.OutputDeviceManager.activeDeviceDescription;
// 3 = done, 5 = disabled
enabled: (base.backendState == 3 || base.backendState == 5) && base.activity == true
visible: {
return autoSlice || ((base.backendState == 3 || base.backendState == 5) && base.activity == true);
}
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
@ -315,8 +315,8 @@ Item {
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 == 3 || base.backendState == 5) && base.activity == true
visible: (devicesModel.deviceCount > 1) && (base.backendState == 3 || base.backendState == 5) && base.activity == true
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 {

View File

@ -24,7 +24,7 @@ Rectangle
property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null
property int backendState: UM.Backend.state
property bool monitoringPrint: false
property bool monitoringPrint: UM.Controller.activeStage.stageId == "MonitorStage"
property variant printDuration: PrintInformation.currentPrintTime
property variant printMaterialLengths: PrintInformation.materialLengths
@ -263,7 +263,7 @@ Rectangle
{
id: controlItem
anchors.bottom: footerSeparator.top
anchors.top: headerSeparator.bottom
anchors.top: monitoringPrint ? base.top : headerSeparator.bottom
anchors.left: base.left
anchors.right: base.right
sourceComponent:
@ -282,7 +282,7 @@ Rectangle
Loader
{
anchors.bottom: footerSeparator.top
anchors.top: headerSeparator.bottom
anchors.top: monitoringPrint ? base.top : headerSeparator.bottom
anchors.left: base.left
anchors.right: base.right
source:

View File

@ -34,6 +34,7 @@ Column
width: height
}
// Extruder Row
Item
{
id: extruderSelectionRow

View File

@ -403,8 +403,6 @@ Item
}
}
//
// Infill
//
@ -568,18 +566,20 @@ Item
model: infillModel
anchors.fill: parent
property int activeIndex: {
function activeIndex () {
for (var i = 0; i < infillModel.count; i++) {
var density = parseInt(infillDensity.properties.value)
var steps = parseInt(infillSteps.properties.value)
var infillModelItem = infillModel.get(i)
if (density >= infillModelItem.percentageMin
if (infillModelItem != "undefined"
&& density >= infillModelItem.percentageMin
&& density <= infillModelItem.percentageMax
&& steps >= infillModelItem.stepsMin
&& steps <= infillModelItem.stepsMax){
return i
}
&& steps <= infillModelItem.stepsMax
){
return i
}
}
return -1
}
@ -587,7 +587,7 @@ Item
Rectangle
{
anchors.fill: parent
visible: infillIconList.activeIndex == index
visible: infillIconList.activeIndex() == index
border.width: UM.Theme.getSize("default_lining").width
border.color: UM.Theme.getColor("quality_slider_unavailable")

View File

@ -6,7 +6,7 @@ import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1
import UM 1.2 as UM
import UM 1.4 as UM
import Cura 1.0 as Cura
import "Menus"
@ -16,27 +16,10 @@ Rectangle
anchors.left: parent.left
anchors.right: parent.right
height: UM.Theme.getSize("sidebar_header").height
color: base.monitoringPrint ? UM.Theme.getColor("topbar_background_color_monitoring") : UM.Theme.getColor("topbar_background_color")
color: UM.Controller.activeStage.stageId == "MonitorStage" ? UM.Theme.getColor("topbar_background_color_monitoring") : UM.Theme.getColor("topbar_background_color")
property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands
property bool monitoringPrint: false
// outgoing signal
signal startMonitoringPrint()
signal stopMonitoringPrint()
// update monitoring status when event was triggered outside topbar
Component.onCompleted: {
startMonitoringPrint.connect(function () {
base.monitoringPrint = true
UM.Controller.disableModelRendering()
})
stopMonitoringPrint.connect(function () {
base.monitoringPrint = false
UM.Controller.enableModelRendering()
})
}
UM.I18nCatalog
{
@ -67,92 +50,30 @@ Rectangle
anchors.rightMargin: UM.Theme.getSize("default_margin").width
spacing: UM.Theme.getSize("default_margin").width
Button
// The topbar is dynamically filled with all available stages
Repeater
{
id: showSettings
height: UM.Theme.getSize("sidebar_header").height
text: catalog.i18nc("@title:tab", "Prepare")
checkable: true
checked: isChecked()
exclusiveGroup: sidebarHeaderBarGroup
style: UM.Theme.styles.topbar_header_tab
id: stagesMenu
// We use a Qt.binding to re-bind the checkbox state after manually setting it
// https://stackoverflow.com/questions/38798450/qt-5-7-qml-why-are-my-checkbox-property-bindings-disappearing
onClicked: {
base.stopMonitoringPrint()
checked = Qt.binding(isChecked)
}
model: UM.StageModel{}
function isChecked () {
return !base.monitoringPrint
}
property color overlayColor: "transparent"
property string overlayIconSource: ""
}
Button
{
id: showMonitor
width: UM.Theme.getSize("topbar_button").width
height: UM.Theme.getSize("sidebar_header").height
text: catalog.i18nc("@title:tab", "Monitor")
checkable: true
checked: isChecked()
exclusiveGroup: sidebarHeaderBarGroup
style: UM.Theme.styles.topbar_header_tab_no_overlay
// We use a Qt.binding to re-bind the checkbox state after manually setting it
// https://stackoverflow.com/questions/38798450/qt-5-7-qml-why-are-my-checkbox-property-bindings-disappearing
onClicked: {
base.startMonitoringPrint()
checked = Qt.binding(isChecked)
}
function isChecked () {
return base.monitoringPrint
}
property string iconSource:
delegate: Button
{
if (!printerConnected)
{
return UM.Theme.getIcon("tab_status_unknown");
}
else if (!printerAcceptsCommands)
{
return UM.Theme.getIcon("tab_status_unknown");
}
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
if (Cura.MachineManager.printerOutputDevices[0].printerState == "maintenance")
{
return UM.Theme.getIcon("tab_status_busy");
}
switch (Cura.MachineManager.printerOutputDevices[0].jobState)
{
case "printing":
case "pre_print":
case "pausing":
case "resuming":
return UM.Theme.getIcon("tab_status_busy");
case "wait_cleanup":
return UM.Theme.getIcon("tab_status_finished");
case "ready":
case "":
return UM.Theme.getIcon("tab_status_connected")
case "paused":
return UM.Theme.getIcon("tab_status_paused")
case "error":
return UM.Theme.getIcon("tab_status_stopped")
default:
return UM.Theme.getIcon("tab_status_unknown")
}
property color overlayColor: "transparent"
property string overlayIconSource: ""
}
}
ExclusiveGroup { id: sidebarHeaderBarGroup }
ExclusiveGroup { id: topbarMenuGroup }
}
ToolButton
@ -220,17 +141,16 @@ Rectangle
menu: PrinterMenu { }
}
//View orientation Item
// View orientation Item
Row
{
id: viewOrientationControl
height: 30
spacing: 2
visible: UM.Controller.activeStage.stageId != "MonitorStage"
visible: !base.monitoringPrint
anchors {
anchors
{
verticalCenter: base.verticalCenter
right: viewModeButton.right
rightMargin: UM.Theme.getSize("default_margin").width + viewModeButton.width
@ -308,7 +228,7 @@ Rectangle
}
style: UM.Theme.styles.combobox
visible: !base.monitoringPrint
visible: UM.Controller.activeStage.stageId != "MonitorStage"
model: UM.ViewModel { }
textRole: "name"

View File

@ -14,7 +14,6 @@ setting_version = 4
cool_fan_speed = 40
infill_overlap = 15
material_final_print_temperature = =material_print_temperature - 5
prime_tower_enable = True
prime_tower_purge_volume = 0.6
prime_tower_size = 12
prime_tower_wall_thickness = 0.9

View File

@ -11,7 +11,6 @@ weight = 0
setting_version = 4
[values]
infill_overlap = =10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0
prime_tower_size = 12
prime_tower_wall_thickness = 0.9
retraction_extrusion_window = 0.5

View File

@ -14,9 +14,8 @@ setting_version = 4
cool_min_layer_time_fan_speed_max = 20
cool_min_speed = 12
infill_line_width = =round(line_width * 0.5 / 0.4, 2)
infill_overlap = =10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0
machine_nozzle_cool_down_speed = 0.9
machine_nozzle_heat_up_speed = 2.0
machine_nozzle_heat_up_speed = 1.4
ooze_shield_angle = 40
raft_acceleration = =acceleration_layer_0
raft_airgap = =round(layer_height_0 * 0.85, 2)
@ -24,7 +23,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 3)
raft_jerk = =jerk_layer_0
raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2)
retraction_min_travel = =line_width * 2
retraction_min_travel = 5
skin_overlap = 50
speed_print = 70
speed_topbottom = =math.ceil(speed_print * 30 / 70)

View File

@ -28,6 +28,9 @@ machine_min_cool_heat_time_window = 15
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_hop = 2
retraction_hop_enabled = True

View File

@ -17,7 +17,7 @@ cool_min_speed = 10
infill_overlap = 10
infill_pattern = grid
machine_nozzle_cool_down_speed = 0.9
machine_nozzle_heat_up_speed = 2.0
machine_nozzle_heat_up_speed = 1.4
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 = 190

View File

@ -57,4 +57,3 @@ travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =line_width
wall_thickness = =line_width * 3

View File

@ -11,7 +11,6 @@ setting_version = 4
[values]
brim_width = 7
infill_line_width = 0.23
infill_overlap = 0
layer_height_0 = 0.17
line_width = 0.23
machine_nozzle_cool_down_speed = 0.85
@ -21,10 +20,18 @@ machine_nozzle_size = 0.25
machine_nozzle_tip_outer_diameter = 0.65
material_final_print_temperature = =material_print_temperature - 10
material_initial_print_temperature = =material_print_temperature - 5
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_extrusion_window = 1
retraction_min_travel = 0.7
retraction_prime_speed = =retraction_speed
skin_overlap = 15
speed_layer_0 = 20
speed_print = 55
@ -32,9 +39,12 @@ speed_topbottom = 20
speed_wall = =math.ceil(speed_print * 30 / 55)
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 = 1.2
wall_line_width_x = 0.23
wall_thickness = 1.3