Fix merge conflicts with master

This commit is contained in:
Lipu Fei 2019-09-24 14:26:43 +02:00
commit 94e89ad4ac
89 changed files with 1283 additions and 928 deletions

View file

@ -9,7 +9,7 @@ DEFAULT_CURA_DISPLAY_NAME = "Ultimaker Cura"
DEFAULT_CURA_VERSION = "master"
DEFAULT_CURA_BUILD_TYPE = ""
DEFAULT_CURA_DEBUG_MODE = False
DEFAULT_CURA_SDK_VERSION = "6.2.0"
DEFAULT_CURA_SDK_VERSION = "6.3.0"
try:
from cura.CuraVersion import CuraAppName # type: ignore
@ -45,4 +45,4 @@ except ImportError:
# Each release has a fixed SDK version coupled with it. It doesn't make sense to make it configurable because, for
# example Cura 3.2 with SDK version 6.1 will not work. So the SDK version is hard-coded here and left out of the
# CuraVersion.py.in template.
CuraSDKVersion = "6.2.0"
CuraSDKVersion = "6.3.0"

View file

@ -269,11 +269,12 @@ class BuildVolume(SceneNode):
continue
# Mark the node as outside build volume if the set extruder is disabled
extruder_position = node.callDecoration("getActiveExtruderPosition")
if extruder_position not in self._global_container_stack.extruders:
continue
if not self._global_container_stack.extruders[extruder_position].isEnabled:
try:
if not self._global_container_stack.extruderList[int(extruder_position)].isEnabled:
node.setOutsideBuildArea(True)
continue
except IndexError:
continue
node.setOutsideBuildArea(False)
@ -319,7 +320,7 @@ class BuildVolume(SceneNode):
# Mark the node as outside build volume if the set extruder is disabled
extruder_position = node.callDecoration("getActiveExtruderPosition")
if not self._global_container_stack.extruders[extruder_position].isEnabled:
if not self._global_container_stack.extruderList[int(extruder_position)].isEnabled:
node.setOutsideBuildArea(True)
return
@ -549,7 +550,7 @@ class BuildVolume(SceneNode):
return
old_raft_thickness = self._raft_thickness
if self._global_container_stack.extruders:
if self._global_container_stack.extruderList:
# This might be called before the extruder stacks have initialised, in which case getting the adhesion_type fails
self._adhesion_type = self._global_container_stack.getProperty("adhesion_type", "value")
self._raft_thickness = 0.0
@ -1098,7 +1099,7 @@ class BuildVolume(SceneNode):
# not part of the collision radius, such as bed adhesion (skirt/brim/raft)
# and travel avoid distance.
def getEdgeDisallowedSize(self):
if not self._global_container_stack or not self._global_container_stack.extruders:
if not self._global_container_stack or not self._global_container_stack.extruderList:
return 0
container_stack = self._global_container_stack

View file

@ -673,14 +673,14 @@ class CuraApplication(QtApplication):
def discardOrKeepProfileChangesClosed(self, option: str) -> None:
global_stack = self.getGlobalContainerStack()
if option == "discard":
for extruder in global_stack.extruders.values():
for extruder in global_stack.extruderList:
extruder.userChanges.clear()
global_stack.userChanges.clear()
# if the user decided to keep settings then the user settings should be re-calculated and validated for errors
# before slicing. To ensure that slicer uses right settings values
elif option == "keep":
for extruder in global_stack.extruders.values():
for extruder in global_stack.extruderList:
extruder.userChanges.update()
global_stack.userChanges.update()
@ -1688,7 +1688,7 @@ class CuraApplication(QtApplication):
arranger = Arrange.create(x = machine_width, y = machine_depth, fixed_nodes = fixed_nodes)
min_offset = 8
default_extruder_position = self.getMachineManager().defaultExtruderPosition
default_extruder_id = self._global_container_stack.extruders[default_extruder_position].getId()
default_extruder_id = self._global_container_stack.extruderList[int(default_extruder_position)].getId()
select_models_on_load = self.getPreferences().getValue("cura/select_models_on_load")

View file

@ -67,7 +67,7 @@ class MachineErrorChecker(QObject):
self._global_stack.propertyChanged.disconnect(self.startErrorCheckPropertyChanged)
self._global_stack.containersChanged.disconnect(self.startErrorCheck)
for extruder in self._global_stack.extruders.values():
for extruder in self._global_stack.extruderList:
extruder.propertyChanged.disconnect(self.startErrorCheckPropertyChanged)
extruder.containersChanged.disconnect(self.startErrorCheck)
@ -77,7 +77,7 @@ class MachineErrorChecker(QObject):
self._global_stack.propertyChanged.connect(self.startErrorCheckPropertyChanged)
self._global_stack.containersChanged.connect(self.startErrorCheck)
for extruder in self._global_stack.extruders.values():
for extruder in self._global_stack.extruderList:
extruder.propertyChanged.connect(self.startErrorCheckPropertyChanged)
extruder.containersChanged.connect(self.startErrorCheck)
@ -127,7 +127,7 @@ class MachineErrorChecker(QObject):
# Populate the (stack, key) tuples to check
self._stacks_and_keys_to_check = deque()
for stack in global_stack.extruders.values():
for stack in global_stack.extruderList:
for key in stack.getAllKeys():
self._stacks_and_keys_to_check.append((stack, key))

View file

@ -72,7 +72,12 @@ class BaseMaterialsModel(ListModel):
if self._extruder_stack is not None:
self._extruder_stack.pyqtContainersChanged.disconnect(self._update)
self._extruder_stack.approximateMaterialDiameterChanged.disconnect(self._update)
self._extruder_stack = global_stack.extruders.get(str(self._extruder_position))
try:
self._extruder_stack = global_stack.extruderList[self._extruder_position]
except IndexError:
self._extruder_stack = None
if self._extruder_stack is not None:
self._extruder_stack.pyqtContainersChanged.connect(self._update)
self._extruder_stack.approximateMaterialDiameterChanged.connect(self._update)

View file

@ -50,7 +50,7 @@ class UserChangesModel(ListModel):
return
stacks = [global_stack]
stacks.extend(global_stack.extruders.values())
stacks.extend(global_stack.extruderList)
# Check if the definition container has a translation file and ensure it's loaded.
definition = global_stack.getBottom()

View file

@ -199,8 +199,6 @@ class AuthorizationService:
self._unable_to_get_data_message.hide()
self._unable_to_get_data_message = Message(i18n_catalog.i18nc("@info", "Unable to reach the Ultimaker account server."), title = i18n_catalog.i18nc("@info:title", "Warning"))
self._unable_to_get_data_message.addAction("retry", i18n_catalog.i18nc("@action:button", "Retry"), "[no_icon]", "[no_description]")
self._unable_to_get_data_message.actionTriggered.connect(self._onMessageActionTriggered)
self._unable_to_get_data_message.show()
except ValueError:
Logger.logException("w", "Could not load auth data from preferences")
@ -222,6 +220,3 @@ class AuthorizationService:
self.accessTokenChanged.emit()
def _onMessageActionTriggered(self, _, action):
if action == "retry":
self.loadAuthDataFromPreferences()

View file

@ -40,8 +40,8 @@ class CuraFormulaFunctions:
global_stack = machine_manager.activeMachine
try:
extruder_stack = global_stack.extruders[str(extruder_position)]
except KeyError:
extruder_stack = global_stack.extruderList[int(extruder_position)]
except IndexError:
if extruder_position != 0:
Logger.log("w", "Value for %s of extruder %s was requested, but that extruder is not available. Returning the result form extruder 0 instead" % (property_key, extruder_position))
# This fixes a very specific fringe case; If a profile was created for a custom printer and one of the
@ -104,8 +104,11 @@ class CuraFormulaFunctions:
machine_manager = self._application.getMachineManager()
global_stack = machine_manager.activeMachine
extruder_stack = global_stack.extruders[str(extruder_position)]
try:
extruder_stack = global_stack.extruderList[extruder_position]
except IndexError:
Logger.log("w", "Unable to find extruder on in index %s", extruder_position)
else:
context = self.createContextForDefaultValueEvaluation(extruder_stack)
return self.getValueInExtruder(extruder_position, property_key, context = context)

View file

@ -74,7 +74,7 @@ class ExtruderManager(QObject):
global_container_stack = self._application.getGlobalContainerStack()
if global_container_stack:
extruder_stack_ids = {position: extruder.id for position, extruder in global_container_stack.extruders.items()}
extruder_stack_ids = {extruder.getMetaDataEntry("position", ""): extruder.id for extruder in global_container_stack.extruderList}
return extruder_stack_ids
@ -360,10 +360,14 @@ class ExtruderManager(QObject):
def fixSingleExtrusionMachineExtruderDefinition(self, global_stack: "GlobalStack") -> None:
container_registry = ContainerRegistry.getInstance()
expected_extruder_definition_0_id = global_stack.getMetaDataEntry("machine_extruder_trains")["0"]
extruder_stack_0 = global_stack.extruders.get("0")
try:
extruder_stack_0 = global_stack.extruderList[0]
except IndexError:
extruder_stack_0 = None
# At this point, extruder stacks for this machine may not have been loaded yet. In this case, need to look in
# the container registry as well.
if not global_stack.extruders:
if not global_stack.extruderList:
extruder_trains = container_registry.findContainerStacks(type = "extruder_train",
machine = global_stack.getId())
if extruder_trains:

View file

@ -135,12 +135,15 @@ class ExtruderStack(CuraContainerStack):
if limit_to_extruder == -1:
limit_to_extruder = int(cura.CuraApplication.CuraApplication.getInstance().getMachineManager().defaultExtruderPosition)
limit_to_extruder = str(limit_to_extruder)
if (limit_to_extruder is not None and limit_to_extruder != "-1") and self.getMetaDataEntry("position") != str(limit_to_extruder):
if str(limit_to_extruder) in self.getNextStack().extruders:
result = self.getNextStack().extruders[str(limit_to_extruder)].getProperty(key, property_name, context)
try:
result = self.getNextStack().extruderList[int(limit_to_extruder)].getProperty(key, property_name, context)
if result is not None:
context.popContainer()
return result
except IndexError:
pass
result = super().getProperty(key, property_name, context)
context.popContainer()

View file

@ -174,7 +174,7 @@ class MachineManager(QObject):
# Create the configuration model with the current data in Cura
self._current_printer_configuration.printerType = self._global_container_stack.definition.getName()
self._current_printer_configuration.extruderConfigurations = []
for extruder in self._global_container_stack.extruders.values():
for extruder in self._global_container_stack.extruderList:
extruder_configuration = ExtruderConfigurationModel()
# For compare just the GUID is needed at this moment
mat_type = extruder.material.getMetaDataEntry("material") if extruder.material != empty_material_container else None
@ -191,7 +191,8 @@ class MachineManager(QObject):
# An empty build plate configuration from the network printer is presented as an empty string, so use "" for an
# empty build plate.
self._current_printer_configuration.buildplateConfiguration = self._global_container_stack.getProperty("machine_buildplate_type", "value") if self._global_container_stack.variant != empty_variant_container else ""
self._current_printer_configuration.buildplateConfiguration = self._global_container_stack.getProperty("machine_buildplate_type", "value")\
if self._global_container_stack.variant != empty_variant_container else self._global_container_stack.getProperty("machine_buildplate_type", "default_value")
self.currentConfigurationChanged.emit()
@pyqtSlot(QObject, result = bool)
@ -635,7 +636,7 @@ class MachineManager(QObject):
def isCurrentSetupSupported(self) -> bool:
if not self._global_container_stack:
return False
for stack in [self._global_container_stack] + list(self._global_container_stack.extruders.values()):
for stack in [self._global_container_stack] + self._global_container_stack.extruderList:
for container in stack.getContainers():
if not container:
return False
@ -661,8 +662,8 @@ class MachineManager(QObject):
def copyAllValuesToExtruders(self) -> None:
if self._active_container_stack is None or self._global_container_stack is None:
return
extruder_stacks = list(self._global_container_stack.extruders.values())
for extruder_stack in extruder_stacks:
for extruder_stack in self._global_container_stack.extruderList:
if extruder_stack != self._active_container_stack:
for key in self._active_container_stack.userChanges.getAllKeys():
new_value = self._active_container_stack.getProperty(key, "value")
@ -793,8 +794,7 @@ class MachineManager(QObject):
return True
buildplate_compatible = True # It is compatible by default
extruder_stacks = self._global_container_stack.extruders.values()
for stack in extruder_stacks:
for stack in self._global_container_stack.extruderList:
if not stack.isEnabled:
continue
material_container = stack.material
@ -817,8 +817,8 @@ class MachineManager(QObject):
# (material_left_compatible or material_left_usable) and
# (material_right_compatible or material_right_usable)
result = not self.variantBuildplateCompatible
extruder_stacks = self._global_container_stack.extruders.values()
for stack in extruder_stacks:
for stack in self._global_container_stack.extruderList:
material_container = stack.material
if material_container == empty_material_container:
continue
@ -854,7 +854,7 @@ class MachineManager(QObject):
old_value = old_value(self._global_container_stack)
if int(old_value) < 0:
continue
if int(old_value) >= extruder_count or not self._global_container_stack.extruders[str(old_value)].isEnabled:
if int(old_value) >= extruder_count or not self._global_container_stack.extruderList[int(old_value)].isEnabled:
result.append(setting_key)
Logger.log("d", "Reset setting [%s] in [%s] because its old value [%s] is no longer valid", setting_key, container, old_value)
return result
@ -943,18 +943,21 @@ class MachineManager(QObject):
@deprecated("use Cura.MachineManager.activeMachine.extruders instead", "4.2")
def _getExtruder(self, position) -> Optional[ExtruderStack]:
if self._global_container_stack:
return self._global_container_stack.extruders.get(str(position))
try:
return self._global_container_stack.extruderList[int(position)]
except IndexError:
return None
return None
def updateDefaultExtruder(self) -> None:
if self._global_container_stack is None:
return
extruder_items = sorted(self._global_container_stack.extruders.items())
old_position = self._default_extruder_position
new_default_position = "0"
for position, extruder in extruder_items:
for extruder in self._global_container_stack.extruderList:
if extruder.isEnabled:
new_default_position = position
new_default_position = extruder.getMetaDataEntry("position", "0")
break
if new_default_position != old_position:
self._default_extruder_position = new_default_position
@ -966,7 +969,7 @@ class MachineManager(QObject):
definition_changes_container = self._global_container_stack.definitionChanges
machine_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value")
extruder_count = 0
for position, extruder in self._global_container_stack.extruders.items():
for position, extruder in enumerate(self._global_container_stack.extruderList):
if extruder.isEnabled and int(position) < machine_extruder_count:
extruder_count += 1
if self.numberExtrudersEnabled != extruder_count:
@ -990,7 +993,7 @@ class MachineManager(QObject):
return
with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
property_names = ["value", "resolve", "validationState"]
for container in [self._global_container_stack] + list(self._global_container_stack.extruders.values()):
for container in [self._global_container_stack] + self._global_container_stack.extruderList:
for setting_key in container.getAllKeys():
container.propertiesChanged.emit(setting_key, property_names)
@ -1041,7 +1044,7 @@ class MachineManager(QObject):
def setSettingForAllExtruders(self, setting_name: str, property_name: str, property_value: str) -> None:
if self._global_container_stack is None:
return
for key, extruder in self._global_container_stack.extruders.items():
for extruder in self._global_container_stack.extruderList:
container = extruder.userChanges
container.setProperty(setting_name, property_name, property_value)
@ -1051,7 +1054,7 @@ class MachineManager(QObject):
def resetSettingForAllExtruders(self, setting_name: str) -> None:
if self._global_container_stack is None:
return
for key, extruder in self._global_container_stack.extruders.items():
for extruder in self._global_container_stack.extruderList:
container = extruder.userChanges
container.removeInstance(setting_name)
@ -1069,8 +1072,9 @@ class MachineManager(QObject):
changed = False
if self._global_container_stack:
for position in self._global_container_stack.extruders:
material_id = self._global_container_stack.extruders[position].material.getMetaDataEntry("base_file")
for extruder in self._global_container_stack.extruderList:
material_id = extruder.material.getMetaDataEntry("base_file")
position = extruder.getMetaDataEntry("position")
if position not in self._current_root_material_id or material_id != self._current_root_material_id[position]:
changed = True
self._current_root_material_id[position] = material_id
@ -1105,7 +1109,7 @@ class MachineManager(QObject):
return
self._global_container_stack.quality = empty_quality_container
self._global_container_stack.qualityChanges = empty_quality_changes_container
for extruder in self._global_container_stack.extruders.values():
for extruder in self._global_container_stack.extruderList:
extruder.quality = empty_quality_container
extruder.qualityChanges = empty_quality_changes_container
@ -1221,7 +1225,7 @@ class MachineManager(QObject):
self._global_container_stack.extruders[position].material = material_container
root_material_id = material_container.getMetaDataEntry("base_file", None)
else:
self._global_container_stack.extruders[position].material = empty_material_container
self._global_container_stack.extruderList[int(position)].material = empty_material_container
root_material_id = None
# The _current_root_material_id is used in the MaterialMenu to see which material is selected
if root_material_id != self._current_root_material_id[position]:
@ -1232,7 +1236,7 @@ class MachineManager(QObject):
# Check material - variant compatibility
if self._global_container_stack is not None:
if Util.parseBool(self._global_container_stack.getMetaDataEntry("has_materials", False)):
for position, extruder in self._global_container_stack.extruders.items():
for extruder in self._global_container_stack.extruderList:
if not extruder.isEnabled:
continue
if not extruder.material.getMetaDataEntry("compatible"):
@ -1311,7 +1315,10 @@ class MachineManager(QObject):
position_list = [position]
for position_item in position_list:
extruder = self._global_container_stack.extruders[position_item]
try:
extruder = self._global_container_stack.extruderList[int(position_item)]
except IndexError:
continue
current_material_base_name = extruder.material.getMetaDataEntry("base_file")
current_nozzle_name = None
@ -1389,7 +1396,7 @@ class MachineManager(QObject):
extruders_to_disable.add(extruder_configuration.position)
# If there's no material and/or nozzle on the printer, enable the first extruder and disable the rest.
if len(extruders_to_disable) == len(self._global_container_stack.extruders):
if len(extruders_to_disable) == len(self._global_container_stack.extruderList):
extruders_to_disable.remove(min(extruders_to_disable))
for extruder_configuration in configuration.extruderConfigurations:
@ -1397,7 +1404,7 @@ class MachineManager(QObject):
# If the machine doesn't have a hotend or material, disable this extruder
if int(position) in extruders_to_disable:
self._global_container_stack.extruders[position].setEnabled(False)
self._global_container_stack.extruderList[int(position)].setEnabled(False)
need_to_show_message = True
disabled_used_extruder_position_set.add(int(position))
@ -1430,7 +1437,7 @@ class MachineManager(QObject):
# Show human-readable extruder names such as "Extruder Left", "Extruder Front" instead of "Extruder 1, 2, 3".
extruder_names = []
for extruder_position in sorted(disabled_used_extruder_position_set):
extruder_stack = self._global_container_stack.extruders[str(extruder_position)]
extruder_stack = self._global_container_stack.extruderList[int(extruder_position)]
extruder_name = extruder_stack.definition.getName()
extruder_names.append(extruder_name)
extruders_str = ", ".join(extruder_names)
@ -1458,7 +1465,7 @@ class MachineManager(QObject):
machine_definition_id = self._global_container_stack.definition.id
position = str(position)
extruder_stack = self._global_container_stack.extruders[position]
extruder_stack = self._global_container_stack.extruderList[int(position)]
nozzle_name = extruder_stack.variant.getName()
material_node = ContainerTree.getInstance().machines[machine_definition_id].variants[nozzle_name].materials[root_material_id]
self.setMaterial(position, material_node)

