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/cura-siemensnx-plugin
plugins/CuraVariSlicePlugin plugins/CuraVariSlicePlugin
plugins/CuraLiveScriptingPlugin plugins/CuraLiveScriptingPlugin
plugins/CuraPrintProfileCreator
plugins/OctoPrintPlugin
#Build stuff #Build stuff
CMakeCache.txt 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. 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 Logging Issues

View File

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

View File

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

View File

@ -498,6 +498,7 @@ class MachineManager(QObject):
@pyqtProperty("QVariantList", notify=activeVariantChanged) @pyqtProperty("QVariantList", notify=activeVariantChanged)
def activeVariantNames(self) -> List[str]: def activeVariantNames(self) -> List[str]:
result = [] result = []
active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks()
if active_stacks is not None: if active_stacks is not None:
for stack in active_stacks: for stack in active_stacks:
@ -510,6 +511,7 @@ class MachineManager(QObject):
@pyqtProperty("QVariantList", notify = activeMaterialChanged) @pyqtProperty("QVariantList", notify = activeMaterialChanged)
def activeMaterialNames(self) -> List[str]: def activeMaterialNames(self) -> List[str]:
result = [] result = []
active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks()
if active_stacks is not None: if active_stacks is not None:
for stack in active_stacks: for stack in active_stacks:
@ -530,6 +532,7 @@ class MachineManager(QObject):
@pyqtProperty("QVariantMap", notify = activeVariantChanged) @pyqtProperty("QVariantMap", notify = activeVariantChanged)
def allActiveVariantIds(self) -> Dict[str, str]: def allActiveVariantIds(self) -> Dict[str, str]:
result = {} result = {}
active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
if active_stacks is not None: #If we have a global stack. if active_stacks is not None: #If we have a global stack.
for stack in active_stacks: for stack in active_stacks:
@ -548,10 +551,8 @@ class MachineManager(QObject):
@pyqtProperty("QVariantMap", notify = activeMaterialChanged) @pyqtProperty("QVariantMap", notify = activeMaterialChanged)
def allActiveMaterialIds(self) -> Dict[str, str]: def allActiveMaterialIds(self) -> Dict[str, str]:
result = {} result = {}
active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() 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 if active_stacks is not None: # If we have extruder stacks
for stack in active_stacks: for stack in active_stacks:
material_container = stack.material 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 #WORKAROUND: GITHUB-88 GITHUB-385 GITHUB-612
if Platform.isLinux(): # Needed for platform.linux_distribution, which is not available on Windows and OSX 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 # 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 import ctypes
from ctypes.util import find_library from ctypes.util import find_library
libGL = find_library("GL") libGL = find_library("GL")
@ -22,7 +23,8 @@ if Platform.isLinux(): # Needed for platform.linux_distribution, which is not av
if Platform.isWindows() and hasattr(sys, "frozen"): if Platform.isWindows() and hasattr(sys, "frozen"):
try: try:
del os.environ["PYTHONPATH"] 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 # It looks like setuptools creates a .pth file in
@ -45,6 +47,7 @@ def exceptHook(hook_type, value, traceback):
_crash_handler = CrashHandler(hook_type, value, traceback) _crash_handler = CrashHandler(hook_type, value, traceback)
_crash_handler.show() _crash_handler.show()
sys.excepthook = exceptHook sys.excepthook = exceptHook
# Workaround for a race condition on certain systems where there # 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. # Force an instance of CuraContainerRegistry to be created and reused later.
cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance() 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(): if not cura.CuraApplication.CuraApplication.preStartUp():
sys.exit(0) sys.exit(0)

View File

@ -59,7 +59,9 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter):
version_file = zipfile.ZipInfo("Cura/version.ini") version_file = zipfile.ZipInfo("Cura/version.ini")
version_config_parser = configparser.ConfigParser() version_config_parser = configparser.ConfigParser()
version_config_parser.add_section("versions") 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_file_string = StringIO()
version_config_parser.write(version_file_string) 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 *Quick camera controls
New buttons have been added to the interface that can quickly reposition the camera view of the buildplate. New buttons have been added to the interface that can quickly reposition the camera view of the buildplate.
*Increased processing speeds and performance *Lock model on platform
A 5-10% speed increase when calculating normals, loading models and slicing. 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 *Jogging
It allows the printhead to be moved with on-screen controls. Contributed by fieldOfView. 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 Ultimaker Cura engine crashes on certain models
- Fix for Uninstalling previous versions of Cura on Windows platforms - Fix for Uninstalling previous versions of Cura on Windows platforms
- Fix for displaying visible settings - Fix for displaying visible settings
- Fix for loading legacy profiles - Fix for importing legacy .ini files
- Fix for importing custom single extrusion profile - Prevent skipping user agreement dialog by pressing escape
[3.0.4] [3.0.4]
*Bug fixes *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. Extruder tabs have become buttons and icons have been updated.
*Add an "Export to Cura" button in SOLIDWORKS *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 *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. 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): def run(self):
start_time = time() 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() self._progress_message.show()
Job.yieldThread() Job.yieldThread()
if self._abort_requested: if self._abort_requested:
@ -226,10 +228,6 @@ class ProcessSlicedLayersJob(Job):
if self._progress_message: if self._progress_message:
self._progress_message.setProgress(100) self._progress_message.setProgress(100)
view = Application.getInstance().getController().getActiveView()
if view.getPluginId() == "SimulationView":
view.resetLayerData()
if self._progress_message: if self._progress_message:
self._progress_message.hide() self._progress_message.hide()

View File