View file

@ -39,8 +39,8 @@ class SimpleModeSettingsManager(QObject):
user_setting_keys.update(global_stack.userChanges.getAllKeys())
# check user settings in the extruder stacks
if global_stack.extruders:
for extruder_stack in global_stack.extruders.values():
if global_stack.extruderList:
for extruder_stack in global_stack.extruderList:
user_setting_keys.update(extruder_stack.userChanges.getAllKeys())
# remove settings that are visible in recommended (we don't show the reset button for those)

View file

@ -85,8 +85,10 @@ class Snapshot:
preview_pass.setCamera(camera)
preview_pass.render()
pixel_output = preview_pass.getOutput()
try:
min_x, max_x, min_y, max_y = Snapshot.getImageBoundaries(pixel_output)
except ValueError:
return None
size = max((max_x - min_x) / render_width, (max_y - min_y) / render_height)
if size > 0.5 or satisfied:

View file

@ -197,11 +197,7 @@ class PrintInformation(QObject):
material_preference_values = json.loads(self._application.getInstance().getPreferences().getValue("cura/material_settings"))
extruder_stacks = global_stack.extruders
for position in extruder_stacks:
extruder_stack = extruder_stacks[position]
index = int(position)
for index, extruder_stack in enumerate(global_stack.extruderList):
if index >= len(self._material_amounts):
continue
amount = self._material_amounts[index]

View file

@ -55,8 +55,8 @@ UM.Dialog
// See http://stackoverflow.com/questions/7659442/listelement-fields-as-properties
Component.onCompleted:
{
append({"key": "override", "label": catalog.i18nc("@action:ComboBox option", "Update existing")});
append({"key": "new", "label": catalog.i18nc("@action:ComboBox option", "Create new")});
append({"key": "override", "label": catalog.i18nc("@action:ComboBox Update/override existing profile", "Update existing")});
append({"key": "new", "label": catalog.i18nc("@action:ComboBox Save settings in a new profile", "Create new")});
}
}

View file

@ -834,9 +834,8 @@ class CuraEngineBackend(QObject, Backend):
if self._global_container_stack:
self._global_container_stack.propertyChanged.disconnect(self._onSettingChanged)
self._global_container_stack.containersChanged.disconnect(self._onChanged)
extruders = list(self._global_container_stack.extruders.values())
for extruder in extruders:
for extruder in self._global_container_stack.extruderList:
extruder.propertyChanged.disconnect(self._onSettingChanged)
extruder.containersChanged.disconnect(self._onChanged)
@ -845,8 +844,8 @@ class CuraEngineBackend(QObject, Backend):
if self._global_container_stack:
self._global_container_stack.propertyChanged.connect(self._onSettingChanged) # Note: Only starts slicing when the value changed.
self._global_container_stack.containersChanged.connect(self._onChanged)
extruders = list(self._global_container_stack.extruders.values())
for extruder in extruders:
for extruder in self._global_container_stack.extruderList:
extruder.propertyChanged.connect(self._onSettingChanged)
extruder.containersChanged.connect(self._onChanged)
self._onChanged()

View file

@ -3,6 +3,7 @@
import QtQuick 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
import UM 1.3 as UM
import Cura 1.1 as Cura
@ -16,10 +17,6 @@ Item
id: base
UM.I18nCatalog { id: catalog; name: "cura" }
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
property int columnWidth: ((parent.width - 2 * UM.Theme.getSize("default_margin").width) / 2) | 0
property int columnSpacing: 3 * screenScaleFactor
property int propertyStoreIndex: manager ? manager.storeContainerIndex : 1 // definition_changes
@ -32,24 +29,25 @@ Item
property var forceUpdateFunction: manager.forceUpdate
Item
RowLayout
{
id: upperBlock
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: UM.Theme.getSize("default_margin").width
height: childrenRect.height
anchors
{
top: parent.top
left: parent.left
right: parent.right
margins: UM.Theme.getSize("default_margin").width
}
spacing: UM.Theme.getSize("default_margin").width
// =======================================
// Left-side column for "Printer Settings"
// =======================================
Column
{
anchors.top: parent.top
anchors.left: parent.left
width: base.columnWidth
Layout.fillWidth: true
Layout.alignment: Qt.AlignTop
spacing: base.columnSpacing
@ -177,9 +175,8 @@ Item
// =======================================
Column
{
anchors.top: parent.top
anchors.right: parent.right
width: base.columnWidth
Layout.fillWidth: true
Layout.alignment: Qt.AlignTop
spacing: base.columnSpacing
@ -208,6 +205,7 @@ Item
axisName: "x"
axisMinOrMax: "min"
allowNegativeValue: true
allowPositiveValue: false
forceUpdateOnChangeFunction: forceUpdateFunction
}
@ -227,6 +225,7 @@ Item
axisName: "y"
axisMinOrMax: "min"
allowNegativeValue: true
allowPositiveValue: false
forceUpdateOnChangeFunction: forceUpdateFunction
}
@ -245,7 +244,8 @@ Item
axisName: "x"
axisMinOrMax: "max"
allowNegativeValue: true
allowNegativeValue: false
allowPositiveValue: true
forceUpdateOnChangeFunction: forceUpdateFunction
}
@ -266,7 +266,8 @@ Item
axisName: "y"
axisMinOrMax: "max"
allowNegativeValue: true
allowNegativeValue: false
allowPositiveValue: true
forceUpdateOnChangeFunction: forceUpdateFunction
}
@ -333,22 +334,23 @@ Item
}
}
Item // Start and End G-code
RowLayout // Start and End G-code
{
id: lowerBlock
anchors.top: upperBlock.bottom
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: UM.Theme.getSize("default_margin").width
spacing: UM.Theme.getSize("default_margin").width
anchors
{
top: upperBlock.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
margins: UM.Theme.getSize("default_margin").width
}
Cura.GcodeTextArea // "Start G-code"
{
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.bottomMargin: UM.Theme.getSize("default_margin").height
anchors.left: parent.left
width: base.columnWidth - UM.Theme.getSize("default_margin").width
Layout.fillWidth: true
Layout.fillHeight: true
labelText: catalog.i18nc("@title:label", "Start G-code")
containerStackId: machineStackId
@ -358,11 +360,8 @@ Item
Cura.GcodeTextArea // "End G-code"
{
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.bottomMargin: UM.Theme.getSize("default_margin").height
anchors.right: parent.right
width: base.columnWidth - UM.Theme.getSize("default_margin").width
Layout.fillWidth: true
Layout.fillHeight: true
labelText: catalog.i18nc("@title:label", "End G-code")
containerStackId: machineStackId

View file

@ -76,7 +76,9 @@ class ModelChecker(QObject, Extension):
# This function can be triggered in the middle of a machine change, so do not proceed if the machine change
# has not done yet.
if str(node_extruder_position) not in global_container_stack.extruders:
try:
extruder = global_container_stack.extruderList[int(node_extruder_position)]
except IndexError:
Application.getInstance().callLater(lambda: self.onChanged.emit())
return False
@ -131,9 +133,9 @@ class ModelChecker(QObject, Extension):
material_shrinkage = {}
# Get all shrinkage values of materials used
for extruder_position, extruder in global_container_stack.extruders.items():
for extruder_position, extruder in enumerate(global_container_stack.extruderList):
shrinkage = extruder.material.getProperty("material_shrinkage_percentage", "value")
if shrinkage is None:
shrinkage = 0
material_shrinkage[extruder_position] = shrinkage
material_shrinkage[str(extruder_position)] = shrinkage
return material_shrinkage

View file

@ -12,7 +12,7 @@ def getMetaData():
return {
"stage": {
"name": i18n_catalog.i18nc("@item:inmenu", "Monitor"),
"weight": 2
"weight": 30
}
}

View file

@ -4,22 +4,68 @@
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import QtQuick.Window 2.2
import UM 1.2 as UM
import Cura 1.0 as Cura
import ".."
Item {
id: base;
UM.I18nCatalog { id: catalog; name: "cura"; }
width: childrenRect.width;
height: childrenRect.height;
property var all_categories_except_support: [ "machine_settings", "resolution", "shell", "infill", "material", "speed",
Item
{
id: base
width: childrenRect.width
height: childrenRect.height
property var allCategoriesExceptSupport: [ "machine_settings", "resolution", "shell", "infill", "material", "speed",
"travel", "cooling", "platform_adhesion", "dual", "meshfix", "blackmagic", "experimental"]
readonly property string normalMeshType: ""
readonly property string supportMeshType: "support_mesh"
readonly property string cuttingMeshType: "cutting_mesh"
readonly property string infillMeshType: "infill_mesh"
readonly property string antiOverhangMeshType: "anti_overhang_mesh"
property var currentMeshType: UM.ActiveTool.properties.getValue("MeshType")
// Update the view every time the currentMeshType changes
onCurrentMeshTypeChanged:
{
var type = currentMeshType
// set checked state of mesh type buttons
normalButton.checked = type === normalMeshType
supportMeshButton.checked = type === supportMeshType
overhangMeshButton.checked = type === infillMeshType || type === cuttingMeshType
antiOverhangMeshButton.checked = type === antiOverhangMeshType
// update active type label
for (var button in meshTypeButtons.children)
{
if (meshTypeButtons.children[button].checked){
meshTypeLabel.text = catalog.i18nc("@label", "Mesh Type") + ": " + meshTypeButtons.children[button].text
break
}
}
}
function setOverhangsMeshType()
{
if (infillOnlyCheckbox.checked)
{
setMeshType(infillMeshType)
}
else
{
setMeshType(cuttingMeshType)
}
}
function setMeshType(type)
{
UM.ActiveTool.setProperty("MeshType", type)
}
UM.I18nCatalog { id: catalog; name: "uranium"}
Column
{
id: items
@ -28,123 +74,97 @@ Item {
spacing: UM.Theme.getSize("default_margin").height
Row
Row // Mesh type buttons
{
id: meshTypeButtons
spacing: UM.Theme.getSize("default_margin").width
Button
{
id: normalButton
text: catalog.i18nc("@label", "Normal model")
iconSource: UM.Theme.getIcon("pos_normal");
property bool needBorder: true
checkable: true
onClicked: setMeshType(normalMeshType);
style: UM.Theme.styles.tool_button;
z: 4
}
Button
{
id: supportMeshButton
text: catalog.i18nc("@label", "Print as support")
iconSource: UM.Theme.getIcon("pos_print_as_support");
property bool needBorder: true
checkable:true
onClicked: setMeshType(supportMeshType)
style: UM.Theme.styles.tool_button;
z: 3
}
Button
{
id: overhangMeshButton
text: catalog.i18nc("@label", "Modify settings for overlaps")
iconSource: UM.Theme.getIcon("pos_modify_overlaps");
property bool needBorder: true
checkable:true
onClicked: setMeshType(infillMeshType)
style: UM.Theme.styles.tool_button;
z: 2
}
Button
{
id: antiOverhangMeshButton
text: catalog.i18nc("@label", "Don't support overlaps")
iconSource: UM.Theme.getIcon("pos_modify_dont_support_overlap");
property bool needBorder: true
checkable: true
onClicked: setMeshType(antiOverhangMeshType)
style: UM.Theme.styles.tool_button;
z: 1
}
}
Label
{
text: catalog.i18nc("@label","Mesh Type")
id: meshTypeLabel
font: UM.Theme.getFont("default")
color: UM.Theme.getColor("text")
height: UM.Theme.getSize("setting").height
verticalAlignment: Text.AlignVCenter
}
UM.SettingPropertyProvider
CheckBox
{
id: meshTypePropertyProvider
containerStack: Cura.MachineManager.activeMachine
watchedProperties: [ "enabled" ]
}
id: infillOnlyCheckbox
ComboBox
{
id: meshTypeSelection
style: UM.Theme.styles.combobox
onActivated: {
UM.ActiveTool.setProperty("MeshType", model.get(index).type)
}
model: ListModel
{
id: meshTypeModel
Component.onCompleted: meshTypeSelection.populateModel()
}
text: catalog.i18nc("@action:checkbox", "Infill only");
function populateModel()
{
meshTypeModel.append({
type: "",
text: catalog.i18nc("@label", "Normal model")
});
meshTypePropertyProvider.key = "support_mesh";
if(meshTypePropertyProvider.properties.enabled == "True")
{
meshTypeModel.append({
type: "support_mesh",
text: catalog.i18nc("@label", "Print as support")
});
}
meshTypePropertyProvider.key = "anti_overhang_mesh";
if(meshTypePropertyProvider.properties.enabled == "True")
{
meshTypeModel.append({
type: "anti_overhang_mesh",
text: catalog.i18nc("@label", "Don't support overlap with other models")
});
}
meshTypePropertyProvider.key = "cutting_mesh";
if(meshTypePropertyProvider.properties.enabled == "True")
{
meshTypeModel.append({
type: "cutting_mesh",
text: catalog.i18nc("@label", "Modify settings for overlap with other models")
});
}
meshTypePropertyProvider.key = "infill_mesh";
if(meshTypePropertyProvider.properties.enabled == "True")
{
meshTypeModel.append({
type: "infill_mesh",
text: catalog.i18nc("@label", "Modify settings for infill of other models")
});
}
style: UM.Theme.styles.checkbox;
meshTypeSelection.updateCurrentIndex();
}
visible: currentMeshType === infillMeshType || currentMeshType === cuttingMeshType
onClicked: setOverhangsMeshType()
function updateCurrentIndex()
Binding
{
var mesh_type = UM.ActiveTool.properties.getValue("MeshType");
meshTypeSelection.currentIndex = -1;
for(var index=0; index < meshTypeSelection.model.count; index++)
{
if(meshTypeSelection.model.get(index).type == mesh_type)
{
meshTypeSelection.currentIndex = index;
return;
}
}
meshTypeSelection.currentIndex = 0;
target: infillOnlyCheckbox
property: "checked"
value: currentMeshType === infillMeshType
}
}
Connections
{
target: Cura.MachineManager
onGlobalContainerChanged:
{
meshTypeSelection.model.clear();
meshTypeSelection.populateModel();
}
}
Connections
{
target: UM.Selection
onSelectionChanged: meshTypeSelection.updateCurrentIndex()
}
}
Column
Column // Settings Dialog
{
// This is to ensure that the panel is first increasing in size up to 200 and then shows a scrollbar.
// It kinda looks ugly otherwise (big panel, no content on it)
id: currentSettings
property int maximumHeight: 200 * screenScaleFactor
height: Math.min(contents.count * (UM.Theme.getSize("section").height + UM.Theme.getSize("default_lining").height), maximumHeight)
visible: meshTypeSelection.model.get(meshTypeSelection.currentIndex).type != "anti_overhang_mesh"
visible: currentMeshType != "anti_overhang_mesh"
ScrollView
{
@ -159,26 +179,26 @@ Item {
model: UM.SettingDefinitionsModel
{
id: addedSettingsModel;
id: addedSettingsModel
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
expanded: [ "*" ]
filter:
{
if (printSequencePropertyProvider.properties.value == "one_at_a_time")
{
return {"settable_per_meshgroup": true};
return {"settable_per_meshgroup": true}
}
return {"settable_per_mesh": true};
return {"settable_per_mesh": true}
}
exclude:
{
var excluded_settings = [ "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ];
var excluded_settings = [ "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]
if(meshTypeSelection.model.get(meshTypeSelection.currentIndex).type == "support_mesh")
if (currentMeshType == "support_mesh")
{
excluded_settings = excluded_settings.concat(base.all_categories_except_support);
excluded_settings = excluded_settings.concat(base.allCategoriesExceptSupport)
}
return excluded_settings;
return excluded_settings
}
visibilityHandler: Cura.PerObjectSettingVisibilityHandler
@ -188,8 +208,9 @@ Item {
// For some reason the model object is updated after removing him from the memory and
// it happens only on Windows. For this reason, set the destroyed value manually.
Component.onDestruction: {
setDestroyed(true);
Component.onDestruction:
{
setDestroyed(true)
}
}
@ -213,7 +234,8 @@ Item {
//causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely.
asynchronous: model.type != "enum" && model.type != "extruder"
onLoaded: {
onLoaded:
{
settingLoader.item.showRevertButton = false
settingLoader.item.showInheritButton = false
settingLoader.item.showLinkedSettingIcon = false
@ -299,7 +321,7 @@ Item {
target: inheritStackProvider
onPropertiesChanged:
{
provider.forcePropertiesChanged();
provider.forcePropertiesChanged()
}
}
@ -312,22 +334,22 @@ Item {
// so here we connect to the signal and update the those values.
if (typeof UM.ActiveTool.properties.getValue("SelectedObjectId") !== "undefined")
{
const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId");
const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId")
if (addedSettingsModel.visibilityHandler.selectedObjectId != selectedObjectId)
{
addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId;
addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId
}
}
if (typeof UM.ActiveTool.properties.getValue("ContainerID") !== "undefined")
{
const containerId = UM.ActiveTool.properties.getValue("ContainerID");
const containerId = UM.ActiveTool.properties.getValue("ContainerID")
if (provider.containerStackId != containerId)
{
provider.containerStackId = containerId;
provider.containerStackId = containerId
}
if (inheritStackProvider.containerStackId != containerId)
{
inheritStackProvider.containerStackId = containerId;
inheritStackProvider.containerStackId = containerId
}
}
}
@ -337,7 +359,7 @@ Item {
}
}
Button
Cura.SecondaryButton
{
id: customiseSettingsButton;
height: UM.Theme.getSize("setting_control").height;
@ -345,33 +367,12 @@ Item {
text: catalog.i18nc("@action:button", "Select settings");
style: ButtonStyle
{
background: Rectangle
{
width: control.width;
height: control.height;
border.width: UM.Theme.getSize("default_lining").width;
border.color: control.pressed ? UM.Theme.getColor("action_button_active_border") :
control.hovered ? UM.Theme.getColor("action_button_hovered_border") : UM.Theme.getColor("action_button_border")
color: control.pressed ? UM.Theme.getColor("action_button_active") :
control.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button")
}
label: Label
{
text: control.text;
color: UM.Theme.getColor("setting_control_text");
font: UM.Theme.getFont("default")
anchors.centerIn: parent
}
}
onClicked:
{
settingPickDialog.visible = true;
if (meshTypeSelection.model.get(meshTypeSelection.currentIndex).type == "support_mesh")
if (currentMeshType == "support_mesh")
{
settingPickDialog.additional_excluded_settings = base.all_categories_except_support;
settingPickDialog.additional_excluded_settings = base.allCategoriesExceptSupport;
}
else
{
@ -379,138 +380,12 @@ Item {
}
}
}
}
UM.Dialog {
SettingPickDialog
{
id: settingPickDialog
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
width: screenScaleFactor * 360
property var additional_excluded_settings
onVisibilityChanged:
{
// force updating the model to sync it with addedSettingsModel
if(visible)
{
// Set skip setting, it will prevent from resetting selected mesh_type
contents.model.visibilityHandler.addSkipResetSetting(meshTypeSelection.model.get(meshTypeSelection.currentIndex).type)
listview.model.forceUpdate()
updateFilter()
}
}
function updateFilter()
{
var new_filter = {};
new_filter["settable_per_mesh"] = true;
// Don't filter on "settable_per_meshgroup" any more when `printSequencePropertyProvider.properties.value`
// is set to "one_at_a_time", because the current backend architecture isn't ready for that.
if(filterInput.text != "")
{
new_filter["i18n_label"] = "*" + filterInput.text;
}
listview.model.filter = new_filter;
}
TextField {
id: filterInput
anchors {
top: parent.top
left: parent.left
right: toggleShowAll.left
rightMargin: UM.Theme.getSize("default_margin").width
}
placeholderText: catalog.i18nc("@label:textbox", "Filter...");
onTextChanged: settingPickDialog.updateFilter()
}
CheckBox
{
id: toggleShowAll
anchors {
top: parent.top
right: parent.right
}
text: catalog.i18nc("@label:checkbox", "Show all")
checked: listview.model.showAll
onClicked:
{
listview.model.showAll = checked;
}
}
ScrollView
{
id: scrollView
anchors
{
top: filterInput.bottom;
left: parent.left;
right: parent.right;
bottom: parent.bottom;
}
ListView
{
id:listview
model: UM.SettingDefinitionsModel
{
id: definitionsModel;
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
expanded: [ "*" ]
exclude:
{
var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ];
excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings);
return excluded_settings;
}
}
delegate:Loader
{
id: loader
width: parent.width
height: model.type != undefined ? UM.Theme.getSize("section").height : 0;
property var definition: model
property var settingDefinitionsModel: definitionsModel
asynchronous: true
source:
{
switch(model.type)
{
case "category":
return "PerObjectCategory.qml"
default:
return "PerObjectItem.qml"
}
}
}
Component.onCompleted: settingPickDialog.updateFilter()
}
}
rightButtons: [
Button {
text: catalog.i18nc("@action:button", "Close");
onClicked: {
settingPickDialog.visible = false;
}
}
]
}
UM.SettingPropertyProvider
@ -533,25 +408,25 @@ Item {
storeIndex: 0
}
SystemPalette { id: palette; }
SystemPalette { id: palette }
Component
{
id: settingTextField;
id: settingTextField
Cura.SettingTextField { }
}
Component
{
id: settingComboBox;
id: settingComboBox
Cura.SettingComboBox { }
}
Component
{
id: settingExtruder;
id: settingExtruder
Cura.SettingExtruder { }
}
@ -565,22 +440,23 @@ Item {
Component
{
id: settingCheckBox;
id: settingCheckBox
Cura.SettingCheckBox { }
}
Component
{
id: settingCategory;
id: settingCategory
Cura.SettingCategory { }
}
Component
{
id: settingUnknown;
id: settingUnknown
Cura.SettingUnknown { }
}
}

View file

@ -1,6 +1,6 @@
# Copyright (c) 2016 Ultimaker B.V.
# Uranium is released under the terms of the LGPLv3 or higher.
from UM.Logger import Logger
from UM.Tool import Tool
from UM.Scene.Selection import Selection
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
@ -20,15 +20,11 @@ class PerObjectSettingsTool(Tool):
self.setExposedProperties("SelectedObjectId", "ContainerID", "SelectedActiveExtruder", "MeshType")
self._advanced_mode = False
self._multi_extrusion = False
self._single_model_selected = False
Selection.selectionChanged.connect(self.propertyChanged)
Application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferenceChanged)
self._onPreferenceChanged("cura/active_mode")
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged)
self._onGlobalContainerChanged()
Selection.selectionChanged.connect(self._updateEnabled)
@ -70,8 +66,16 @@ class PerObjectSettingsTool(Tool):
selected_object.addDecorator(SettingOverrideDecorator())
selected_object.callDecoration("setActiveExtruder", extruder_stack_id)
def setMeshType(self, mesh_type):
## Returns True when the mesh_type was changed, False when current mesh_type == mesh_type
def setMeshType(self, mesh_type: str) -> bool:
if self.getMeshType() == mesh_type:
return False
selected_object = Selection.getSelectedObject(0)
if selected_object is None:
Logger.log("w", "Tried setting the mesh type of the selected object, but no object was selected")
return False
stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway.
if not stack:
selected_object.addDecorator(SettingOverrideDecorator())
@ -90,6 +94,9 @@ class PerObjectSettingsTool(Tool):
new_instance.resetState() # Ensure that the state is not seen as a user state.
settings.addInstance(new_instance)
self.propertyChanged.emit()
return True
def getMeshType(self):
selected_object = Selection.getSelectedObject(0)
stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway.
@ -103,11 +110,6 @@ class PerObjectSettingsTool(Tool):
return ""
def _onPreferenceChanged(self, preference):
if preference == "cura/active_mode":
self._advanced_mode = Application.getInstance().getPreferences().getValue(preference) == 1
self._updateEnabled()
def _onGlobalContainerChanged(self):
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack:
@ -140,4 +142,4 @@ class PerObjectSettingsTool(Tool):
self._single_model_selected = False # Group is selected, so tool needs to be disabled
else:
self._single_model_selected = True
Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, self._advanced_mode and self._single_model_selected)
Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, self._single_model_selected)

View file

@ -0,0 +1,139 @@
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import UM 1.2 as UM
import Cura 1.0 as Cura
import ".."
UM.Dialog
{
id: settingPickDialog
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
width: screenScaleFactor * 360
property var additional_excluded_settings
onVisibilityChanged:
{
// force updating the model to sync it with addedSettingsModel
if (visible)
{
// Set skip setting, it will prevent from resetting selected mesh_type
contents.model.visibilityHandler.addSkipResetSetting(currentMeshType)
listview.model.forceUpdate()
updateFilter()
}
}
function updateFilter()
{
var new_filter = {}
new_filter["settable_per_mesh"] = true
// Don't filter on "settable_per_meshgroup" any more when `printSequencePropertyProvider.properties.value`
// is set to "one_at_a_time", because the current backend architecture isn't ready for that.
if (filterInput.text != "")
{
new_filter["i18n_label"] = "*" + filterInput.text
}
listview.model.filter = new_filter
}
TextField {
id: filterInput
anchors {
top: parent.top
left: parent.left
right: toggleShowAll.left
rightMargin: UM.Theme.getSize("default_margin").width
}
placeholderText: catalog.i18nc("@label:textbox", "Filter...")
onTextChanged: settingPickDialog.updateFilter()
}
CheckBox
{
id: toggleShowAll
anchors {
top: parent.top
right: parent.right
}
text: catalog.i18nc("@label:checkbox", "Show all")
checked: listview.model.showAll
onClicked:
{
listview.model.showAll = checked
}
}
ScrollView
{
id: scrollView
anchors
{
top: filterInput.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
}
ListView
{
id:listview
model: UM.SettingDefinitionsModel
{
id: definitionsModel
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
expanded: [ "*" ]
exclude:
{
var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]
excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings)
return excluded_settings
}
}
delegate:Loader
{
id: loader
width: parent.width
height: model.type != undefined ? UM.Theme.getSize("section").height : 0
property var definition: model
property var settingDefinitionsModel: definitionsModel
asynchronous: true
source:
{
switch(model.type)
{
case "category":
return "PerObjectCategory.qml"
default:
return "PerObjectItem.qml"
}
}
}
Component.onCompleted: settingPickDialog.updateFilter()
}
}
rightButtons: [
Button {
text: catalog.i18nc("@action:button", "Close")
onClicked: {
settingPickDialog.visible = false
}
}
]
}

View file

@ -1,3 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30">
<path d="M30 20L25.1 6.7 27.6 0H12.9l1.6 5H6.4l2.3 6H2.4l2.4 6.2L0 30h19.5l-1.7-4H26l-2.3-6H30zm-12.5 5l-2.8-7.5 2.4-6.5H9.6L7.7 6h14.7L20 12.4l2.9 7.6 2 5h-7.4z"/>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>per_model_settings</title>
<desc>Created with Sketch.</desc>
<defs>
<path d="M9.73076923,0 L9.226,1.345 L0.449,11 L0,11 L0.639,9.084 L8.896,0 L9.73076923,0 Z M8.49,3.472 L8.907,4.721 L3.199,11 L1.647,11 L8.49,3.472 Z M9.228,5.685 L9.645,6.935 L5.949,11 L4.397,11 L9.228,5.685 Z M9.966,7.899 L10.382,9.148 L8.699,11 L7.147,11 L9.966,7.899 Z M10.704,10.112 L11,11 L9.896,11 L10.704,10.112 Z M7.698,0 L1.332,7.004 L2.23,4.308 L6.146,0 L7.698,0 Z M4.948,0 L2.344,2.866 L1.89,1.656 L3.396,0 L4.948,0 Z M2.198,0 L1.54,0.724 L1.26923077,0 L2.198,0 Z" id="path-1"></path>
</defs>
<g id="per_model_settings" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Per-model" transform="translate(2.000000, 2.000000)">
<polygon id="Path-Copy-5" fill="#000" points="1.26923077 0 9.73076923 0 8.46153846 3.38461538 11 11 0 11 2.53846154 3.38461538"></polygon>
<polygon id="Path-Copy-8" fill="#000" points="14.2692308 13 22.7307692 13 21.4615385 16.3846154 24 24 13 24 15.5384615 16.3846154"></polygon>
<g id="stripe" transform="translate(13.000000, 0.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Combined-Shape" fill="#000" xlink:href="#path-1"></use>
</g>
<path d="M1.990731,13.5 L3.06878027,16.374798 L0.693712943,23.5 L10.3062871,23.5 L7.93121973,16.374798 L9.009269,13.5 L1.990731,13.5 Z" id="Path-Copy-7" stroke="#000"></path>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 240 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Before After
Before After

View file

@ -367,6 +367,8 @@ class ChangeAtZ(Script):
modified_gcode = ""
lines = active_layer.split("\n")
for line in lines:
if line.strip() == "":
continue
if ";Generated with Cura_SteamEngine" in line:
TWinstances += 1
modified_gcode += ";ChangeAtZ instances: %d\n" % TWinstances

View file

@ -10,7 +10,7 @@ def getMetaData():
return {
"stage": {
"name": i18n_catalog.i18nc("@item:inmenu", "Prepare"),
"weight": 0
"weight": 10
}
}

View file

@ -11,7 +11,7 @@ def getMetaData():
return {
"stage": {
"name": i18n_catalog.i18nc("@item:inmenu", "Preview"),
"weight": 1
"weight": 20
}
}

View file

@ -57,9 +57,12 @@ class SolidView(View):
# As the rendering is called a *lot* we really, dont want to re-evaluate the property every time. So we store em!
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack:
support_extruder_nr = global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr")
support_angle_stack = global_container_stack.extruders.get(str(support_extruder_nr))
if support_angle_stack:
support_extruder_nr = int(global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr"))
try:
support_angle_stack = global_container_stack.extruderList[support_extruder_nr]
except IndexError:
pass
else:
self._support_angle = support_angle_stack.getProperty("support_angle", "value")
def beginRendering(self):

View file

@ -1,11 +1,14 @@
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>support_blocker</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Cura-Icon" fill="#000000">
<path d="M19,27 L12,27 L3,27 L3,3 L12,3 L12,11 L19,11 L19,19 L27,19 L27,27 L19,27 Z M4,4 L4,26 L11,26 L11,4 L4,4 Z" id="Combined-Shape"></path>
<polygon id="Path" points="10 17.1441441 9.18918919 17.954955 7.52252252 16.3333333 5.85585586 18 5.04504505 17.1891892 6.66666667 15.4774775 5 13.8558559 5.81081081 13.045045 7.52252252 14.6666667 9.18918919 13 10 13.8108108 8.33333333 15.4774775"></polygon>
<g id="support_blocker" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Group-3" transform="translate(3.000000, 2.000000)">
<g id="Print-as-support-Copy" fill="#000">
<path d="M0.833,19.65 L0.833,22.342 L0,22.3428571 L0.833,19.65 Z M4.166,8.879 L4.166,22.342 L2.499,22.342 L2.499,14.266 L4.166,8.879 Z M7.5,0.8 L7.5,22.342 L5.833,22.342 L5.833,0.8 L7.5,0.8 Z M10.833,0.8 L10.833,22.342 L9.166,22.342 L9.166,0.8 L10.833,0.8 Z M14.166,0.8 L14.166,14 L12.499,14 L12.499,0.8 L14.166,0.8 Z M15.833,8.879 L17.418,14 L15.833,14 L15.833,8.879 Z M4.166,0.8 L4.166,6.139 L2.499,1.351 L2.499,0.8 L4.166,0.8 Z M17.5,0.8 L17.5,1.351 L15.833,6.139 L15.833,0.8 L17.5,0.8 Z" id="Combined-Shape"></path>
</g>
<path d="M12,14 L22,14 L22,24 L12,24 L12,14 Z" id="Rectangle" stroke="#000" stroke-dasharray="1,1"></path>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 866 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

@ -128,7 +128,7 @@ Item
TableViewColumn
{
role: "print_core"
title: catalog.i18nc("@label:table_header", "Print Core")
title: "Print Core" //This term should not be translated.
width: Math.floor(table.width * 0.2)
}
TableViewColumn

View file

@ -12,7 +12,7 @@ def getMetaData():
"mesh_reader": [
{
"extension": "ctm",
"description": i18n_catalog.i18nc("@item:inlistbox", "Open Compressed Triangle Mesh")
"description": i18n_catalog.i18nc("@item:inlistbox 'Open' is part of the name of this file format.", "Open Compressed Triangle Mesh")
},
{
"extension": "dae",

View file

@ -38,7 +38,11 @@ class UFPWriter(MeshWriter):
def _createSnapshot(self, *args):
# must be called from the main thread because of OpenGL
Logger.log("d", "Creating thumbnail image...")
try:
self._snapshot = Snapshot.snapshot(width = 300, height = 300)
except Exception:
Logger.logException("w", "Failed to create snapshot image")
self._snapshot = None # Failing to create thumbnail should not fail creation of UFP
# This needs to be called on the main thread (Qt thread) because the serialization of material containers can
# trigger loading other containers. Because those loaded containers are QtObjects, they must be created on the

View file

@ -28,7 +28,7 @@ class CloudFlowMessage(Message):
lifetime=0,
dismissable=True,
option_state=False,
image_source=image_path,
image_source=QUrl.fromLocalFile(image_path),
image_caption=I18N_CATALOG.i18nc("@info:status Ultimaker Cloud should not be translated.",
"Connect to Ultimaker Cloud"),
)

View file

@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from UM import i18nCatalog
from UM.Message import Message
from cura.CuraApplication import CuraApplication
I18N_CATALOG = i18nCatalog("cura")
@ -13,16 +13,25 @@ class CloudPrinterDetectedMessage(Message):
# Singleton used to prevent duplicate messages of this type at the same time.
__is_visible = False
# Store in preferences to hide this message in the future.
_preference_key = "cloud/block_new_printers_popup"
def __init__(self) -> None:
super().__init__(
title=I18N_CATALOG.i18nc("@info:title", "New cloud printers found"),
text=I18N_CATALOG.i18nc("@info:message", "New printers have been found connected to your account, "
"you can find them in your list of discovered printers."),
lifetime=10,
dismissable=True
lifetime=0,
dismissable=True,
option_state=False,
option_text=I18N_CATALOG.i18nc("@info:option_text", "Do not show this message again")
)
self.optionToggled.connect(self._onDontAskMeAgain)
CuraApplication.getInstance().getPreferences().addPreference(self._preference_key, False)
def show(self) -> None:
if CuraApplication.getInstance().getPreferences().getValue(self._preference_key):
return
if CloudPrinterDetectedMessage.__is_visible:
return
super().show()
@ -31,3 +40,6 @@ class CloudPrinterDetectedMessage(Message):
def hide(self, send_signal = True) -> None:
super().hide(send_signal)
CloudPrinterDetectedMessage.__is_visible = False
def _onDontAskMeAgain(self, checked: bool) -> None:
CuraApplication.getInstance().getPreferences().setValue(self._preference_key, checked)

View file

@ -12,6 +12,15 @@ _renamed_container_id_map = {
"ultimaker2_extended_0.4": "ultimaker2_extended_olsson_0.4",
"ultimaker2_extended_0.6": "ultimaker2_extended_olsson_0.6",
"ultimaker2_extended_0.8": "ultimaker2_extended_olsson_0.8",
# HMS434 "extra coarse", "super coarse", and "ultra coarse" are removed.
"hms434_global_Extra_Coarse_Quality": "hms434_global_Normal_Quality",
"hms434_global_Super_Coarse_Quality": "hms434_global_Normal_Quality",
"hms434_global_Ultra_Coarse_Quality": "hms434_global_Normal_Quality",
# HMS434 "0.25", "0.6", "1.2", and "1.5" nozzles are removed.
"hms434_0.25tpnozzle": "hms434_0.4tpnozzle",
"hms434_0.6tpnozzle": "hms434_0.4tpnozzle",
"hms434_1.2tpnozzle": "hms434_0.4tpnozzle",
"hms434_1.5tpnozzle": "hms434_0.4tpnozzle",
}
@ -62,7 +71,8 @@ class VersionUpgrade43to44(VersionUpgrade):
parser.read_string(serialized)
# Update version number.
if "metadata" in parser:
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "10"
if "containers" in parser:

View file

@ -59,4 +59,3 @@ def getMetaData() -> Dict[str, Any]:
def register(app: "Application") -> Dict[str, Any]:
return {"version_upgrade": upgrade}

View file

@ -475,6 +475,23 @@
}
}
},
"TrimeshReader": {
"package_info": {
"package_id": "TrimeshReader",
"package_type": "plugin",
"display_name": "Trimesh Reader",
"description": "Provides support for reading model files.",
"package_version": "1.0.0",
"sdk_version": "6.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
"display_name": "Ultimaker B.V.",
"email": "plugins@ultimaker.com",
"website": "https://ultimaker.com"
}
}
},
"Toolbox": {
"package_info": {
"package_id": "Toolbox",

View file

@ -1,5 +1,4 @@
{
"id": "Mark2_for_Ultimaker2",
"version": 2,
"name": "Mark2 for Ultimaker2",
"inherits": "ultimaker2_plus",

View file

@ -7565,7 +7565,7 @@
"small_feature_speed_factor":
{
"label": "Small Feature Speed",
"description": "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy.",
"description": "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy.",
"unit": "%",
"type": "float",
"default_value": 50,
@ -7577,7 +7577,7 @@
"small_feature_speed_factor_0":
{
"label": "First Layer Speed",
"description": "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy.",
"description": "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy.",
"unit": "%",
"type": "float",
"default_value": 50,

View file

@ -19,13 +19,13 @@
"default_value": true
},
"machine_width": {
"default_value": 240
"default_value": 260
},
"machine_height": {
"default_value": 285
},
"machine_depth": {
"default_value": 240
"default_value": 260
},
"machine_center_is_zero": {
"default_value": true

View file

@ -5,12 +5,29 @@
"metadata": {
"visible": true,
"author": "Scheepers",
"manufacturer": "MaukCC",
"manufacturer": "Hybrid AM Systems",
"file_formats": "text/x-gcode",
"has_materials": true,
"has_machine_materials": true,
"preferred_material": "generic_pla",
"exclude_materials": [ "chromatik_pla", "fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu", "fiberlogy_hd_pla", "filo3d_pla", "filo3d_pla_green", "filo3d_pla_red", "imade3d_petg_green", "imade3d_petg_pink", "imade3d_pla_green", "imade3d_pla_pink", "innofill_innoflex60_175", "octofiber_pla", "imade3d_pla", "polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla", "tizyx_abs", "tizyx_pla", "tizyx_pla_bois", "verbatim_bvoh_175", "Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_TPU", "zyyx_pro_flex", "zyyx_pro_pla", "generic_cpe_175", "generic_nylon_175", "dsm_arnitel2045_175", "dsm_novamid1070_175", "generic_tpu_175", "generic_pc_175" ],
"exclude_materials": [
"chromatik_pla",
"dsm_arnitel2045_175", "dsm_novamid1070_175",
"emotiontech_abs", "emotiontech_petg", "emotiontech_pla", "emotiontech_pva-m", "emotiontech_pva-oks", "emotiontech_pva-s", "emotiontech_tpu98a",
"fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu",
"fiberlogy_hd_pla",
"filo3d_pla", "filo3d_pla_green", "filo3d_pla_red",
"generic_abs_175", "generic_cpe_175", "generic_hips_175", "generic_nylon_175", "generic_pc_175", "generic_petg_175", "generic_pva_175", "generic_tpu_175",
"imade3d_generic_petg_175", "imade3d_generic_pla_175",
"innofill_innoflex60_175",
"octofiber_pla",
"polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla",
"verbatim_bvoh_175",
"Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_PLA_Glitter", "Vertex_Delta_PLA_Mat", "Vertex_Delta_PLA_Satin", "Vertex_Delta_PLA_Wood", "Vertex_Delta_TPU",
"tizyx_abs", "tizyx_flex", "tizyx_petg", "tizyx_pla", "tizyx_pla_bois", "tizyx_pva",
"zyyx_pro_flex", "zyyx_pro_pla"
],
"has_variants": true,
"variants_name": "Tool",
@ -41,16 +58,17 @@
"machine_extruder_count": {"default_value": 2 },
"material_diameter": {"default_value": 1.75 },
"machine_heated_bed": {"default_value": true },
"machine_heated_build_volume":{"default_value": true },
"machine_center_is_zero": {"default_value": false },
"gantry_height": {"value": "35" },
"machine_height": {"default_value": 400 },
"machine_depth": {"default_value": 325 },
"machine_width": {"default_value": 450 },
"machine_gcode_flavor": {"default_value": "RepRap (RepRap)" },
"material_print_temp_wait": {"default_value": true},
"material_bed_temp_wait": {"default_value": true },
"material_print_temp_wait": {"default_value": false },
"material_bed_temp_wait": {"default_value": false },
"machine_max_feedrate_z": {"default_value": 1200 },
"machine_start_gcode": {"default_value": "\n;Neither MaukCC nor any of MaukCC representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 X-44 Y-100 F9000;go to wipe point\nG1 Z0 F900\nG1 Z0.2 F900\nM117 HMS434 Printing ...\n\n" },
"machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 X-44 Y-100 F9000;go to wipe point\nG1 Z0 F900\nG1 Z0.2 F900\nM117 HMS434 Printing ...\n\n" },
"machine_end_gcode": {"default_value": "" },
"retraction_extra_prime_amount": {"minimum_value_warning": "-2.0" },
@ -71,10 +89,16 @@
"top_layers": {"value": "4" },
"bottom_layers": {"value": "(top_layers)" },
"wall_0_inset": {"value": "0" },
"outer_inset_first": {"value": true },
"alternate_extra_perimeter": {"value": false },
"filter_out_tiny_gaps": {"value": false },
"fill_outline_gaps": {"value": true },
"skin_outline_count": {"value": "0"},
"ironing_enabled": {"value": true },
"ironing_line_spacing": {"value": "line_width"},
"ironing_flow": {"value": "0"},
"ironing_inset": {"value": "line_width"},
"speed_ironing": {"value": "150"},
"infill_sparse_density": {"value": 30},
"infill_pattern": {"value": "'lines'"},
@ -103,7 +127,7 @@
"speed_wall_x": {"value": "speed_wall"},
"speed_layer_0": {"value": "(speed_print/5*4) if speed_print < 51 else speed_print"},
"speed_topbottom": {"value": "speed_layer_0"},
"speed_travel": {"value": "100"},
"speed_travel": {"value": "150"},
"speed_travel_layer_0": {"value": "speed_travel"},
"speed_support_interface": {"value": "speed_topbottom"},
"speed_slowdown_layers": {"value": 1},
@ -130,7 +154,7 @@
"support_interface_height": {"value": 0.5},
"support_interface_pattern": {"value": "'lines'"},
"adhesion_type": {"value": "'skirt'"},
"adhesion_type": {"value": "'none'"},
"skirt_gap": {"value": 1},
"skirt_brim_minimal_length": {"value": 50},

View file

@ -2178,7 +2178,7 @@ msgstr "プリンター %1 が割り当てられましたが、ジョブには
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99
msgctxt "@label"
msgid "Change material %1 from %2 to %3."
msgstr "材料 1 を 2 から %3 に変更します。"
msgstr "材料 %1 を %2 から %3 に変更します。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102
msgctxt "@label"
@ -2188,7 +2188,7 @@ msgstr "%3 を 材料 %1 にロードします(これは上書きできませ
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105
msgctxt "@label"
msgid "Change print core %1 from %2 to %3."
msgstr "プリントコア 1 を 2 から %3 に変更します。"
msgstr "プリントコア %1 を %2 から %3 に変更します。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108
msgctxt "@label"
@ -6078,7 +6078,7 @@ msgstr "Curaプロファイルリーダー"
#~ msgctxt "@label"
#~ msgid "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?"
#~ msgstr "互換性のない構成で印刷ジョブを開始すると3Dプリンターを損傷することがあります。構成と印刷 1 を上書きしますか?"
#~ msgstr "互換性のない構成で印刷ジョブを開始すると3Dプリンターを損傷することがあります。構成と印刷 %1 を上書きしますか?"
#~ msgctxt "@window:title"
#~ msgid "Override configuration configuration and start print"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 4.3\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
"POT-Creation-Date: 2019-09-10 16:55+0200\n"
"PO-Revision-Date: 2019-07-28 06:51-0300\n"
"PO-Revision-Date: 2019-09-17 06:50-0300\n"
"Last-Translator: Cláudio Sampaio <patola@makerlinux.com.br>\n"
"Language-Team: Cláudio Sampaio <patola@makerlinux.com.br>\n"
"Language: pt_BR\n"
@ -118,12 +118,12 @@ msgstr "Uma impressão USB está em progresso, fechar o Cura interromperá esta
#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127
msgctxt "@message"
msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed."
msgstr ""
msgstr "Uma impressão ainda está em progresso. O Cura não pode iniciar outra impressão via USB até que a impressão anterior tenha completado."
#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127
msgctxt "@message"
msgid "Print in Progress"
msgstr ""
msgstr "Impressão em Progresso"
#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
msgctxt "X3g Writer Plugin Description"
@ -294,28 +294,28 @@ msgstr "Conectado pela rede"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15
msgctxt "@info:status"
msgid "Please wait until the current job has been sent."
msgstr ""
msgstr "Por favor espere até que o trabalho atual tenha sido enviado."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16
msgctxt "@info:title"
msgid "Print error"
msgstr ""
msgstr "Erro de impressão"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
msgid "You are attempting to connect to {0} but it is not the host of a group. You can visit the web page to configure it as a group host."
msgstr ""
msgstr "Você está tentando conectar a {0} mas ele não é host de um grupo. Você pode visitar a página web para configurá-lo como host de grupo."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30
msgctxt "@info:title"
msgid "Not a group host"
msgstr ""
msgstr "Não é host de grupo"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35
msgctxt "@action"
msgid "Configure group"
msgstr ""
msgstr "Configurar grupo"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27
msgctxt "@info:status"
@ -325,7 +325,7 @@ msgstr "Envia e monitora trabalhos de impressão de qualquer lugar usando sua co
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33
msgctxt "@info:status Ultimaker Cloud should not be translated."
msgid "Connect to Ultimaker Cloud"
msgstr ""
msgstr "Conectar à Nuvem Ultimaker"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36
msgctxt "@action"
@ -340,7 +340,7 @@ msgstr "Enviando Trabalho de Impressão"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15
msgctxt "@info:status"
msgid "Uploading print job to printer."
msgstr ""
msgstr "Transferindo trabalho de impressão para a impressora."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15
msgctxt "@info:status"
@ -355,23 +355,23 @@ msgstr "Dados Enviados"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18
msgctxt "@info:status"
msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware."
msgstr ""
msgstr "Você está tentando conectar a uma impressora que não está rodando Ultimaker Connect. Por favor atualiza a impressora para o firmware mais recente."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21
msgctxt "@info:title"
msgid "Update your printer"
msgstr ""
msgstr "Atualize sua impressora"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24
#, python-brace-format
msgctxt "@info:status"
msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}."
msgstr ""
msgstr "O Cura detectou perfis de material que não estão instalados ainda na impressora host do grupo {0}."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26
msgctxt "@info:title"
msgid "Sending materials to printer"
msgstr ""
msgstr "Enviando material para a impressora"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15
msgctxt "@info:text"
@ -381,7 +381,7 @@ msgstr "Não foi possível transferir os dados para a impressora."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16
msgctxt "@info:title"
msgid "Network error"
msgstr ""
msgstr "Erro de rede"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27
msgctxt "@info:status"
@ -503,32 +503,32 @@ msgstr "Imagem GIF"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "Open Compressed Triangle Mesh"
msgstr ""
msgstr "Malha Comprimida de Triângulos Aberta"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19
msgctxt "@item:inlistbox"
msgid "COLLADA Digital Asset Exchange"
msgstr ""
msgstr "Câmbio de Ativos Digitais COLLADA"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23
msgctxt "@item:inlistbox"
msgid "glTF Binary"
msgstr ""
msgstr "Binário glTF"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27
msgctxt "@item:inlistbox"
msgid "glTF Embedded JSON"
msgstr ""
msgstr "JSON Embutido glTF"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36
msgctxt "@item:inlistbox"
msgid "Stanford Triangle Format"
msgstr ""
msgstr "Formato de Triângulos de Stanford"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40
msgctxt "@item:inlistbox"
msgid "Compressed COLLADA Digital Asset Exchange"
msgstr ""
msgstr "Câmbio de Ativos Digitais COLLADA Comprimido"
#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331
msgctxt "@info:status"
@ -845,7 +845,7 @@ msgstr "Este perfil <filename>{0}</filename> contém dados incorretos, não foi
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag <filename>!"
msgid "Failed to import profile from <filename>{0}</filename>:"
msgstr ""
msgstr "Erro ao importar perfil de <filename>{0}</filename>:"
#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
#, python-brace-format
@ -1351,7 +1351,7 @@ msgstr "Mesa aquecida"
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
msgctxt "@label"
msgid "Heated build volume"
msgstr ""
msgstr "Volume de construção aquecido"
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
msgctxt "@label"
@ -1670,27 +1670,27 @@ msgstr "Compatibilidade"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124
msgctxt "@label:table_header"
msgid "Machine"
msgstr ""
msgstr "Máquina"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
msgctxt "@label:table_header"
msgid "Print Core"
msgstr ""
msgstr "Núcleo de Impressão"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
msgstr ""
msgstr "Plataforma de Impressão"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143
msgctxt "@label:table_header"
msgid "Support"
msgstr ""
msgstr "Suporte"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149
msgctxt "@label:table_header"
msgid "Quality"
msgstr ""
msgstr "Qualidade"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170
msgctxt "@action:label"
@ -1810,7 +1810,7 @@ msgstr "A atualização de firmware falhou devido a firmware não encontrado."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155
msgctxt "@label link to Connect and Cloud interfaces"
msgid "Manage printer"
msgstr ""
msgstr "Gerir Impressora"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183
@ -2007,7 +2007,7 @@ msgstr "Endereço da Impressora"
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr ""
msgstr "Entre o endereço IP da sua impressora na rede."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
@ -3134,7 +3134,7 @@ msgstr "A ampliação (zoom) deve se mover na direção do mouse?"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr ""
msgstr "Ampliar com o mouse não é suportado na perspectiva ortográfica."
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
msgctxt "@action:button"
@ -3197,7 +3197,7 @@ msgstr "Perspectiva"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
msgid "Orthographic"
msgstr ""
msgstr "Ortográfica"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
msgctxt "@label"
@ -5086,12 +5086,12 @@ msgstr "Complemento de Dispositivo de Escrita Removível"
#: UM3NetworkPrinting/plugin.json
msgctxt "description"
msgid "Manages network connections to Ultimaker networked printers."
msgstr ""
msgstr "Administra conexões de rede a impressora Ultimaker conectadas."
#: UM3NetworkPrinting/plugin.json
msgctxt "name"
msgid "Ultimaker Network Connection"
msgstr ""
msgstr "Conexão de Rede Ultimaker"
#: MonitorStage/plugin.json
msgctxt "description"
@ -5326,12 +5326,12 @@ msgstr "Atualização de Versão de 2.2 para 2.4"
#: VersionUpgrade/VersionUpgrade42to43/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 4.2 to Cura 4.3."
msgstr ""
msgstr "Atualiza configurações do Cura 4.2 para o Cura 4.3."
#: VersionUpgrade/VersionUpgrade42to43/plugin.json
msgctxt "name"
msgid "Version Upgrade 4.2 to 4.3"
msgstr ""
msgstr "Atualização de Versão de 4.2 para 4.3"
#: ImageReader/plugin.json
msgctxt "description"
@ -5346,12 +5346,12 @@ msgstr "Leitor de Imagens"
#: TrimeshReader/plugin.json
msgctxt "description"
msgid "Provides support for reading model files."
msgstr ""
msgstr "Provê suporta a ler arquivos de modelo."
#: TrimeshReader/plugin.json
msgctxt "name"
msgid "Trimesh Reader"
msgstr ""
msgstr "Leitor Trimesh"
#: CuraEngineBackend/plugin.json
msgctxt "description"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 4.3\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
"POT-Creation-Date: 2019-09-10 16:55+0000\n"
"PO-Revision-Date: 2019-07-28 07:41-0300\n"
"PO-Revision-Date: 2019-09-22 21:19-0300\n"
"Last-Translator: Cláudio Sampaio <patola@makerlinux.com.br>\n"
"Language-Team: Cláudio Sampaio <patola@makerlinux.com.br>\n"
"Language: pt_BR\n"
@ -219,12 +219,12 @@ msgstr "Indica se a plataforma de impressão pode ser aquecida."
#: fdmprinter.def.json
msgctxt "machine_heated_build_volume label"
msgid "Has Build Volume Temperature Stabilization"
msgstr ""
msgstr "Tem Estabilização de Temperatura do Volume de Impressão"
#: fdmprinter.def.json
msgctxt "machine_heated_build_volume description"
msgid "Whether the machine is able to stabilize the build volume temperature."
msgstr ""
msgstr "Indica se a máquina consegue estabilizar a temperatura do volume de construção."
#: fdmprinter.def.json
msgctxt "machine_center_is_zero label"
@ -1284,52 +1284,52 @@ msgstr "Canto Mais Agudo"
#: fdmprinter.def.json
msgctxt "z_seam_position label"
msgid "Z Seam Position"
msgstr ""
msgstr "Posição da Costura Z"
#: fdmprinter.def.json
msgctxt "z_seam_position description"
msgid "The position near where to start printing each part in a layer."
msgstr ""
msgstr "A posição perto da qual se inicia a impressão de cada parte em uma camada."
#: fdmprinter.def.json
msgctxt "z_seam_position option backleft"
msgid "Back Left"
msgstr ""
msgstr "Atrás à Esquerda"
#: fdmprinter.def.json
msgctxt "z_seam_position option back"
msgid "Back"
msgstr ""
msgstr "Atrás"
#: fdmprinter.def.json
msgctxt "z_seam_position option backright"
msgid "Back Right"
msgstr ""
msgstr "Atrás à Direita"
#: fdmprinter.def.json
msgctxt "z_seam_position option right"
msgid "Right"
msgstr ""
msgstr "Direita"
#: fdmprinter.def.json
msgctxt "z_seam_position option frontright"
msgid "Front Right"
msgstr ""
msgstr "Frente à Direita"
#: fdmprinter.def.json
msgctxt "z_seam_position option front"
msgid "Front"
msgstr ""
msgstr "Frente"
#: fdmprinter.def.json
msgctxt "z_seam_position option frontleft"
msgid "Front Left"
msgstr ""
msgstr "Frente à Esquerda"
#: fdmprinter.def.json
msgctxt "z_seam_position option left"
msgid "Left"
msgstr ""
msgstr "Esquerda"
#: fdmprinter.def.json
msgctxt "z_seam_x label"
@ -1424,7 +1424,7 @@ msgstr "Habilitar Passar a Ferro"
#: fdmprinter.def.json
msgctxt "ironing_enabled description"
msgid "Go over the top surface one additional time, but this time extruding very little material. This is meant to melt the plastic on top further, creating a smoother surface. The pressure in the nozzle chamber is kept high so that the creases in the surface are filled with material."
msgstr ""
msgstr "Passa sobre a superfície superior uma vez a mais, mas extrudando muito pouco material. Isto serve para derreter mais o plástico em cima, criando uma superfície lisa. A pressão na câmara do bico é mantida alta tal que as rugas na superfície são preenchidas com material."
#: fdmprinter.def.json
msgctxt "ironing_only_highest_layer label"
@ -1704,12 +1704,12 @@ msgstr "O padrão de preenchimento é movido por esta distância no eixo Y."
#: fdmprinter.def.json
msgctxt "infill_randomize_start_location label"
msgid "Randomize Infill Start"
msgstr ""
msgstr "Aleatorizar o Começo do Preenchimento"
#: fdmprinter.def.json
msgctxt "infill_randomize_start_location description"
msgid "Randomize which infill line is printed first. This prevents one segment becoming the strongest, but it does so at the cost of an additional travel move."
msgstr ""
msgstr "Aleatoriza qual linha do preenchimento é impressa primeiro. Isto evita que um segmento seja mais forte que os outros, mas ao custo de um percurso adicional."
#: fdmprinter.def.json
msgctxt "infill_multiplier label"
@ -2273,7 +2273,7 @@ msgstr "Fluxo da Torre de Purga"
#: fdmprinter.def.json
msgctxt "prime_tower_flow description"
msgid "Flow compensation on prime tower lines."
msgstr ""
msgstr "Compensação de fluxo em filetes de torre de purga."
#: fdmprinter.def.json
msgctxt "material_flow_layer_0 label"
@ -3568,7 +3568,7 @@ msgstr "Direção de Filete do Preenchimento de Suporte"
#: fdmprinter.def.json
msgctxt "support_infill_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees."
msgstr ""
msgstr "Uma lista de direções inteiras de filete. Elementos da lista são usados sequencialmente à medida que as camadas progridem e quando o fim da lista é alcançado, ela recomeça do início. Os itens da lista são separados por vírgulas e a lista inteira é contida em colchetes. O default é uma lista vazia, o que significa usar o ângulo default de 0 graus."
#: fdmprinter.def.json
msgctxt "support_brim_enable label"
@ -4038,32 +4038,32 @@ msgstr "Quantidade de deslocamento aplicado às bases do suporte."
#: fdmprinter.def.json
msgctxt "support_interface_angles label"
msgid "Support Interface Line Directions"
msgstr ""
msgstr "Direções do Filete de Interface de Suporte"
#: fdmprinter.def.json
msgctxt "support_interface_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
msgstr ""
msgstr "Uma lista de direções inteiras de filete. Elementos da lista são usados sequencialmente à medida que as camadas progridem e quando o fim da lista é alcançado, ela recomeça do início. Os itens da lista são separados por vírgulas e a lista inteira é contida em colchetes. O default é uma lista vazia, o que significa usar os ângulos default (alternando entre 45 e 135 graus se as interfaces forem grossas, ou 90 se não)."
#: fdmprinter.def.json
msgctxt "support_roof_angles label"
msgid "Support Roof Line Directions"
msgstr ""
msgstr "Direções de Filete do Teto do Suporte"
#: fdmprinter.def.json
msgctxt "support_roof_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
msgstr ""
msgstr "Uma lista de direções inteiras de filete. Elementos da lista são usados sequencialmente à medida que as camadas progridem e quando o fim da lista é alcançado, ela recomeça do início. Os itens da lista são separados por vírgulas e a lista inteira é contida em colchetes. O default é uma lista vazia, o que significa usar os ângulos default (alternando entre 45 e 135 graus se as interfaces forem grossas, ou 90 se não)."
#: fdmprinter.def.json
msgctxt "support_bottom_angles label"
msgid "Support Floor Line Directions"
msgstr ""
msgstr "Direções de Filete da Base do Suporte"
#: fdmprinter.def.json
msgctxt "support_bottom_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
msgstr ""
msgstr "Uma lista de direções inteiras de filete. Elementos da lista são usados sequencialmente à medida que as camadas progridem e quando o fim da lista é alcançado, ela recomeça do início. Os itens da lista são separados por vírgulas e a lista inteira é contida em colchetes. O default é uma lista vazia, o que significa usar os ângulos default (alternando entre 45 e 135 graus se as interfaces forem grossas, ou 90 se não)."
#: fdmprinter.def.json
msgctxt "support_fan_enable label"
@ -4183,7 +4183,7 @@ msgstr "Tipo de Aderência da Mesa de Impressão"
#: fdmprinter.def.json
msgctxt "adhesion_type description"
msgid "Different options that help to improve both priming your extrusion and adhesion to the build plate. Brim adds a single layer flat area around the base of your model to prevent warping. Raft adds a thick grid with a roof below the model. Skirt is a line printed around the model, but not connected to the model."
msgstr "Diferentes opções que ajudam a melhorar a extrusão e a aderência à plataforma de construção. Brim (bainha) adiciona uma camada única e chata em volta da base de seu modelo para impedir warping. Raft (balsa) adiciona uma grade densa com 'teto' abaixo do modelo. Skirt (saia) é uma linha impressa em volta do modelo, mas não conectada ao modelo, para apenas iniciar o processo de extrusão."
msgstr "Diferentes opções que ajudam a melhorar a extrusão e a aderência à plataforma de impressão. Brim (bainha) adiciona uma camada única e chata em volta da base de seu modelo para impedir warping. Raft (balsa) adiciona uma grade densa com 'teto' abaixo do modelo. Skirt (saia) é uma linha impressa em volta do modelo, mas não conectada ao modelo, para apenas iniciar o processo de extrusão."
#: fdmprinter.def.json
msgctxt "adhesion_type option skirt"
@ -5192,7 +5192,7 @@ msgstr "Desvio Máximo"
#: fdmprinter.def.json
msgctxt "meshfix_maximum_deviation description"
msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
msgstr ""
msgstr "O desvio máximo permitido ao reduzir a resolução para o ajuste de Máxima Resolução. Se você aumentar isto, a impressão será menos precisa, mas o G-Code será menor. O Desvio Máximo é um limite para Resolução Máxima, portanto se os dois conflitarem o Desvio Máximo sempre será o valor dominante."
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
@ -6196,42 +6196,42 @@ msgstr "A distância com que mover a cabeça pra frente e pra trás durante a va
#: fdmprinter.def.json
msgctxt "small_hole_max_size label"
msgid "Small Hole Max Size"
msgstr ""
msgstr "Tamanho Máximo de Furos Pequenos"
#: fdmprinter.def.json
msgctxt "small_hole_max_size description"
msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed."
msgstr ""
msgstr "Furos e contornos de partes com diâmetro menor que este serão impressos usando a Velocidade de Aspecto Pequeno."
#: fdmprinter.def.json
msgctxt "small_feature_max_length label"
msgid "Small Feature Max Length"
msgstr ""
msgstr "Comprimento Máximo do Aspecto Pequeno"
#: fdmprinter.def.json
msgctxt "small_feature_max_length description"
msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed."
msgstr ""
msgstr "Contornos de aspectos menores que este comprimento serão impressos usando a Velocidade de Aspecto Pequeno."
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor label"
msgid "Small Feature Speed"
msgstr ""
msgstr "Velocidade de Aspecto Pequeno"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
msgstr ""
msgstr "Pequenos aspectos serão impressos com esta porcentagem de sua velocidade normal de impressão. Impressão mais lenta pode ajudar com aderência e precisão."
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
msgid "First Layer Speed"
msgstr ""
msgstr "Velocidade da Primeira Camada"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
msgstr ""
msgstr "Aspectos pequenos na primeira camada serão impressos nesta porcentagem de sua velocidade normal de impressão. Impressão mais lenta pode ajudar com aderência e precisão."
#: fdmprinter.def.json
msgctxt "command_line_settings label"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 4.3\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
"POT-Creation-Date: 2019-09-10 16:55+0200\n"
"PO-Revision-Date: 2019-07-20 20:39+0800\n"
"PO-Revision-Date: 2019-09-19 23:41+0800\n"
"Last-Translator: Zhang Heh Ji <dinowchang@gmail.com>\n"
"Language-Team: Zhang Heh Ji <dinowchang@gmail.com>\n"
"Language: zh_TW\n"
@ -118,12 +118,12 @@ msgstr "USB 列印正在進行中,關閉 Cura 將停止此列印工作。你
#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127
msgctxt "@message"
msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed."
msgstr ""
msgstr "列印仍在進行中。列印完成前Cura 無法透過 USB 開始另一次列印。"
#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127
msgctxt "@message"
msgid "Print in Progress"
msgstr ""
msgstr "列印正在進行中"
#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
msgctxt "X3g Writer Plugin Description"
@ -294,28 +294,28 @@ msgstr "透過網路連接"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15
msgctxt "@info:status"
msgid "Please wait until the current job has been sent."
msgstr ""
msgstr "請等待目前作業傳送完成。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16
msgctxt "@info:title"
msgid "Print error"
msgstr ""
msgstr "列印錯誤"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:27
#, python-brace-format
msgctxt "@info:status"
msgid "You are attempting to connect to {0} but it is not the host of a group. You can visit the web page to configure it as a group host."
msgstr ""
msgstr "你正在嘗試連接到 {0},但它不是印表機群組的管理者。你可以透過網頁將其設定為印表機群組的管理者。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30
msgctxt "@info:title"
msgid "Not a group host"
msgstr ""
msgstr "不是印表機群組管理者"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35
msgctxt "@action"
msgid "Configure group"
msgstr ""
msgstr "設定印表機群組"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27
msgctxt "@info:status"
@ -325,7 +325,7 @@ msgstr "利用你的 Ultimaker 帳號在任何地方傳送和監控列印作業
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33
msgctxt "@info:status Ultimaker Cloud should not be translated."
msgid "Connect to Ultimaker Cloud"
msgstr ""
msgstr "連接到 Ultimaker Cloud"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36
msgctxt "@action"
@ -340,7 +340,7 @@ msgstr "正在傳送列印作業"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15
msgctxt "@info:status"
msgid "Uploading print job to printer."
msgstr ""
msgstr "正在上傳列印作業到印表機。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15
msgctxt "@info:status"
@ -355,23 +355,23 @@ msgstr "資料傳送"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18
msgctxt "@info:status"
msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware."
msgstr ""
msgstr "你正在嘗試連接到一台未安裝 Ultimaker Connect 的印表機。請將印表機更新至最新版本的韌體。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21
msgctxt "@info:title"
msgid "Update your printer"
msgstr ""
msgstr "更新你印表機"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24
#, python-brace-format
msgctxt "@info:status"
msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}."
msgstr ""
msgstr "Cura 偵測到群組 {0} 的管理主機上未安裝的耗材參數。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26
msgctxt "@info:title"
msgid "Sending materials to printer"
msgstr ""
msgstr "向印表機傳送耗材參數中"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15
msgctxt "@info:text"
@ -381,7 +381,7 @@ msgstr "雲端服務未上傳資料到印表機。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16
msgctxt "@info:title"
msgid "Network error"
msgstr ""
msgstr "網路錯誤"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27
msgctxt "@info:status"
@ -504,32 +504,32 @@ msgstr "GIF 圖片"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15
msgctxt "@item:inlistbox"
msgid "Open Compressed Triangle Mesh"
msgstr ""
msgstr "Open Compressed Triangle Mesh"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19
msgctxt "@item:inlistbox"
msgid "COLLADA Digital Asset Exchange"
msgstr ""
msgstr "COLLADA Digital Asset Exchange"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23
msgctxt "@item:inlistbox"
msgid "glTF Binary"
msgstr ""
msgstr "glTF Binary"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27
msgctxt "@item:inlistbox"
msgid "glTF Embedded JSON"
msgstr ""
msgstr "glTF Embedded JSON"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36
msgctxt "@item:inlistbox"
msgid "Stanford Triangle Format"
msgstr ""
msgstr "Stanford Triangle Format"
#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40
msgctxt "@item:inlistbox"
msgid "Compressed COLLADA Digital Asset Exchange"
msgstr ""
msgstr "Compressed COLLADA Digital Asset Exchange"
#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331
msgctxt "@info:status"
@ -846,7 +846,7 @@ msgstr "列印參數 <filename>{0}</filename> 含有不正確的資料,無法
#, python-brace-format
msgctxt "@info:status Don't translate the XML tag <filename>!"
msgid "Failed to import profile from <filename>{0}</filename>:"
msgstr ""
msgstr "從 <filename>{0}</filename> 匯入列印參數失敗:"
#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320
#, python-brace-format
@ -1352,7 +1352,7 @@ msgstr "熱床"
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151
msgctxt "@label"
msgid "Heated build volume"
msgstr ""
msgstr "熱箱"
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163
msgctxt "@label"
@ -1671,27 +1671,27 @@ msgstr "相容性"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124
msgctxt "@label:table_header"
msgid "Machine"
msgstr ""
msgstr "機器"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131
msgctxt "@label:table_header"
msgid "Print Core"
msgstr ""
msgstr "Print Core"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137
msgctxt "@label:table_header"
msgid "Build Plate"
msgstr ""
msgstr "列印平台"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143
msgctxt "@label:table_header"
msgid "Support"
msgstr ""
msgstr "支撐"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149
msgctxt "@label:table_header"
msgid "Quality"
msgstr ""
msgstr "品質"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170
msgctxt "@action:label"
@ -1811,7 +1811,7 @@ msgstr "由於韌體遺失,導致韌體更新失敗。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155
msgctxt "@label link to Connect and Cloud interfaces"
msgid "Manage printer"
msgstr ""
msgstr "管理印表機"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183
@ -2008,7 +2008,7 @@ msgstr "印表機網路位址"
#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102
msgctxt "@label"
msgid "Enter the IP address of your printer on the network."
msgstr ""
msgstr "輸入印表機的 IP 位址。"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138
@ -3132,7 +3132,7 @@ msgstr "是否跟隨滑鼠方向進行縮放?"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371
msgctxt "@info:tooltip"
msgid "Zooming towards the mouse is not supported in the orthographic perspective."
msgstr ""
msgstr "正交透視不支援游標縮放功能。"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376
msgctxt "@action:button"
@ -3195,7 +3195,7 @@ msgstr "透視"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484
msgid "Orthographic"
msgstr ""
msgstr "正交"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515
msgctxt "@label"
@ -3993,7 +3993,7 @@ msgstr "在此耗材組合下,使用膠水以獲得較佳的附著。"
#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml:128
msgctxt "@label"
msgid "This configuration is not available because %1 is not recognized. Please visit %2 to download the correct material profile."
msgstr "由於無法識別 1因此無法使用此設定。 請連上 2 下載正確的耗材參數設定。"
msgstr "由於無法識別 %1因此無法使用此設定。 請連上 %2 下載正確的耗材參數設定。"
#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml:129
msgctxt "@label"
@ -5078,12 +5078,12 @@ msgstr "行動裝置輸出設備外掛"
#: UM3NetworkPrinting/plugin.json
msgctxt "description"
msgid "Manages network connections to Ultimaker networked printers."
msgstr ""
msgstr "管理與 Ultimaker 網絡印表機的網絡連線。"
#: UM3NetworkPrinting/plugin.json
msgctxt "name"
msgid "Ultimaker Network Connection"
msgstr ""
msgstr "Ultimaker 網絡連線"
#: MonitorStage/plugin.json
msgctxt "description"
@ -5318,12 +5318,12 @@ msgstr "升級版本 2.2 到 2.4"
#: VersionUpgrade/VersionUpgrade42to43/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 4.2 to Cura 4.3."
msgstr ""
msgstr "將設定從 Cura 4.2 版本升級至 4.3 版本。"
#: VersionUpgrade/VersionUpgrade42to43/plugin.json
msgctxt "name"
msgid "Version Upgrade 4.2 to 4.3"
msgstr ""
msgstr "升級版本 4.2 到 4.3"
#: ImageReader/plugin.json
msgctxt "description"
@ -5338,12 +5338,12 @@ msgstr "圖片讀取器"
#: TrimeshReader/plugin.json
msgctxt "description"
msgid "Provides support for reading model files."
msgstr ""
msgstr "提供讀取模型檔案的支援。"
#: TrimeshReader/plugin.json
msgctxt "name"
msgid "Trimesh Reader"
msgstr ""
msgstr "Trimesh 讀取器"
#: CuraEngineBackend/plugin.json
msgctxt "description"
@ -6465,7 +6465,7 @@ msgstr "Cura 列印參數讀取器"
#~ msgctxt "@label"
#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers."
#~ msgstr "這台印表機是 1 台 Ultimaker 3 印表機群組的主機。"
#~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機。"
#~ msgctxt "@label: arg 1 is group name"
#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers"
@ -7464,7 +7464,7 @@ msgstr "Cura 列印參數讀取器"
#~ msgctxt "@label"
#~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers"
#~ msgstr "這台印表機是 1 台 Ultimaker 3 印表機群組的主機"
#~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機"
#~ msgctxt "@label"
#~ msgid "Completed on: "

View file

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: Cura 4.3\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
"POT-Creation-Date: 2019-09-10 16:55+0000\n"
"PO-Revision-Date: 2019-07-23 21:08+0800\n"
"PO-Revision-Date: 2019-09-23 11:59+0200\n"
"Last-Translator: Zhang Heh Ji <dinowchang@gmail.com>\n"
"Language-Team: Zhang Heh Ji <dinowchang@gmail.com>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.3\n"
"X-Generator: Poedit 2.2.1\n"
#: fdmprinter.def.json
msgctxt "machine_settings label"
@ -218,12 +218,12 @@ msgstr "機器是否有熱床。"
#: fdmprinter.def.json
msgctxt "machine_heated_build_volume label"
msgid "Has Build Volume Temperature Stabilization"
msgstr ""
msgstr "具有列印空間溫度穩定性"
#: fdmprinter.def.json
msgctxt "machine_heated_build_volume description"
msgid "Whether the machine is able to stabilize the build volume temperature."
msgstr ""
msgstr "機器是否能夠穩定列印空間溫度。"
#: fdmprinter.def.json
msgctxt "machine_center_is_zero label"
@ -1283,52 +1283,52 @@ msgstr "最尖銳的轉角"
#: fdmprinter.def.json
msgctxt "z_seam_position label"
msgid "Z Seam Position"
msgstr ""
msgstr "Z 接縫位置"
#: fdmprinter.def.json
msgctxt "z_seam_position description"
msgid "The position near where to start printing each part in a layer."
msgstr ""
msgstr "每一層開始列印位置要靠近哪個方向。"
#: fdmprinter.def.json
msgctxt "z_seam_position option backleft"
msgid "Back Left"
msgstr ""
msgstr "左後方"
#: fdmprinter.def.json
msgctxt "z_seam_position option back"
msgid "Back"
msgstr ""
msgstr "後方"
#: fdmprinter.def.json
msgctxt "z_seam_position option backright"
msgid "Back Right"
msgstr ""
msgstr "右後方"
#: fdmprinter.def.json
msgctxt "z_seam_position option right"
msgid "Right"
msgstr ""
msgstr "右方"
#: fdmprinter.def.json
msgctxt "z_seam_position option frontright"
msgid "Front Right"
msgstr ""
msgstr "右前方"
#: fdmprinter.def.json
msgctxt "z_seam_position option front"
msgid "Front"
msgstr ""
msgstr "前方"
#: fdmprinter.def.json
msgctxt "z_seam_position option frontleft"
msgid "Front Left"
msgstr ""
msgstr "左前方"
#: fdmprinter.def.json
msgctxt "z_seam_position option left"
msgid "Left"
msgstr ""
msgstr "左方"
#: fdmprinter.def.json
msgctxt "z_seam_x label"
@ -1423,7 +1423,7 @@ msgstr "啟用燙平"
#: fdmprinter.def.json
msgctxt "ironing_enabled description"
msgid "Go over the top surface one additional time, but this time extruding very little material. This is meant to melt the plastic on top further, creating a smoother surface. The pressure in the nozzle chamber is kept high so that the creases in the surface are filled with material."
msgstr ""
msgstr "噴頭額外跑過上表層一次,但這次擠出的材料非常少。這是為了進一步融化頂部的塑料,創造更平滑的表面。噴頭中的壓力會保持很高,將表面中的細縫中填滿材料。"
#: fdmprinter.def.json
msgctxt "ironing_only_highest_layer label"
@ -1703,12 +1703,12 @@ msgstr "填充樣式在 Y 軸方向平移此距離。"
#: fdmprinter.def.json
msgctxt "infill_randomize_start_location label"
msgid "Randomize Infill Start"
msgstr ""
msgstr "隨機填充起始位置"
#: fdmprinter.def.json
msgctxt "infill_randomize_start_location description"
msgid "Randomize which infill line is printed first. This prevents one segment becoming the strongest, but it does so at the cost of an additional travel move."
msgstr ""
msgstr "隨機選擇第一條填充線列印。 這可以防止強度集中在某一個部分,但會花費額外的空跑。"
#: fdmprinter.def.json
msgctxt "infill_multiplier label"
@ -2112,7 +2112,7 @@ msgstr "回抽切斷前速度"
#: fdmprinter.def.json
msgctxt "material_break_preparation_speed description"
msgid "How fast the filament needs to be retracted just before breaking it off in a retraction."
msgstr "回抽切斷前,耗材回抽的速度"
msgstr "回抽切斷前,耗材回抽的速度"
#: fdmprinter.def.json
msgctxt "material_break_retracted_position label"
@ -3567,7 +3567,7 @@ msgstr "支撐填充線條方向"
#: fdmprinter.def.json
msgctxt "support_infill_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees."
msgstr ""
msgstr "要使用的線條方向清單。清單中的項目隨著列印層增加順序使用,當到達清單的末端時,會再從頭開始。清單項目以逗號分隔,整個清單以中括號括住。預設值為空的清單,表示使用預設角度 0 度。"
#: fdmprinter.def.json
msgctxt "support_brim_enable label"
@ -4037,32 +4037,32 @@ msgstr "套用到支撐底板多邊形的偏移量。"
#: fdmprinter.def.json
msgctxt "support_interface_angles label"
msgid "Support Interface Line Directions"
msgstr ""
msgstr "支撐介面線條方向"
#: fdmprinter.def.json
msgctxt "support_interface_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
msgstr ""
msgstr "要使用的線條方向清單。清單中的項目隨著列印層增加順序使用,當到達清單的末端時,會再從頭開始。清單項目以逗號分隔,整個清單以中括號括住。預設值為空的清單,表示使用預設角度(預設 90 度,若介面較厚則以 45 度和 135 度交替)。"
#: fdmprinter.def.json
msgctxt "support_roof_angles label"
msgid "Support Roof Line Directions"
msgstr ""
msgstr "支撐頂板線條方向"
#: fdmprinter.def.json
msgctxt "support_roof_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
msgstr ""
msgstr "要使用的線條方向清單。清單中的項目隨著列印層增加順序使用,當到達清單的末端時,會再從頭開始。清單項目以逗號分隔,整個清單以中括號括住。預設值為空的清單,表示使用預設角度(預設 90 度,若介面較厚則以 45 度和 135 度交替)。"
#: fdmprinter.def.json
msgctxt "support_bottom_angles label"
msgid "Support Floor Line Directions"
msgstr ""
msgstr "支撐底板線條方向"
#: fdmprinter.def.json
msgctxt "support_bottom_angles description"
msgid "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angles (alternates between 45 and 135 degrees if interfaces are quite thick or 90 degrees)."
msgstr ""
msgstr "要使用的線條方向清單。清單中的項目隨著列印層增加順序使用,當到達清單的末端時,會再從頭開始。清單項目以逗號分隔,整個清單以中括號括住。預設值為空的清單,表示使用預設角度(預設 90 度,若介面較厚則以 45 度和 135 度交替)。"
#: fdmprinter.def.json
msgctxt "support_fan_enable label"
@ -5191,7 +5191,7 @@ msgstr "最大偏差值"
#: fdmprinter.def.json
msgctxt "meshfix_maximum_deviation description"
msgid "The maximum deviation allowed when reducing the resolution for the Maximum Resolution setting. If you increase this, the print will be less accurate, but the g-code will be smaller. Maximum Deviation is a limit for Maximum Resolution, so if the two conflict the Maximum Deviation will always be held true."
msgstr ""
msgstr "降低「最高解析度」設定時允許的最大偏差範圍。假如你增加這個設定值,列印精度會降低,但 G-code 會較小。最大偏差是最高解析度的限制,所以當兩者衝突時,會以最大偏差成立為優先。"
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
@ -6195,42 +6195,42 @@ msgstr "將噴頭來回移動經過刷子的距離。"
#: fdmprinter.def.json
msgctxt "small_hole_max_size label"
msgid "Small Hole Max Size"
msgstr ""
msgstr "細部模式最大直徑"
#: fdmprinter.def.json
msgctxt "small_hole_max_size description"
msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed."
msgstr ""
msgstr "小於此直徑的孔洞和零件輪廓,使用細部模式速度列印。"
#: fdmprinter.def.json
msgctxt "small_feature_max_length label"
msgid "Small Feature Max Length"
msgstr ""
msgstr "細部模式最大長度"
#: fdmprinter.def.json
msgctxt "small_feature_max_length description"
msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed."
msgstr ""
msgstr "輪廓長度小於此值時,使用細部模式速度列印。"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor label"
msgid "Small Feature Speed"
msgstr ""
msgstr "細部模式速度"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor description"
msgid "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
msgstr ""
msgstr "細部模式將以正常列印速度的此百分比值列印。 較慢的列印有助於黏合和精度。"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 label"
msgid "First Layer Speed"
msgstr ""
msgstr "第一層速度"
#: fdmprinter.def.json
msgctxt "small_feature_speed_factor_0 description"
msgid "Small features on the first layer will be printed at this percentage of their normal print speed. Slower printing can help with adhestion and accuracy."
msgstr ""
msgstr "細部模式第一層將以正常列印速度的此百分比值列印。 較慢的列印有助於黏合和精度。"
#: fdmprinter.def.json
msgctxt "command_line_settings label"

View file

@ -447,7 +447,6 @@ UM.MainWindow
target: Cura.Actions.addProfile
onTriggered:
{
preferences.show();
preferences.setPage(4);
// Create a new profile after a very short delay so the preference page has time to initiate

View file

@ -35,6 +35,7 @@ UM.TooltipArea
property alias labelWidth: fieldLabel.width
property alias unitText: unitLabel.text
property alias textField: textFieldWithUnit
property alias valueText: textFieldWithUnit.text
property alias valueValidator: textFieldWithUnit.validator
property alias editingFinishedFunction: textFieldWithUnit.editingFinishedFunction
@ -43,6 +44,8 @@ UM.TooltipArea
// whether negative value is allowed. This affects the validation of the input field.
property bool allowNegativeValue: false
// whether positive value is allowed. This affects the validation of the input field.
property bool allowPositiveValue: true
// callback functions
property var afterOnEditingFinishedFunction: dummy_func
@ -65,7 +68,7 @@ UM.TooltipArea
anchors.left: parent.left
anchors.verticalCenter: textFieldWithUnit.verticalCenter
visible: text != ""
font: UM.Theme.getFont("medium")
font: UM.Theme.getFont("default")
color: UM.Theme.getColor("text")
renderType: Text.NativeRendering
}
@ -153,7 +156,13 @@ UM.TooltipArea
const value = propertyProvider.properties.value
return value ? value : ""
}
validator: RegExpValidator { regExp: allowNegativeValue ? /-?[0-9\.,]{0,6}/ : /[0-9\.,]{0,6}/ }
validator: DoubleValidator
{
bottom: allowNegativeValue ? Number.NEGATIVE_INFINITY : 0
top: allowPositiveValue ? Number.POSITIVE_INFINITY : 0
decimals: 6
notation: DoubleValidator.StandardNotation
}
onEditingFinished: editingFinishedFunction()

View file

@ -43,31 +43,48 @@ NumericTextFieldWithUnit
{
result = func(result, polygon[i][item])
}
result = Math.abs(result)
return result
}
valueValidator: RegExpValidator { regExp: /[0-9\.,]{0,6}/ }
valueValidator: DoubleValidator {
bottom: allowNegativeValue ? Number.NEGATIVE_INFINITY : 0
top: allowPositiveValue ? Number.POSITIVE_INFINITY : 0
decimals: 6
notation: DoubleValidator.StandardNotation
}
valueText: axisValue
Connections
{
target: textField
onActiveFocusChanged:
{
// When this text field loses focus and the entered text is not valid, make sure to recreate the binding to
// show the correct value.
if (!textField.activeFocus && !textField.acceptableInput)
{
valueText = axisValue
}
}
}
editingFinishedFunction: function()
{
var polygon = JSON.parse(propertyProvider.properties.value)
var newValue = parseFloat(valueText.replace(',', '.'))
if (axisName == "x") // x min/x max
{
var start_i1 = (axisMinOrMax == "min") ? 0 : 2
var factor = (axisMinOrMax == "min") ? -1 : 1
polygon[start_i1][0] = newValue * factor
polygon[start_i1 + 1][0] = newValue * factor
polygon[start_i1][0] = newValue
polygon[start_i1 + 1][0] = newValue
}
else // y min/y max
{
var start_i1 = (axisMinOrMax == "min") ? 1 : 0
var factor = (axisMinOrMax == "min") ? -1 : 1
polygon[start_i1][1] = newValue * factor
polygon[start_i1 + 2][1] = newValue * factor
polygon[start_i1][1] = newValue
polygon[start_i1 + 2][1] = newValue
}
var polygon_string = JSON.stringify(polygon)
if (polygon_string != propertyProvider.properties.value)
@ -75,5 +92,8 @@ NumericTextFieldWithUnit
propertyProvider.setPropertyValue("value", polygon_string)
forceUpdateOnChangeFunction()
}
// Recreate the binding to show the correct value.
valueText = axisValue
}
}

View file

@ -107,8 +107,9 @@ Item
Cura.PrinterTypeLabel
{
id: printerTypeLabel
text: Cura.MachineManager.getAbbreviatedMachineName(section)
text: section
anchors.verticalCenter: parent.verticalCenter //One default margin above and one below.
autoFit: true
}
}

View file

@ -51,5 +51,21 @@ Button
border.color: objectItemButton.checked ? UM.Theme.getColor("primary") : "transparent"
}
TextMetrics
{
id: buttonTextMetrics
text: buttonText.text
font: buttonText.font
elide: buttonText.elide
elideWidth: buttonText.width
}
Cura.ToolTip
{
id: tooltip
tooltipText: objectItemButton.text
visible: objectItemButton.hovered && buttonTextMetrics.elidedText != buttonText.text
}
onClicked: Cura.SceneController.changeSelection(index)
}

View file

@ -78,7 +78,7 @@ Item
id: contents
width: parent.width
visible: objectSelector.opened
height: visible ? scroll.height : 0
height: visible ? listView.height : 0
color: UM.Theme.getColor("main_background")
border.width: UM.Theme.getSize("default_lining").width
border.color: UM.Theme.getColor("lining")
@ -87,36 +87,26 @@ Item
anchors.bottom: parent.bottom
ScrollView
{
id: scroll
width: parent.width
clip: true
padding: UM.Theme.getSize("default_lining").width
contentItem: ListView
ListView
{
id: listView
clip: true
anchors
{
left: parent.left
right: parent.right
margins: UM.Theme.getSize("default_lining").width
}
ScrollBar.vertical: ScrollBar
{
hoverEnabled: true
}
// Can't use parent.width since the parent is the flickable component and not the ScrollView
width: scroll.width - scroll.leftPadding - scroll.rightPadding
property real maximumHeight: UM.Theme.getSize("objects_menu_size").height
// We use an extra property here, since we only want to to be informed about the content size changes.
onContentHeightChanged:
{
// It can sometimes happen that (due to animations / updates) the contentHeight is -1.
// This can cause a bunch of updates to trigger oneother, leading to a weird loop.
if(contentHeight >= 0)
{
scroll.height = Math.min(contentHeight, maximumHeight) + scroll.topPadding + scroll.bottomPadding
}
}
height: Math.min(contentHeight, maximumHeight)
Component.onCompleted:
{
scroll.height = Math.min(contentHeight, maximumHeight) + scroll.topPadding + scroll.bottomPadding
}
model: Cura.ObjectsModel {}
delegate: ObjectItemButton
@ -134,4 +124,3 @@ Item
}
}
}
}

View file

@ -72,6 +72,7 @@ Button
verticalCenter: parent.verticalCenter
}
spacing: UM.Theme.getSize("narrow_margin").width
visible: (updatePrinterTypesOnlyWhenChecked && machineSelectorButton.checked) || !updatePrinterTypesOnlyWhenChecked
Repeater
{

View file

@ -65,7 +65,7 @@ Item
anchors.right: clearFilterButton.left
anchors.rightMargin: Math.round(UM.Theme.getSize("thick_margin").width)
placeholderText: "<img align='middle' src='"+ UM.Theme.getIcon("search") +"'>" + "<div vertical-align=bottom>" + catalog.i18nc("@label:textbox", "search settings")
placeholderText: "<img align='middle' src='"+ UM.Theme.getIcon("search") +"'>" + "<div vertical-align=bottom>" + catalog.i18nc("@label:textbox", "Search settings")
style: TextFieldStyle
{

View file

@ -7,9 +7,9 @@ definition = hms434
setting_version = 10
type = quality
quality_type = coarse
weight = -3
weight = -1
global_quality = True
[values]
layer_height = 0.4
layer_height_0 = 0.4
layer_height_0 = 0.2

View file

@ -1,15 +0,0 @@
[general]
version = 4
name = Extra Coarse
definition = hms434
[metadata]
setting_version = 10
type = quality
quality_type = extra coarse
weight = -4
global_quality = True
[values]
layer_height = 0.6
layer_height_0 = 0.6

View file

@ -1,16 +0,0 @@
[general]
version = 4
name = Super Coarse
definition = hms434
[metadata]
setting_version = 10
type = quality
quality_type = super coarse
weight = -4
global_quality = True
[values]
layer_height = 0.8
layer_height_0 = 0.8

View file

@ -1,15 +0,0 @@
[general]
version = 4
name = Ultra Coarse
definition = hms434
[metadata]
setting_version = 10
type = quality
quality_type = ultra coarse
weight = -4
global_quality = True
[values]
layer_height = 1.0
layer_height_0 = 1.0

View file

@ -0,0 +1,36 @@
[general]
version = 4
name = High
definition = hms434
[metadata]
setting_version = 10
type = quality
quality_type = high
weight = 1
material = generic_pla
variant = 0.4mm TP extruder
[values]
wall_0_wipe_dist = 0.0
infill_overlap_mm = -0.1
infill_wipe_dist = 0
default_material_print_temperature = 190
material_standby_temperature = 160
default_material_bed_temperature = 45
build_volume_temperature = 43
material_flow = 100
retraction_amount = 1
retraction_speed = 40
retraction_prime_speed = 8
retraction_extra_prime_amount = 0
switch_extruder_retraction_amount = 2
speed_print = 50
coasting_volume = 0.05
coasting_min_volume = 0.17
coasting_speed = 100

View file

@ -0,0 +1,36 @@
[general]
version = 4
name = Normal
definition = hms434
[metadata]
setting_version = 10
type = quality
quality_type = normal
weight = 0
material = generic_pla
variant = 0.4mm TP extruder
[values]
wall_0_wipe_dist = 0.0
infill_overlap_mm = -0.1
infill_wipe_dist = 0
default_material_print_temperature = 190
material_standby_temperature = 160
default_material_bed_temperature = 45
build_volume_temperature = 43
material_flow = 100
retraction_amount = 1
retraction_speed = 40
retraction_prime_speed = 8
retraction_extra_prime_amount = 0
switch_extruder_retraction_amount = 2
speed_print = 50
coasting_volume = 0.05
coasting_min_volume = 0.17
coasting_speed = 100

View file

@ -0,0 +1,36 @@
[general]
version = 4
name = Coarse
definition = hms434
[metadata]
setting_version = 10
type = quality
quality_type = coarse
weight = -1
material = generic_pla
variant = 0.8mm TP extruder
[values]
wall_0_wipe_dist = 0.0
infill_overlap_mm = -0.1
infill_wipe_dist = 0
default_material_print_temperature = 190
material_standby_temperature = 160
default_material_bed_temperature = 45
build_volume_temperature = 43
material_flow = 100
retraction_amount = 1
retraction_speed = 40
retraction_prime_speed = 8
retraction_extra_prime_amount = 0
switch_extruder_retraction_amount = 2
speed_print = 50
coasting_volume = 0.05
coasting_min_volume = 0.17
coasting_speed = 100

View file

@ -0,0 +1,40 @@
[general]
version = 4
name = Normal
definition = hms434
[metadata]
setting_version = 10
type = quality
quality_type = normal
weight = 0
material = generic_pla
variant = 0.8mm TP extruder
[values]
wall_0_wipe_dist = 0.0
infill_overlap_mm = -0.1
infill_sparse_thickness = =0.4 if infill_sparse_density < 90 else 0.2
infill_wipe_dist = 0
default_material_print_temperature = 190
material_standby_temperature = 160
default_material_bed_temperature = 45
build_volume_temperature = 43
material_flow = 100
retraction_amount = 1
retraction_speed = 40
retraction_prime_speed = 8
retraction_extra_prime_amount = 0
switch_extruder_retraction_amount = 2
speed_print = 50
speed_infill = 42
support_infill_sparse_thickness = 0.4
coasting_volume = 0.05
coasting_min_volume = 0.17
coasting_speed = 100

View file

@ -4,7 +4,7 @@ name = Coarse
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = fast
weight = -1

View file

@ -4,7 +4,7 @@ name = Fine
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = high
weight = 1

View file

@ -4,7 +4,7 @@ name = Medium
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = normal
weight = 0

View file

@ -4,7 +4,7 @@ name = Coarse
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = fast
weight = -1

View file

@ -4,7 +4,7 @@ name = Fine
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = high
weight = 1

View file

@ -4,7 +4,7 @@ name = Medium
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = normal
weight = 0

View file

@ -4,7 +4,7 @@ name = UltraFine
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = ultrahigh
weight = 2

View file

@ -4,7 +4,7 @@ name = Coarse
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = fast
weight = -1

View file

@ -4,7 +4,7 @@ name = Fine
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = high
weight = 1

View file

@ -4,7 +4,7 @@ name = Medium
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = normal
weight = 0

View file

@ -4,7 +4,7 @@ name = UltraFine
definition = imade3d_jellybox
[metadata]
setting_version = 8
setting_version = 10
type = quality
quality_type = ultrahigh
weight = 2

View file

@ -60,11 +60,7 @@ fragment =
highp float NdotR = clamp(dot(viewVector, reflectedLight), 0.0, 1.0);
finalColor += pow(NdotR, u_shininess) * u_specularColor;
#if __VERSION__ >= 150
finalColor = (u_faceId != gl_PrimitiveID) ? ((-normal.y > u_overhangAngle) ? u_overhangColor : finalColor) : u_faceColor;
#else
finalColor = (-normal.y > u_overhangAngle) ? u_overhangColor : finalColor;
#endif
gl_FragColor = finalColor;
gl_FragColor.a = 1.0;

View file

@ -1,3 +1,84 @@
[4.3.0]
*Ultimaker S3.
This release includes a new profile for our latest S-line of 3D printers: the Ultimaker S3. Eagle-eyed beta testers may have noticed this extra printer profile in the beta release, too. Well done to those who spotted it. Learn more about the Ultimaker S3 by reading the blog on Ultimaker.com.
*Even more 3D file formats.
This version is compatible with even more 3D file formats out-of-the-box, so you can integrate CAD software, 3D scanning software, and 3D modeling software into your workflow with ease. Natively open Collada, GLTF, OpenCTM, and PLY formats, to name a few. And dont forget, downloading plugins from the Ultimaker Marketplace brings in support for many more.
*Align faces to the build plate.
Orienting your models with the rotation tool or the lay flat tool can be a hassle with complex geometries. This new time-saving feature lets you select a face of your model to rest on the build plate, so you can get the orientation you need quickly and easily. Please note this is disabled in compatibility mode (and if your machine is running OpenGL 3.2 or lower).
*Support infill/interface line directions.
Improve reliability with more precise control over certain aspects of your print. Choose the angle that support-infill and interfaces print at, thanks to a contribution from vgribinchuck. Input a set of angles you want lines generated at, and these will be placed sequentially throughout your 3D print.
*Randomize infill start.
Randomize which infill line is printed first. This distributes strength across the model, preventing one segment becoming the weakest link, at the cost of an additional travel move.
*Print small features slower.
Smartavionics has contributed a setting which recognizes small perimeters and reduces print speed in order to boost the reliability and accuracy of small printed features. This is especially useful for small perimeters such as printed holes, as they tend to get ripped away from the build plate easily due to their low contact area.
*Easy selector for Z seam positions.
Z seams are now easier to position on your model, thanks to a contribution by trouch. A drop down selection box has been added to custom mode, giving you a list of presets to place the z seam on your model.
*Colorblind assist theme.
Nubnubbud has added a new theme for colorblind users which makes more distinction between colors, such as the yellow/green line colors in the layer view.
*DisplayFilenameAndLayerOnLCD script.
Some improvements for this post processing script from the community. N95JPL has contributed updates to offer a wider range of optional information. Adecastilho has contributed updates so that the layer count is displayed before the filename to prevent the layer number getting truncated in the event of long filename, as well as an option to start layer count at either 0 or 1. The ':' in the display string has also been removed as it is a GCODE command that splits the line into two different commands.
*Peripheral information for output devices.
Architectural changes in Ultimaker Cura to allow display information about peripherals in the printer output device, so that I can use it to later on show that information in the Monitor stage plugin.
*Quality changes on import.
Users can now import profiles that have been created on a different machine other than the active one.
*Remove prime after coasting.
Reduce the visibility of the z seam when printing with coasting by preventing nozzle priming.
*Map Material Station slot data.
The available configurations drop down will display information about a Ultimaker S5 Material Station if connected. Read more about the Ultimaker S5 Material Station on ultimaker.com
* Bug fixes
- Uninstall in silent mode. Fixed an issue where a dialog displays when uninstalling in silent mode.
- Build Interface if Support is Present. In some cases, support could be pushed away by large support XY distance, but interfaces could be left on overhangs which leads to situation when interface is generated without support. This has been fixed.
- Install in silent mode. The bundled Arduino driver is signed by a certificate that's not trusted on Windows by default, so there was no way to suppress the prompt or to have the installer skip driver installation. This has been fixed.
- 3MF project printer connection not included. When loading a project file that was saved while a network connection was active, the network connection is not re-established. This has been fixed.
- Thin Walls broken. Fixed an error with thin walls being broken.
- Tray icon remaining. Fixed a bug where the tray icon would remain after closing the application.
- Marketplace text. Fixed an issue where Marketplace text is blurry on some screens
- Unsupported profile imports. Fixed an issue where exported profiles could not be reimported.
- Loading file message. Added visual feedback when loading files such as STLs
- Loading GCODE on disabled extruders. Fixed an issue where GCODE imported using multi-extrusion fails to load if an extruder is disabled.
- Support brim with concentric support pattern. Fixed an issue where support would be in mid-air.
- Reduced cloud logging. Logging has been reduced for cloud connections on unstable connections.
- Application menu extruder menu. Fixed an issue where changing the extruder via the application menu didnt work.
- Tool handles move when rotating. Fixed an issue where rotate tool handles would change location when rotating.
- F5 reload. Fixed an issue where F5 doesn't reload GCODE.
- Application not starting before the splash screen. Fixed an issue where the application wouldnt start before the splash window.
- Qt 5.13 crashes. Fixed an issue where the ShaderEffect crashes using Qt 5.13
- Cant select other materials in print setting tab. Fixed an issue where other materials couldnt be selected using the print settings tab.
- Drop down to buildplate after resize. Models dont drop down to the build plate if they are scaled down from too large to fit.
- Unsupported quality profiles. Fixed unsupported quality profiles appearing for 0.25 + 0.8 print core combinations.
- 'Arrange all models' for groups. Fixed an issue where arrange all models hangs for grouped models.
- Update Checker not working. Fixed this so that updates are visible if using a legacy version.
- Missing support brim. Fixed an issue where support brim was missing if platform adhesion set to None.
- Multiply non-normal mesh doesn't work. Fixed instances where processes stopped and messages would hang.
- Settings not updating in GUI with inheritance. Fixed settings not updating GUI with inheritance.
- Prevent 'generic'-part in name of specific materials. Introduced checks for generic material types to help material categorization.
- Hide temperature settings. The "Default Print Temperature" setting is currently editable, but editing this setting can cause problems with temperatures later especially when you have it in your custom profile. We decided to hide this setting so users can no longer edit it in the later releases to avoid confusion. The "Default Build Plate Temperature" has also been hidden because it causes a similar issue.
- Add machine_heated_build_volume. Introduced a new machine_heated_build_volume machine-setting, which is set it to false by default, and only set it to true for the Ultimaker S5. Users can alter their own definition if theydohave a heated build volume.
- Z-hops on first layer. First move other start GCODE not z-hopped. Contributed by sailorgreg.
- Preserve extruder-only moves in post stretch script. Contributed by sgtnoodle.
*Third-party printer definitions
New machine definitions added for:
- IMADE3D Jellybox. Contributed by filipgoc for IMADE3D Jellybox printers, which adds JellyBOX 2 printer and revises settings of JellyBOX Original.
- Vertex Nano. Contributed by velbn
- Felix Pro 2. Contributed by pnks
- JGAurora A35. Contributed by pinchies.
- eMotionTech Strateo3D. Contributed by KOUBeMT.
- NWA3D A31. Contributed by DragonJe.
[4.2.0]
*Orthographic view.
When preparing prints, professional users wanted more control over the 3D view type, so this version introduces an orthographic view, which is the same view type used by most professional CAD software packages. Find the orthographic view in View > Camera view > Orthographic, and compare the dimensions of your model to your CAD design with ease.

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>pms_modify_dont_support_overlap</title>
<desc>Created with Sketch.</desc>
<defs>
<circle id="path-1" cx="21.5" cy="6.5" r="6.5"></circle>
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="13" height="13" fill="white">
<use xlink:href="#path-1"></use>
</mask>
</defs>
<g id="pms_modify_dont_support_overlap" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Group-4" transform="translate(0.000000, 2.000000)">
<polygon id="4" fill="#000" transform="translate(11.000000, 12.000000) scale(1, -1) translate(-11.000000, -12.000000) " points="2 3.34399175e-13 20 3.34399175e-13 13 17.5384615 22 24 0 24 9 17.5384615"></polygon>
<rect id="Rectangle" fill="#000" x="1" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-9" fill="#000" x="3" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-10" fill="#000" x="5" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-11" fill="#000" x="7" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-24" fill="#000" x="14" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-25" fill="#000" x="16" y="10" width="1" height="14"></rect>
<rect id="Rectangle-Copy-27" fill="#000" x="18" y="12" width="1" height="12"></rect>
<rect id="Rectangle-Copy-28" fill="#000" x="20" y="12" width="1" height="12"></rect>
<use id="Oval" stroke="#000" mask="url(#mask-2)" stroke-width="2" stroke-dasharray="2,2" xlink:href="#path-1"></use>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="28px" height="28px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>pms_modify_overlaps</title>
<desc>Created with Sketch.</desc>
<defs>
<polygon id="path-1" points="1 25 6 9 4 2 18 2 25 2 22 8.27272727 28 25 21 25"></polygon>
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="27" height="23" fill="white">
<use xlink:href="#path-1"></use>
</mask>
</defs>
<g id="pms_modify_overlaps" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M10.1109336,2 L12.6179373,9.07692308 L7.60392993,25 L-4.79616347e-14,25 L4.84615385,9.07692308 L2.42307692,2 L10.1109336,2 Z" id="Combined-Shape" fill="#000"></path>
<path d="M17.717,14.213 L18.026,15.23 L9.635,25 L8.453,25 L17.717,14.213 Z M18.427,16.547 L18.737,17.565 L12.351,25 L11.169,25 L18.427,16.547 Z M19.138,18.882 L19.447,19.899 L15.067,25 L13.885,25 L19.138,18.882 Z M19.849,21.218 L20.158,22.234 L17.783,25 L16.601,25 L19.849,21.218 Z M20.559,23.553 L20.869,24.569 L20.499,25 L19.317,25 L20.559,23.553 Z M17.006,11.878 L17.315,12.894 L8,23.743 L8.684,21.57 L17.006,11.878 Z M16.295,9.544 L16.605,10.559 L9.572,18.749 L10.256,16.577 L16.295,9.544 Z M17.594,4.867 L16.81,7.157 L11.144,13.756 L11.828,11.583 L17.594,4.867 Z M18.522,2 L12.567,8.935 L12.222,7.961 L17.341,2 L18.522,2 Z M15.806,2 L11.774,6.696 L11.429,5.722 L14.625,2 L15.806,2 Z M13.091,2 L10.981,4.458 L10.635,3.483 L11.909,2 L13.091,2 Z M10.375,2 L10.188,2.219 L10.1109336,2 L10.375,2 Z" id="Combined-Shape" fill="#000"></path>
<use id="Path-4" stroke="#000" mask="url(#mask-2)" stroke-width="2" stroke-dasharray="2,2" xlink:href="#path-1"></use>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>pms_Normal</title>
<desc>Created with Sketch.</desc>
<g id="pms_Normal" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<polygon id="Path" fill="#000" points="6.30769231 3 21.6923077 3 19.3846154 9.76923077 24 25 4 25 8.61538462 9.76923077"></polygon>
</g>
</svg>

After

Width:  |  Height:  |  Size: 559 B

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>pms_printassupport</title>
<desc>Created with Sketch.</desc>
<g id="pms_printassupport" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Print-as-support" transform="translate(4.000000, 3.000000)">
<g id="Group">
<path d="M0.833,19.251 L0.833333333,22 L-7.59392549e-14,22 L0.833,19.251 Z M4.166,8.251 L4.16666667,22 L2.5,22 L2.5,13.749 L4.166,8.251 Z M7.5,0 L7.5,22 L5.83333333,22 L5.83333333,0 L7.5,0 Z M10.8333333,0 L10.8333333,22 L9.16666667,22 L9.16666667,0 L10.8333333,0 Z M15.833,8.251 L17.5,13.751 L17.5,22 L15.8333333,22 L15.833,8.251 Z M14.1666667,0 L14.1666667,22 L12.5,22 L12.5,0 L14.1666667,0 Z M19.166,19.248 L20,22 L19.1666667,22 L19.166,19.248 Z M17.5,0 L17.5,0.563 L15.833,5.452 L15.8333333,0 L17.5,0 Z M4.16666667,0 L4.166,5.452 L2.5,0.566 L2.5,0 L4.16666667,0 Z" id="Combined-Shape" fill="#000"></path>
<g transform="translate(0.833333, 0.000000)"></g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -240,7 +240,7 @@ QtObject
}
Behavior on color { ColorAnimation { duration: 50; } }
border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? (control.checked ? Theme.getSize("thick_lining").width : Theme.getSize("default_lining").width) : 0
border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? Theme.getSize("default_lining").width : 0
border.color: control.checked ? Theme.getColor("icon") : Theme.getColor("lining")
}
}