@ -22,7 +22,7 @@ Cura.MachineAction
onModelChanged: onModelChanged:
{ {
var extruderCount = base.extrudersModel.rowCount(); var extruderCount = base.extrudersModel.rowCount();
base.extruderTabsCount = extruderCount > 1 ? extruderCount : 0; base.extruderTabsCount = extruderCount;
} }
} }
@ -241,7 +241,6 @@ Cura.MachineAction
UM.TooltipArea UM.TooltipArea
{ {
visible: manager.definedExtruderCount > 1
height: childrenRect.height height: childrenRect.height
width: childrenRect.width width: childrenRect.width
text: machineExtruderCountProvider.properties.description text: machineExtruderCountProvider.properties.description
@ -291,15 +290,6 @@ Cura.MachineAction
property var afterOnEditingFinished: manager.updateMaterialForDiameter property var afterOnEditingFinished: manager.updateMaterialForDiameter
property string label: catalog.i18nc("@label", "Material diameter") 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/send_slice_info", True)
Preferences.getInstance().addPreference("info/asked_send_slice_info", False) 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."), self.send_slice_info_message = Message(catalog.i18nc("@info", "Cura collects anonymised slicing statistics. You can disable this in the preferences."),
lifetime = 0, lifetime = 0,
dismissable = False, dismissable = False,

View File

@ -698,7 +698,7 @@ class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinte
if self._reply: if self._reply:
self._reply.abort() self._reply.abort()
self._stage = OutputStage.ready self._stage = OutputStage.ready
Application.getInstance().showPrintMonitor.emit(False) Application.getInstance().getController().setActiveStage("PrepareStage")
@pyqtSlot(int, result=str) @pyqtSlot(int, result=str)
def formatDuration(self, seconds): 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) Logger.log("d", "Attempting to perform an action without authentication for printer %s. Auth state is %s", self._key, self._authentication_state)
return return
Application.getInstance().showPrintMonitor.emit(True) Application.getInstance().getController().setActiveStage("MonitorStage")
self._print_finished = True self._print_finished = True
self.writeStarted.emit(self) self.writeStarted.emit(self)
self._gcode = getattr(Application.getInstance().getController().getScene(), "gcode_list") self._gcode = getattr(Application.getInstance().getController().getScene(), "gcode_list")
@ -767,7 +767,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
if button == QMessageBox.Yes: if button == QMessageBox.Yes:
self.startPrint() self.startPrint()
else: 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 # 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. # immediately without first returning and leaving QML's event system.
QTimer.singleShot(100, delayedCallback) 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 self._write_finished = True # post_reply does not always exist, so make sure we unblock writing
if self._post_reply: if self._post_reply:
self._finalizePostReply() self._finalizePostReply()
Application.getInstance().showPrintMonitor.emit(False) Application.getInstance().getController().setActiveStage("PrepareStage")
## Attempt to start a new print. ## Attempt to start a new print.
# This function can fail to actually start a print due to not being authenticated or another print already # 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.setJobName(file_name)
self._print_estimated_time = int(Application.getInstance().getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.Seconds)) 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() self.startPrint()
def _setEndstopState(self, endstop_key, value): def _setEndstopState(self, endstop_key, value):
@ -698,7 +698,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._is_printing = False self._is_printing = False
self._is_paused = False self._is_paused = False
self._updateJobState("ready") self._updateJobState("ready")
Application.getInstance().showPrintMonitor.emit(False) Application.getInstance().getController().setActiveStage("PrepareStage")
## Check if the process did not encounter an error yet. ## Check if the process did not encounter an error yet.
def hasError(self): def hasError(self):

View File

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

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 3.0\n" "Project-Id-Version: Cura 3.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-21 16:58+0100\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" "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-Team: Cláudio Sampaio <patola@makerlinux.com.br> and CoderSquirrel <jasaneschio@gmail.com>\n"
"Language: pt_BR\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 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214
msgctxt "@action:button" msgctxt "@action:button"
msgid "Open Connect..." msgid "Open Connect..."
msgstr "" msgstr "Abrir Connect..."
#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214
msgctxt "@info:tooltip" 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 #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154
msgctxt "@info:title" msgctxt "@info:title"
msgid "Printer Unavailable" msgid "Printer Unavailable"
msgstr "" msgstr "Impressora Não Disponível"
#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457
msgctxt "@info:status" msgctxt "@info:status"
@ -594,7 +594,7 @@ msgstr "Conectar pela rede"
#, python-brace-format #, python-brace-format
msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" 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." 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 #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65
#, python-format #, python-format
@ -605,7 +605,7 @@ msgstr "Novo firmware de %s disponível"
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66
msgctxt "@action:button" msgctxt "@action:button"
msgid "How to update" msgid "How to update"
msgstr "" msgstr "Como atualizar"
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77
msgctxt "@info" msgctxt "@info"
@ -640,7 +640,7 @@ msgstr "Erro ao iniciar %s!"
#: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "Simulation view" msgid "Simulation view"
msgstr "" msgstr "Visão simulada"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100
msgctxt "@info:status" 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 #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101
msgctxt "@info:title" msgctxt "@info:title"
msgid "Simulation View" msgid "Simulation View"
msgstr "" msgstr "Visão Simulada"
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26
msgid "Modify G-Code" 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 #, python-brace-format
msgctxt "@info:status" 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}" 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 #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326
msgctxt "@info:status" msgctxt "@info:status"
@ -766,25 +766,25 @@ msgstr "Configurar ajustes por Modelo"
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23
msgid "Install" msgid "Install"
msgstr "" msgstr "Instalar"
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 #: /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." 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:50
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59
#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81
msgid "Successfully installed Siemens NX Cura plugin." 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 #: /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." 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 #: /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." 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/plugins/3MFReader/WorkspaceDialog.py:167
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585
@ -947,7 +947,7 @@ msgstr "Outros"
#: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199
msgctxt "@label unknown material" msgctxt "@label unknown material"
msgid "Unknown" msgid "Unknown"
msgstr "" msgstr "Desconhecido"
#: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284
#, python-brace-format #, python-brace-format
@ -1012,12 +1012,12 @@ msgstr "Material Personalizado"
#: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182
msgctxt "@menuitem" msgctxt "@menuitem"
msgid "Global" msgid "Global"
msgstr "" msgstr "Global"
#: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229
msgctxt "@menuitem" msgctxt "@menuitem"
msgid "Not overridden" msgid "Not overridden"
msgstr "" msgstr "Não sobrepujado"
#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117
msgctxt "@info:status" msgctxt "@info:status"
@ -1066,7 +1066,7 @@ msgstr "Perfil exportado para <filename>{0}</filename>"
#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157
msgctxt "@info:title" msgctxt "@info:title"
msgid "Export succeeded" 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:183
#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 #: /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" " <p>Please use the \"Send report\" button to post a bug report automatically to our servers</p>\n"
" " " "
msgstr "" 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 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101
msgctxt "@title:groupbox" msgctxt "@title:groupbox"
msgid "System information" msgid "System information"
msgstr "" msgstr "Informação do Sistema"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109
msgctxt "@label unknown version of Cura" msgctxt "@label unknown version of Cura"
msgid "Unknown" msgid "Unknown"
msgstr "" msgstr "Desconhecida"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111
#, python-brace-format #, python-brace-format
msgctxt "@label Cura version" msgctxt "@label Cura version"
msgid "<b>Cura version:</b> {version}<br/>" 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 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112
#, python-brace-format #, python-brace-format
msgctxt "@label Platform" msgctxt "@label Platform"
msgid "<b>Platform:</b> {platform}<br/>" msgid "<b>Platform:</b> {platform}<br/>"
msgstr "" msgstr "<b>Plataforma:</b> {platform}<br/>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113
#, python-brace-format #, python-brace-format
msgctxt "@label Qt version" msgctxt "@label Qt version"
msgid "<b>Qt version:</b> {qt}<br/>" 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 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114
#, python-brace-format #, python-brace-format
msgctxt "@label PyQt version" msgctxt "@label PyQt version"
msgid "<b>PyQt version:</b> {pyqt}<br/>" 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 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115
#, python-brace-format #, python-brace-format
msgctxt "@label OpenGL" msgctxt "@label OpenGL"
msgid "<b>OpenGL:</b> {opengl}<br/>" msgid "<b>OpenGL:</b> {opengl}<br/>"
msgstr "" msgstr "<b>OpenGL:</b> {opengl}<br/>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130
#, python-brace-format #, python-brace-format
msgctxt "@label OpenGL version" msgctxt "@label OpenGL version"
msgid "<li>OpenGL Version: {version}</li>" msgid "<li>OpenGL Version: {version}</li>"
msgstr "" msgstr "<li>Versão da OpenGL: {version}</li>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131
#, python-brace-format #, python-brace-format
msgctxt "@label OpenGL vendor" msgctxt "@label OpenGL vendor"
msgid "<li>OpenGL Vendor: {vendor}</li>" msgid "<li>OpenGL Vendor: {vendor}</li>"
msgstr "" msgstr "<li>Fornecedor da OpenGL: {vendor}</li>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132
#, python-brace-format #, python-brace-format
msgctxt "@label OpenGL renderer" msgctxt "@label OpenGL renderer"
msgid "<li>OpenGL Renderer: {renderer}</li>" msgid "<li>OpenGL Renderer: {renderer}</li>"
msgstr "" msgstr "<li>Renderizador da OpenGL: {renderer}</li>"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141
msgctxt "@title:groupbox" msgctxt "@title:groupbox"
msgid "Exception traceback" msgid "Exception traceback"
msgstr "" msgstr "Traceback de exceção"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208
msgctxt "@title:groupbox" msgctxt "@title:groupbox"
msgid "Logs" msgid "Logs"
msgstr "" msgstr "Registros"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231
msgctxt "@title:groupbox" msgctxt "@title:groupbox"
msgid "User description" msgid "User description"
msgstr "" msgstr "Descrição do usuário"
#: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246
msgctxt "@action:button" msgctxt "@action:button"
msgid "Send report" msgid "Send report"
msgstr "" msgstr "Enviar relatório"
#: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256
msgctxt "@info:progress" 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 #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416
msgctxt "@info:status" msgctxt "@info:status"
msgid "The selected model was too small to load." 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 #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59
msgctxt "@title" 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 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "Opens the print jobs page with your default web browser." 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/OpenPanelButton.qml:15
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 #: /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 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257
msgctxt "@label:status" msgctxt "@label:status"
msgid "Disabled" msgid "Disabled"
msgstr "" msgstr "Desabilitado"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273
msgctxt "@label:status" msgctxt "@label:status"
@ -1682,12 +1685,12 @@ msgstr "Finalizado"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290
msgctxt "@label:status" msgctxt "@label:status"
msgid "Paused" msgid "Paused"
msgstr "" msgstr "Pausado"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292
msgctxt "@label:status" msgctxt "@label:status"
msgid "Resuming" msgid "Resuming"
msgstr "" msgstr "Continuando"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294
msgctxt "@label:status" msgctxt "@label:status"
@ -1829,12 +1832,12 @@ msgstr "Tipo de Linha"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104
msgctxt "@label:listbox" msgctxt "@label:listbox"
msgid "Feedrate" msgid "Feedrate"
msgstr "" msgstr "Taxa de alimentação"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108
msgctxt "@label:listbox" msgctxt "@label:listbox"
msgid "Layer thickness" msgid "Layer thickness"
msgstr "" msgstr "Largura de camada"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148
msgctxt "@label" msgctxt "@label"
@ -1884,12 +1887,12 @@ msgstr "Parede Interna"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378
msgctxt "@label" msgctxt "@label"
msgid "min" msgid "min"
msgstr "" msgstr "mín"
#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420
msgctxt "@label" msgctxt "@label"
msgid "max" msgid "max"
msgstr "" msgstr "máx"
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18
msgctxt "@title:window" msgctxt "@title:window"
@ -2127,7 +2130,7 @@ msgstr "%1 de %2"
#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368
msgctxt "@action:warning" msgctxt "@action:warning"
msgid "Loading a project will clear all models on the build plate." 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 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386
msgctxt "@action:button" msgctxt "@action:button"
@ -2171,6 +2174,9 @@ msgid ""
"You need to accept this license to install this plugin.\n" "You need to accept this license to install this plugin.\n"
"Do you agree with the terms below?" "Do you agree with the terms below?"
msgstr "" 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 #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242
msgctxt "@action:button" msgctxt "@action:button"
@ -2185,7 +2191,7 @@ msgstr "Recusar"
#: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16
msgctxt "@title:window" msgctxt "@title:window"
msgid "User Agreement" 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/UM2UpgradeSelectionMachineAction.qml:25
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.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 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43
msgctxt "@label" msgctxt "@label"
msgid "version: %1" msgid "version: %1"
msgstr "" msgstr "versão: %1"
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56
msgctxt "@label" msgctxt "@label"
@ -3167,7 +3173,7 @@ msgstr "Biblioteca de recorte de polígonos"
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135
msgctxt "@Label" msgctxt "@Label"
msgid "Python HTTP library" msgid "Python HTTP library"
msgstr "" msgstr "Biblioteca de HTTP Python"
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137
msgctxt "@label" msgctxt "@label"
@ -3187,7 +3193,7 @@ msgstr "Perfil:"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66
msgctxt "@" msgctxt "@"
msgid "No Profile Available" msgid "No Profile Available"
msgstr "" msgstr "Nenhum Perfil Disponível"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104
msgctxt "@tooltip" msgctxt "@tooltip"
@ -3298,44 +3304,44 @@ msgstr ""
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:336 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:336
msgctxt "@label Hours and minutes" msgctxt "@label Hours and minutes"
msgid "00h 00min" msgid "00h 00min"
msgstr "" msgstr "00h 00min"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354
msgctxt "@tooltip" msgctxt "@tooltip"
msgid "<b>Time specification</b><br/><table>" 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 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429
msgctxt "@label" msgctxt "@label"
msgid "Cost specification" 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:434
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445
msgctxt "@label m for meter" msgctxt "@label m for meter"
msgid "%1m" msgid "%1m"
msgstr "" msgstr "%1m"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446
msgctxt "@label g for grams" msgctxt "@label g for grams"
msgid "%1g" msgid "%1g"
msgstr "" msgstr "%1g"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444
msgctxt "@label" msgctxt "@label"
msgid "Total:" msgid "Total:"
msgstr "" msgstr "Total:"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 #: /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" msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost"
msgid "%1m / ~ %2g / ~ %4 %3" msgid "%1m / ~ %2g / ~ %4 %3"
msgstr "" msgstr "%1m / ~ %2g / ~ %4 %3"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503
msgctxt "@label Print estimates: m for meters, g for grams" msgctxt "@label Print estimates: m for meters, g for grams"
msgid "%1m / ~ %2g" msgid "%1m / ~ %2g"
msgstr "" msgstr "%1m / ~ %2g"
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586
msgctxt "@tooltip" 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 #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703
msgctxt "@label" msgctxt "@label"
msgid "Printer control" msgid "Printer control"
msgstr "" msgstr "Controle da Impressora"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717
msgctxt "@label" msgctxt "@label"
msgid "Jog Position" msgid "Jog Position"
msgstr "" msgstr "Posição de Trote"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735
msgctxt "@label" msgctxt "@label"
msgid "X/Y" msgid "X/Y"
msgstr "" msgstr "X/Y"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842
msgctxt "@label" msgctxt "@label"
msgid "Z" msgid "Z"
msgstr "" msgstr "Z"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907
msgctxt "@label" msgctxt "@label"
msgid "Jog Distance" msgid "Jog Distance"
msgstr "" msgstr "Distância de Trote"
#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018
msgctxt "@label" msgctxt "@label"
@ -3525,7 +3531,7 @@ msgstr "&Sair"
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107
msgctxt "@action:inmenu menubar:view" msgctxt "@action:inmenu menubar:view"
msgid "&Reset camera position" msgid "&Reset camera position"
msgstr "" msgstr "&Recompor posições de câmera"
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
@ -3767,7 +3773,7 @@ msgstr "Importar todos como modelos"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19
msgctxt "@title:window" msgctxt "@title:window"
msgid "Ultimaker Cura" msgid "Ultimaker Cura"
msgstr "" msgstr "Ultimaker Cura"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81
msgctxt "@title:menu menubar:toplevel" msgctxt "@title:menu menubar:toplevel"
@ -3924,7 +3930,7 @@ msgstr "Altura de Camada"
#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323
msgctxt "@tooltip" msgctxt "@tooltip"
msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" 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 #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340
msgctxt "@label" msgctxt "@label"
@ -3944,7 +3950,7 @@ msgstr "Mais Rápido"
#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388
msgctxt "@tooltip" msgctxt "@tooltip"
msgid "You have modified some profile settings. If you want to change these go to custom mode." 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 #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413
msgctxt "@label" msgctxt "@label"
@ -4036,7 +4042,7 @@ msgstr "Material"
#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349
msgctxt "@label" msgctxt "@label"
msgid "<a href='%1'>Check compatibility</a>" msgid "<a href='%1'>Check compatibility</a>"
msgstr "" msgstr "<a href='%1'>Verificar compatibilidade</a>"
#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369
msgctxt "@tooltip" msgctxt "@tooltip"
@ -4176,12 +4182,12 @@ msgstr "Integração ao SolidWorks"
#: SimulationView/plugin.json #: SimulationView/plugin.json
msgctxt "description" msgctxt "description"
msgid "Provides the Simulation view." msgid "Provides the Simulation view."
msgstr "" msgstr "Provê a Visão Simulada."
#: SimulationView/plugin.json #: SimulationView/plugin.json
msgctxt "name" msgctxt "name"
msgid "Simulation View" msgid "Simulation View"
msgstr "" msgstr "Visão Simulada"
#: PostProcessingPlugin/plugin.json #: PostProcessingPlugin/plugin.json
msgctxt "description" msgctxt "description"
@ -4266,12 +4272,12 @@ msgstr "Atualização de Versão de 2.7 para 3.0"
#: VersionUpgrade/VersionUpgrade30to31/plugin.json #: VersionUpgrade/VersionUpgrade30to31/plugin.json
msgctxt "description" msgctxt "description"
msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." 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 #: VersionUpgrade/VersionUpgrade30to31/plugin.json
msgctxt "name" msgctxt "name"
msgid "Version Upgrade 3.0 to 3.1" msgid "Version Upgrade 3.0 to 3.1"
msgstr "" msgstr "Atualização de Versão 3.0 para 3.1"
#: VersionUpgrade/VersionUpgrade26to27/plugin.json #: VersionUpgrade/VersionUpgrade26to27/plugin.json
msgctxt "description" msgctxt "description"
@ -4336,12 +4342,12 @@ msgstr "Ferramenta de Ajustes Por Modelo"
#: cura-siemensnx-plugin/plugin.json #: cura-siemensnx-plugin/plugin.json
msgctxt "description" msgctxt "description"
msgid "Helps you to install an 'export to Cura' button in Siemens NX." 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 #: cura-siemensnx-plugin/plugin.json
msgctxt "name" msgctxt "name"
msgid "Siemens NX Integration" msgid "Siemens NX Integration"
msgstr "" msgstr "Integração ao Siemens NX"
#: 3MFReader/plugin.json #: 3MFReader/plugin.json
msgctxt "description" msgctxt "description"
@ -4406,12 +4412,12 @@ msgstr "Gerador de 3MF"
#: UserAgreementPlugin/plugin.json #: UserAgreementPlugin/plugin.json
msgctxt "description" msgctxt "description"
msgid "Ask the user once if he/she agrees with our license" 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 #: UserAgreementPlugin/plugin.json
msgctxt "name" msgctxt "name"
msgid "UserAgreement" msgid "UserAgreement"
msgstr "" msgstr "Acordo de Usuário"
#: UltimakerMachineActions/plugin.json #: UltimakerMachineActions/plugin.json
msgctxt "description" msgctxt "description"

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 3.0\n" "Project-Id-Version: Cura 3.0\n"
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
"POT-Creation-Date: 2017-11-21 16:58+0000\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" "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-Team: Cláudio Sampaio <patola@makerlinux.com.br> and CoderSquirrel <jasaneschio@gmail.com>\n"
"Language: pt_BR\n" "Language: pt_BR\n"

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 3.0\n" "Project-Id-Version: Cura 3.0\n"
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
"POT-Creation-Date: 2017-11-21 16:58+0000\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" "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-Team: Cláudio Sampaio <patola@makerlinux.com.br> and CoderSquirrel <jasaneschio@gmail.com>\n"
"Language: pt_BR\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 #: fdmprinter.def.json
msgctxt "slicing_tolerance label" msgctxt "slicing_tolerance label"
msgid "Slicing Tolerance" msgid "Slicing Tolerance"
msgstr "" msgstr "Tolerância de Fatiamento"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "slicing_tolerance description" 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." 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 #: fdmprinter.def.json
msgctxt "slicing_tolerance option middle" msgctxt "slicing_tolerance option middle"
msgid "Middle" msgid "Middle"
msgstr "" msgstr "Meio"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "slicing_tolerance option exclusive" msgctxt "slicing_tolerance option exclusive"
msgid "Exclusive" msgid "Exclusive"
msgstr "" msgstr "Exclusivo"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "slicing_tolerance option inclusive" msgctxt "slicing_tolerance option inclusive"
msgid "Inclusive" msgid "Inclusive"
msgstr "" msgstr "Inclusivo"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "line_width label" msgctxt "line_width label"
@ -808,7 +808,7 @@ msgstr "O carro extrusor usado para imprimir a parede externa. Este ajuste é us
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "wall_x_extruder_nr label" msgctxt "wall_x_extruder_nr label"
msgid "Inner Wall Extruder" msgid "Inner Wall Extruder"
msgstr "" msgstr "Extrusor da Parede Interior"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "wall_x_extruder_nr description" msgctxt "wall_x_extruder_nr description"
@ -1388,7 +1388,7 @@ msgstr "Padrão de Preenchimento"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "infill_pattern description" 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. 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 #: fdmprinter.def.json
msgctxt "infill_pattern option grid" msgctxt "infill_pattern option grid"
@ -1408,7 +1408,7 @@ msgstr "Triângulos"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "infill_pattern option trihexagon" msgctxt "infill_pattern option trihexagon"
msgid "Tri-Hexagon" msgid "Tri-Hexagon"
msgstr "" msgstr "Tri-Hexágono"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "infill_pattern option cubic" msgctxt "infill_pattern option cubic"
@ -1463,7 +1463,7 @@ msgstr "Conectar Linhas de Preenchimento"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "zig_zaggify_infill description" 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." 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 #: fdmprinter.def.json
msgctxt "infill_angles label" 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 #: fdmprinter.def.json
msgctxt "infill_offset_x label" msgctxt "infill_offset_x label"
msgid "Infill X Offset" msgid "Infill X Offset"
msgstr "" msgstr "Deslocamento X do Preenchimento"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "infill_offset_x description" msgctxt "infill_offset_x description"
msgid "The infill pattern is offset this distance along the X axis." 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 #: fdmprinter.def.json
msgctxt "infill_offset_y label" msgctxt "infill_offset_y label"
msgid "Infill Y Offset" msgid "Infill Y Offset"
msgstr "" msgstr "Deslocamento do Preenchimento Y"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "infill_offset_y description" msgctxt "infill_offset_y description"
msgid "The infill pattern is offset this distance along the Y axis." 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 #: fdmprinter.def.json
msgctxt "sub_div_rad_add label" msgctxt "sub_div_rad_add label"
@ -1643,7 +1643,7 @@ msgstr "Distância de Expansão do Contorno"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "expand_skins_expand_distance description" 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." 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 #: fdmprinter.def.json
msgctxt "top_skin_expand_distance label" 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 #: fdmprinter.def.json
msgctxt "material_adhesion_tendency label" msgctxt "material_adhesion_tendency label"
msgid "Adhesion Tendency" msgid "Adhesion Tendency"
msgstr "" msgstr "Tendência à Aderência"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "material_adhesion_tendency description" msgctxt "material_adhesion_tendency description"
msgid "Surface adhesion tendency." msgid "Surface adhesion tendency."
msgstr "" msgstr "Tendência de aderência da superfície"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "material_surface_energy label" msgctxt "material_surface_energy label"
msgid "Surface Energy" msgid "Surface Energy"
msgstr "" msgstr "Energia de Superfície"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "material_surface_energy description" msgctxt "material_surface_energy description"
msgid "Surface energy." msgid "Surface energy."
msgstr "" msgstr "Energia de superfície."
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "material_flow label" msgctxt "material_flow label"
@ -3556,6 +3556,8 @@ msgid ""
"The horizontal distance between the skirt and the first layer of the print.\n" "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." "This is the minimum distance. Multiple skirt lines will extend outwards from this distance."
msgstr "" 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 #: fdmprinter.def.json
msgctxt "skirt_brim_minimal_length label" msgctxt "skirt_brim_minimal_length label"
@ -3615,7 +3617,7 @@ msgstr "Amaciamento do Raft"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "raft_smoothing description" 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." 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 #: fdmprinter.def.json
msgctxt "raft_airgap label" msgctxt "raft_airgap label"
@ -4090,12 +4092,12 @@ msgstr "Normalmente o Cura tenta costurar pequenos furos na malha e remover part
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "meshfix_maximum_resolution label" msgctxt "meshfix_maximum_resolution label"
msgid "Maximum Resolution" msgid "Maximum Resolution"
msgstr "" msgstr "Resolução Máxima"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "meshfix_maximum_resolution description" 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." 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 #: fdmprinter.def.json
msgctxt "multiple_mesh_overlap label" 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 #: fdmprinter.def.json
msgctxt "remove_empty_first_layers label" msgctxt "remove_empty_first_layers label"
msgid "Remove Empty First Layers" msgid "Remove Empty First Layers"
msgstr "" msgstr "Remover Camadas Iniciais Vazias"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "remove_empty_first_layers description" 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." 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 #: fdmprinter.def.json
msgctxt "blackmagic label" 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 #: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset label" msgctxt "flow_rate_max_extrusion_offset label"
msgid "Flow rate compensation max extrusion offset" 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 #: fdmprinter.def.json
msgctxt "flow_rate_max_extrusion_offset description" msgctxt "flow_rate_max_extrusion_offset description"
msgid "The maximum distance in mm to compensate." msgid "The maximum distance in mm to compensate."
msgstr "" msgstr "A distância máxima em mm a compensar."
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor label" msgctxt "flow_rate_extrusion_offset_factor label"
msgid "Flow rate compensation factor" msgid "Flow rate compensation factor"
msgstr "" msgstr "Fator de compensaçõ de taxa de fluxo"
#: fdmprinter.def.json #: fdmprinter.def.json
msgctxt "flow_rate_extrusion_offset_factor description" msgctxt "flow_rate_extrusion_offset_factor description"
msgid "The multiplication factor for the flow rate -> distance translation." 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 #: fdmprinter.def.json
msgctxt "wireframe_enabled label" 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) viewportRect: Qt.rect(0, 0, (base.width - sidebar.width) / base.width, 1.0)
property bool showPrintMonitor: false 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 Connections
{ {
target: Printer target: Printer
onShowPrintMonitor: { onShowPrintMonitor: {
if (show) { if (show) {
topbar.startMonitoringPrint() UM.Controller.setActiveStage("MonitorStage")
} else { } else {
topbar.stopMonitoringPrint() UM.Controller.setActiveStage("PrepareStage")
} }
} }
} }
@ -331,7 +333,7 @@ UM.MainWindow
text: catalog.i18nc("@action:button","Open File"); text: catalog.i18nc("@action:button","Open File");
iconSource: UM.Theme.getIcon("load") iconSource: UM.Theme.getIcon("load")
style: UM.Theme.styles.tool_button style: UM.Theme.styles.tool_button
tooltip: ''; tooltip: ""
anchors anchors
{ {
top: topbar.bottom; top: topbar.bottom;
@ -361,31 +363,29 @@ UM.MainWindow
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.top: parent.top anchors.top: parent.top
monitoringPrint: base.showPrintMonitor
onStartMonitoringPrint: base.showPrintMonitor = true
onStopMonitoringPrint: base.showPrintMonitor = false
} }
Sidebar Loader
{ {
id: sidebar; id: sidebar
anchors anchors
{ {
top: topbar.bottom; top: topbar.bottom
bottom: parent.bottom; bottom: parent.bottom
right: parent.right; right: parent.right
} }
width: UM.Theme.getSize("sidebar").width
z: 1 z: 1
width: UM.Theme.getSize("sidebar").width;
monitoringPrint: base.showPrintMonitor source: UM.Controller.activeStage.sidebarComponent
} }
Rectangle Loader
{ {
id: viewportOverlay id: main
color: UM.Theme.getColor("viewport_overlay")
anchors anchors
{ {
top: topbar.bottom top: topbar.bottom
@ -393,27 +393,16 @@ UM.MainWindow
left: parent.left left: parent.left
right: sidebar.left right: sidebar.left
} }
visible: opacity > 0
opacity: base.showPrintMonitor ? 1 : 0
MouseArea { MouseArea
{
visible: UM.Controller.activeStage.mainComponent != ""
anchors.fill: parent anchors.fill: parent
acceptedButtons: Qt.AllButtons acceptedButtons: Qt.AllButtons
onWheel: wheel.accepted = true onWheel: wheel.accepted = true
} }
}
Loader source: UM.Controller.activeStage.mainComponent
{
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
} }
UM.MessageStack UM.MessageStack