View file

@ -1,13 +0,0 @@
[general]
name = 0.25mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 10
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.25
machine_nozzle_tip_outer_diameter = 1.05

View file

@ -1,13 +0,0 @@
[general]
name = 0.6mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 10
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.6
machine_nozzle_tip_outer_diameter = 1.05

View file

@ -1,13 +0,0 @@
[general]
name = 1.2mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 10
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 1.2
machine_nozzle_tip_outer_diameter = 1.3

View file

@ -1,13 +0,0 @@
[general]
name = 1.5mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 10
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 1.5
machine_nozzle_tip_outer_diameter = 1.6

View file

@ -61,7 +61,7 @@ def main():
plugins.sort()
mods = ["cura"] + plugins + findModules("plugins/VersionUpgrade")
success_code = 0
for mod in mods:
print("------------- Checking module {mod}".format(**locals()))
if sys.platform == "win32":
@ -70,10 +70,12 @@ def main():
result = subprocess.run([sys.executable, mypy_module, "-p", mod, "--ignore-missing-imports"])
if result.returncode != 0:
print("\nModule {mod} failed checking. :(".format(**locals()))
return 1
success_code = 1
if success_code:
print("\n\nSome modules failed checking!")
else:
print("\n\nDone checking. All is good.")
return 0
return success_code
if __name__ == "__main__":

View file

@ -139,7 +139,7 @@ def test_resetSettingForAllExtruders(machine_manager):
extruder_2 = createMockedExtruder("extruder_2")
extruder_1.userChanges = createMockedInstanceContainer("settings_1")
extruder_2.userChanges = createMockedInstanceContainer("settings_2")
global_stack.extruders = {"1": extruder_1, "2": extruder_2}
global_stack.extruderList = [extruder_1, extruder_2]
machine_manager.resetSettingForAllExtruders("whatever")