View File

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

View File

@ -18,7 +18,6 @@ Item
property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands
property real progress: printerConnected ? Cura.MachineManager.printerOutputDevices[0].progress : 0 property real progress: printerConnected ? Cura.MachineManager.printerOutputDevices[0].progress : 0
property int backendState: UM.Backend.state
property bool showProgress: { property bool showProgress: {
// determine if we need to show the progress bar + percentage // 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"); return catalog.i18nc("@label:PrintjobStatus", "Please load a 3D model");
} }
if (base.backendState == "undefined") {
return ""
}
switch(base.backendState) switch(base.backendState)
{ {
case 1: case 1:
@ -46,7 +50,7 @@ Item {
} }
function sliceOrStopSlicing() { function sliceOrStopSlicing() {
if ([1, 5].indexOf(UM.Backend.state) != -1) { if (backend != "undefined" && [1, 5].indexOf(UM.Backend.state) != -1) {
backend.forceSlice(); backend.forceSlice();
} else { } else {
backend.stopSlicing(); backend.stopSlicing();
@ -81,7 +85,7 @@ Item {
height: parent.height height: parent.height
color: UM.Theme.getColor("progressbar_control") color: UM.Theme.getColor("progressbar_control")
radius: UM.Theme.getSize("progressbar_radius").width 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") 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 // 1 = not started, 2 = Processing
enabled: (base.backendState == 1 || base.backendState == 2) && base.activity == true enabled: base.backendState != "undefined" && (base.backendState == 1 || base.backendState == 2) && base.activity == true
visible: { visible: base.backendState != "undefined" && !autoSlice && (base.backendState == 1 || base.backendState == 2) && base.activity == true
return !autoSlice && (base.backendState == 1 || base.backendState == 2) && base.activity == true;
}
property bool autoSlice property bool autoSlice
height: UM.Theme.getSize("save_button_save_to_button").height height: UM.Theme.getSize("save_button_save_to_button").height
@ -235,10 +237,8 @@ Item {
tooltip: UM.OutputDeviceManager.activeDeviceDescription; tooltip: UM.OutputDeviceManager.activeDeviceDescription;
// 3 = done, 5 = disabled // 3 = done, 5 = disabled
enabled: (base.backendState == 3 || base.backendState == 5) && base.activity == true enabled: base.backendState != "undefined" && (base.backendState == 3 || base.backendState == 5) && base.activity == true
visible: { visible: base.backendState != "undefined" && autoSlice || ((base.backendState == 3 || base.backendState == 5) && base.activity == true)
return autoSlice || ((base.backendState == 3 || base.backendState == 5) && base.activity == true);
}
property bool autoSlice property bool autoSlice
height: UM.Theme.getSize("save_button_save_to_button").height 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 width: UM.Theme.getSize("save_button_save_to_button").height
height: UM.Theme.getSize("save_button_save_to_button").height height: UM.Theme.getSize("save_button_save_to_button").height
// 3 = Done, 5 = Disabled // 3 = Done, 5 = Disabled
enabled: (base.backendState == 3 || base.backendState == 5) && base.activity == true enabled: base.backendState != "undefined" && (base.backendState == 3 || base.backendState == 5) && base.activity == true
visible: (devicesModel.deviceCount > 1) && (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 { style: ButtonStyle {

View File

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

View File

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

View File

@ -403,8 +403,6 @@ Item
} }
} }
// //
// Infill // Infill
// //
@ -568,16 +566,18 @@ Item
model: infillModel model: infillModel
anchors.fill: parent anchors.fill: parent
property int activeIndex: { function activeIndex () {
for (var i = 0; i < infillModel.count; i++) { for (var i = 0; i < infillModel.count; i++) {
var density = parseInt(infillDensity.properties.value) var density = parseInt(infillDensity.properties.value)
var steps = parseInt(infillSteps.properties.value) var steps = parseInt(infillSteps.properties.value)
var infillModelItem = infillModel.get(i) var infillModelItem = infillModel.get(i)
if (density >= infillModelItem.percentageMin if (infillModelItem != "undefined"
&& density >= infillModelItem.percentageMin
&& density <= infillModelItem.percentageMax && density <= infillModelItem.percentageMax
&& steps >= infillModelItem.stepsMin && steps >= infillModelItem.stepsMin
&& steps <= infillModelItem.stepsMax){ && steps <= infillModelItem.stepsMax
){
return i return i
} }
} }
@ -587,7 +587,7 @@ Item
Rectangle Rectangle
{ {
anchors.fill: parent anchors.fill: parent
visible: infillIconList.activeIndex == index visible: infillIconList.activeIndex() == index
border.width: UM.Theme.getSize("default_lining").width border.width: UM.Theme.getSize("default_lining").width
border.color: UM.Theme.getColor("quality_slider_unavailable") 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.Controls.Styles 1.1
import QtQuick.Layouts 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 Cura 1.0 as Cura
import "Menus" import "Menus"
@ -16,27 +16,10 @@ Rectangle
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
height: UM.Theme.getSize("sidebar_header").height 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 printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands 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 UM.I18nCatalog
{ {
@ -67,92 +50,30 @@ Rectangle
anchors.rightMargin: UM.Theme.getSize("default_margin").width anchors.rightMargin: UM.Theme.getSize("default_margin").width
spacing: 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 id: stagesMenu
height: UM.Theme.getSize("sidebar_header").height
text: catalog.i18nc("@title:tab", "Prepare") model: UM.StageModel{}
delegate: Button
{
text: model.name
checkable: true checkable: true
checked: isChecked() checked: model.active
exclusiveGroup: sidebarHeaderBarGroup exclusiveGroup: topbarMenuGroup
style: UM.Theme.styles.topbar_header_tab 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
// We use a Qt.binding to re-bind the checkbox state after manually setting it onClicked: UM.Controller.setActiveStage(model.id)
// https://stackoverflow.com/questions/38798450/qt-5-7-qml-why-are-my-checkbox-property-bindings-disappearing iconSource: model.stage.iconSource
onClicked: {
base.stopMonitoringPrint()
checked = Qt.binding(isChecked)
}
function isChecked () {
return !base.monitoringPrint
}
property color overlayColor: "transparent" property color overlayColor: "transparent"
property string overlayIconSource: "" 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 () { ExclusiveGroup { id: topbarMenuGroup }
return base.monitoringPrint
}
property string iconSource:
{
if (!printerConnected)
{
return UM.Theme.getIcon("tab_status_unknown");
}
else if (!printerAcceptsCommands)
{
return UM.Theme.getIcon("tab_status_unknown");
}
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")
}
}
}
ExclusiveGroup { id: sidebarHeaderBarGroup }
} }
ToolButton ToolButton
@ -225,12 +146,11 @@ Rectangle
{ {
id: viewOrientationControl id: viewOrientationControl
height: 30 height: 30
spacing: 2 spacing: 2
visible: UM.Controller.activeStage.stageId != "MonitorStage"
visible: !base.monitoringPrint anchors
{
anchors {
verticalCenter: base.verticalCenter verticalCenter: base.verticalCenter
right: viewModeButton.right right: viewModeButton.right
rightMargin: UM.Theme.getSize("default_margin").width + viewModeButton.width rightMargin: UM.Theme.getSize("default_margin").width + viewModeButton.width
@ -308,7 +228,7 @@ Rectangle
} }
style: UM.Theme.styles.combobox style: UM.Theme.styles.combobox
visible: !base.monitoringPrint visible: UM.Controller.activeStage.stageId != "MonitorStage"
model: UM.ViewModel { } model: UM.ViewModel { }
textRole: "name" textRole: "name"

View File

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

View File

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

View File

@ -14,9 +14,8 @@ setting_version = 4
cool_min_layer_time_fan_speed_max = 20 cool_min_layer_time_fan_speed_max = 20
cool_min_speed = 12 cool_min_speed = 12
infill_line_width = =round(line_width * 0.5 / 0.4, 2) 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_cool_down_speed = 0.9
machine_nozzle_heat_up_speed = 2.0 machine_nozzle_heat_up_speed = 1.4
ooze_shield_angle = 40 ooze_shield_angle = 40
raft_acceleration = =acceleration_layer_0 raft_acceleration = =acceleration_layer_0
raft_airgap = =round(layer_height_0 * 0.85, 2) 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_jerk = =jerk_layer_0
raft_margin = 10 raft_margin = 10
raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) 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 skin_overlap = 50
speed_print = 70 speed_print = 70
speed_topbottom = =math.ceil(speed_print * 30 / 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 multiple_mesh_overlap = 0
ooze_shield_angle = 40 ooze_shield_angle = 40
prime_tower_enable = True 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_count_max = 80
retraction_hop = 2 retraction_hop = 2
retraction_hop_enabled = True retraction_hop_enabled = True

View File

@ -17,7 +17,7 @@ cool_min_speed = 10
infill_overlap = 10 infill_overlap = 10
infill_pattern = grid infill_pattern = grid
machine_nozzle_cool_down_speed = 0.9 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_final_print_temperature = =max(-273.15, material_print_temperature - 15)
material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) material_initial_print_temperature = =max(-273.15, material_print_temperature - 10)
material_print_temperature = 190 material_print_temperature = 190

View File

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

View File

@ -11,7 +11,6 @@ setting_version = 4
[values] [values]
brim_width = 7 brim_width = 7
infill_line_width = 0.23 infill_line_width = 0.23
infill_overlap = 0
layer_height_0 = 0.17 layer_height_0 = 0.17
line_width = 0.23 line_width = 0.23
machine_nozzle_cool_down_speed = 0.85 machine_nozzle_cool_down_speed = 0.85
@ -21,10 +20,18 @@ machine_nozzle_size = 0.25
machine_nozzle_tip_outer_diameter = 0.65 machine_nozzle_tip_outer_diameter = 0.65
material_final_print_temperature = =material_print_temperature - 10 material_final_print_temperature = =material_print_temperature - 10
material_initial_print_temperature = =material_print_temperature - 5 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_interface_thickness = =layer_height * 1.5
raft_jerk = =jerk_print
raft_margin = 15
raft_surface_layers = 2
retraction_count_max = 25 retraction_count_max = 25
retraction_extrusion_window = 1 retraction_extrusion_window = 1
retraction_min_travel = 0.7 retraction_min_travel = 0.7
retraction_prime_speed = =retraction_speed
skin_overlap = 15 skin_overlap = 15
speed_layer_0 = 20 speed_layer_0 = 20
speed_print = 55 speed_print = 55
@ -32,9 +39,12 @@ speed_topbottom = 20
speed_wall = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55)
support_angle = 60 support_angle = 60
support_bottom_distance = =support_z_distance / 2 support_bottom_distance = =support_z_distance / 2
support_pattern = zigzag
support_top_distance = =support_z_distance support_top_distance = =support_z_distance
support_use_towers = True
support_z_distance = =layer_height * 2 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 top_bottom_thickness = 1.2
wall_line_width_x = 0.23 wall_line_width_x = 0.23
wall_thickness = 1.3 wall_thickness = 1.3