Fix merge conflicts with master
|
@ -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"
|
||||
|
|
|
@ -269,10 +269,11 @@ 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:
|
||||
node.setOutsideBuildArea(True)
|
||||
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
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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,11 +104,14 @@ 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)
|
||||
|
||||
context = self.createContextForDefaultValueEvaluation(extruder_stack)
|
||||
|
||||
return self.getValueInExtruder(extruder_position, property_key, context = context)
|
||||
return self.getValueInExtruder(extruder_position, property_key, context = context)
|
||||
|
||||
# Gets all default setting values as a list from all extruders of the currently active machine.
|
||||
# The default values are those excluding the values in the user_changes container.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -85,8 +85,10 @@ class Snapshot:
|
|||
preview_pass.setCamera(camera)
|
||||
preview_pass.render()
|
||||
pixel_output = preview_pass.getOutput()
|
||||
|
||||
min_x, max_x, min_y, max_y = Snapshot.getImageBoundaries(pixel_output)
|
||||
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:
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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")});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -12,7 +12,7 @@ def getMetaData():
|
|||
return {
|
||||
"stage": {
|
||||
"name": i18n_catalog.i18nc("@item:inmenu", "Monitor"),
|
||||
"weight": 2
|
||||
"weight": 30
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
Label
|
||||
Button
|
||||
{
|
||||
text: catalog.i18nc("@label","Mesh Type")
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("text")
|
||||
height: UM.Theme.getSize("setting").height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
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
|
||||
}
|
||||
|
||||
UM.SettingPropertyProvider
|
||||
Button
|
||||
{
|
||||
id: meshTypePropertyProvider
|
||||
containerStack: Cura.MachineManager.activeMachine
|
||||
watchedProperties: [ "enabled" ]
|
||||
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
|
||||
}
|
||||
|
||||
ComboBox
|
||||
Button
|
||||
{
|
||||
id: meshTypeSelection
|
||||
style: UM.Theme.styles.combobox
|
||||
onActivated: {
|
||||
UM.ActiveTool.setProperty("MeshType", model.get(index).type)
|
||||
}
|
||||
model: ListModel
|
||||
{
|
||||
id: meshTypeModel
|
||||
Component.onCompleted: meshTypeSelection.populateModel()
|
||||
}
|
||||
|
||||
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")
|
||||
});
|
||||
}
|
||||
|
||||
meshTypeSelection.updateCurrentIndex();
|
||||
}
|
||||
|
||||
function updateCurrentIndex()
|
||||
{
|
||||
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;
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
Connections
|
||||
Button
|
||||
{
|
||||
target: Cura.MachineManager
|
||||
onGlobalContainerChanged:
|
||||
{
|
||||
meshTypeSelection.model.clear();
|
||||
meshTypeSelection.populateModel();
|
||||
}
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: UM.Selection
|
||||
onSelectionChanged: meshTypeSelection.updateCurrentIndex()
|
||||
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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Column
|
||||
Label
|
||||
{
|
||||
id: meshTypeLabel
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("text")
|
||||
height: UM.Theme.getSize("setting").height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
CheckBox
|
||||
{
|
||||
id: infillOnlyCheckbox
|
||||
|
||||
text: catalog.i18nc("@action:checkbox", "Infill only");
|
||||
|
||||
style: UM.Theme.styles.checkbox;
|
||||
|
||||
visible: currentMeshType === infillMeshType || currentMeshType === cuttingMeshType
|
||||
onClicked: setOverhangsMeshType()
|
||||
|
||||
Binding
|
||||
{
|
||||
target: infillOnlyCheckbox
|
||||
property: "checked"
|
||||
value: currentMeshType === infillMeshType
|
||||
}
|
||||
}
|
||||
|
||||
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 { }
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
139
plugins/PerObjectSettingsTool/SettingPickDialog.qml
Normal 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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"/>
|
||||
</svg>
|
||||
<?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 |
|
@ -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
|
||||
|
|
|
@ -10,7 +10,7 @@ def getMetaData():
|
|||
return {
|
||||
"stage": {
|
||||
"name": i18n_catalog.i18nc("@item:inmenu", "Prepare"),
|
||||
"weight": 0
|
||||
"weight": 10
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ def getMetaData():
|
|||
return {
|
||||
"stage": {
|
||||
"name": i18n_catalog.i18nc("@item:inmenu", "Preview"),
|
||||
"weight": 1
|
||||
"weight": 20
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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>
|
||||
</svg>
|
Before Width: | Height: | Size: 866 B After Width: | Height: | Size: 1.2 KiB |
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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...")
|
||||
self._snapshot = Snapshot.snapshot(width = 300, height = 300)
|
||||
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
|
||||
|
|
|
@ -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"),
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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",
|
||||
}
|
||||
|
||||
|
||||
|
@ -42,7 +51,7 @@ class VersionUpgrade43to44(VersionUpgrade):
|
|||
#
|
||||
# This renames the renamed settings in the containers.
|
||||
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
parser = configparser.ConfigParser(interpolation=None)
|
||||
parser = configparser.ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
|
@ -58,12 +67,13 @@ class VersionUpgrade43to44(VersionUpgrade):
|
|||
|
||||
## Upgrades stacks to have the new version number.
|
||||
def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
parser = configparser.ConfigParser(interpolation=None)
|
||||
parser = configparser.ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
if "metadata" in parser:
|
||||
parser["metadata"]["setting_version"] = "10"
|
||||
if "metadata" not in parser:
|
||||
parser["metadata"] = {}
|
||||
parser["metadata"]["setting_version"] = "10"
|
||||
|
||||
if "containers" in parser:
|
||||
# With the ContainerTree refactor, UM2 with Olsson block got moved to a separate definition.
|
||||
|
|
|
@ -59,4 +59,3 @@ def getMetaData() -> Dict[str, Any]:
|
|||
|
||||
def register(app: "Application") -> Dict[str, Any]:
|
||||
return {"version_upgrade": upgrade}
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "Mark2_for_Ultimaker2",
|
||||
"version": 2,
|
||||
"name": "Mark2 for Ultimaker2",
|
||||
"inherits": "ultimaker2_plus",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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},
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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: "
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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,50 +87,39 @@ Item
|
|||
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
ScrollView
|
||||
ListView
|
||||
{
|
||||
id: scroll
|
||||
width: parent.width
|
||||
id: listView
|
||||
clip: true
|
||||
padding: UM.Theme.getSize("default_lining").width
|
||||
|
||||
contentItem: ListView
|
||||
anchors
|
||||
{
|
||||
id: listView
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
margins: UM.Theme.getSize("default_lining").width
|
||||
}
|
||||
|
||||
// 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
|
||||
ScrollBar.vertical: ScrollBar
|
||||
{
|
||||
hoverEnabled: true
|
||||
}
|
||||
|
||||
// We use an extra property here, since we only want to to be informed about the content size changes.
|
||||
onContentHeightChanged:
|
||||
property real maximumHeight: UM.Theme.getSize("objects_menu_size").height
|
||||
|
||||
height: Math.min(contentHeight, maximumHeight)
|
||||
|
||||
model: Cura.ObjectsModel {}
|
||||
|
||||
delegate: ObjectItemButton
|
||||
{
|
||||
id: modelButton
|
||||
Binding
|
||||
{
|
||||
// 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
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted:
|
||||
{
|
||||
scroll.height = Math.min(contentHeight, maximumHeight) + scroll.topPadding + scroll.bottomPadding
|
||||
}
|
||||
model: Cura.ObjectsModel {}
|
||||
|
||||
delegate: ObjectItemButton
|
||||
{
|
||||
id: modelButton
|
||||
Binding
|
||||
{
|
||||
target: modelButton
|
||||
property: "checked"
|
||||
value: model.selected
|
||||
}
|
||||
text: model.name
|
||||
width: listView.width
|
||||
target: modelButton
|
||||
property: "checked"
|
||||
value: model.selected
|
||||
}
|
||||
text: model.name
|
||||
width: listView.width
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -469,7 +469,7 @@ UM.PreferencesPage
|
|||
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@window:text", "Camera rendering: ")
|
||||
text: catalog.i18nc("@window:text", "Camera rendering:")
|
||||
}
|
||||
ComboBox
|
||||
{
|
||||
|
|
|
@ -72,6 +72,7 @@ Button
|
|||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
spacing: UM.Theme.getSize("narrow_margin").width
|
||||
visible: (updatePrinterTypesOnlyWhenChecked && machineSelectorButton.checked) || !updatePrinterTypesOnlyWhenChecked
|
||||
|
||||
Repeater
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
36
resources/quality/hms434/pla/hms434_0.4_pla_high.inst.cfg
Normal 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
|
36
resources/quality/hms434/pla/hms434_0.4_pla_normal.inst.cfg
Normal 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
|
36
resources/quality/hms434/pla/hms434_0.8_pla_coarse.inst.cfg
Normal 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
|
40
resources/quality/hms434/pla/hms434_0.8_pla_normal.inst.cfg
Normal 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
|
|
@ -4,7 +4,7 @@ name = Coarse
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = fast
|
||||
weight = -1
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Fine
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = high
|
||||
weight = 1
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Medium
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = 0
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Coarse
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = fast
|
||||
weight = -1
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Fine
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = high
|
||||
weight = 1
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Medium
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = 0
|
||||
|
|
|
@ -4,7 +4,7 @@ name = UltraFine
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = ultrahigh
|
||||
weight = 2
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Coarse
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = fast
|
||||
weight = -1
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Fine
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = high
|
||||
weight = 1
|
||||
|
|
|
@ -4,7 +4,7 @@ name = Medium
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = normal
|
||||
weight = 0
|
||||
|
|
|
@ -4,7 +4,7 @@ name = UltraFine
|
|||
definition = imade3d_jellybox
|
||||
|
||||
[metadata]
|
||||
setting_version = 8
|
||||
setting_version = 10
|
||||
type = quality
|
||||
quality_type = ultrahigh
|
||||
weight = 2
|
||||
|
|
|
@ -1,41 +1,41 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = High
|
||||
definition = tizyx_k25
|
||||
|
||||
[metadata]
|
||||
quality_type = draft
|
||||
setting_version = 7
|
||||
type = quality
|
||||
global_quality = True
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
initial_layer_line_width_factor = 90
|
||||
infill_overlap = 15
|
||||
material_flow_layer_0 = 93
|
||||
material_flow = 99
|
||||
speed_wall_0 = 45
|
||||
speed_wall_x = 50
|
||||
speed_topbottom = 45
|
||||
support_enable= True
|
||||
support_angle = 70
|
||||
adhesion_type = skirt
|
||||
skirt_line_count = 2
|
||||
skirt_gap = 2
|
||||
fill_outline_gaps = True
|
||||
infill_sparse_density = 15
|
||||
material_diameter = 1.75
|
||||
retraction_min_travel = 2
|
||||
speed_print = 60
|
||||
cool_fan_speed_0 = 10
|
||||
cool_min_layer_time = 12
|
||||
layer_start_x = 250
|
||||
layer_start_y = 250
|
||||
coasting_enable = False
|
||||
wall_line_count = 2
|
||||
material_print_temperature = =default_material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
z_seam_corner = z_seam_corner_none
|
||||
optimize_wall_printing_order = True
|
||||
[general]
|
||||
version = 4
|
||||
name = High
|
||||
definition = tizyx_k25
|
||||
|
||||
[metadata]
|
||||
quality_type = draft
|
||||
setting_version = 7
|
||||
type = quality
|
||||
global_quality = True
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
initial_layer_line_width_factor = 90
|
||||
infill_overlap = 15
|
||||
material_flow_layer_0 = 93
|
||||
material_flow = 99
|
||||
speed_wall_0 = 45
|
||||
speed_wall_x = 50
|
||||
speed_topbottom = 45
|
||||
support_enable= True
|
||||
support_angle = 70
|
||||
adhesion_type = skirt
|
||||
skirt_line_count = 2
|
||||
skirt_gap = 2
|
||||
fill_outline_gaps = True
|
||||
infill_sparse_density = 15
|
||||
material_diameter = 1.75
|
||||
retraction_min_travel = 2
|
||||
speed_print = 60
|
||||
cool_fan_speed_0 = 10
|
||||
cool_min_layer_time = 12
|
||||
layer_start_x = 250
|
||||
layer_start_y = 250
|
||||
coasting_enable = False
|
||||
wall_line_count = 2
|
||||
material_print_temperature = =default_material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
z_seam_corner = z_seam_corner_none
|
||||
optimize_wall_printing_order = True
|
||||
|
|
|
@ -1,41 +1,41 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Normal
|
||||
definition = tizyx_k25
|
||||
|
||||
[metadata]
|
||||
quality_type = normal
|
||||
setting_version = 10
|
||||
type = quality
|
||||
global_quality = True
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
initial_layer_line_width_factor = 90
|
||||
infill_overlap = 15
|
||||
material_flow_layer_0 = 93
|
||||
material_flow = 99
|
||||
speed_wall_0 = 45
|
||||
speed_wall_x = 50
|
||||
speed_topbottom = 45
|
||||
support_enable= True
|
||||
support_angle = 70
|
||||
adhesion_type = skirt
|
||||
skirt_line_count = 2
|
||||
skirt_gap = 2
|
||||
fill_outline_gaps = True
|
||||
infill_sparse_density = 15
|
||||
material_diameter = 1.75
|
||||
retraction_min_travel = 2
|
||||
speed_print = 60
|
||||
cool_fan_speed_0 = 10
|
||||
cool_min_layer_time = 12
|
||||
layer_start_x = 250
|
||||
layer_start_y = 250
|
||||
coasting_enable = False
|
||||
wall_line_count = 2
|
||||
material_print_temperature = =default_material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
z_seam_corner = z_seam_corner_none
|
||||
optimize_wall_printing_order = True
|
||||
[general]
|
||||
version = 4
|
||||
name = Normal
|
||||
definition = tizyx_k25
|
||||
|
||||
[metadata]
|
||||
quality_type = normal
|
||||
setting_version = 10
|
||||
type = quality
|
||||
global_quality = True
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
initial_layer_line_width_factor = 90
|
||||
infill_overlap = 15
|
||||
material_flow_layer_0 = 93
|
||||
material_flow = 99
|
||||
speed_wall_0 = 45
|
||||
speed_wall_x = 50
|
||||
speed_topbottom = 45
|
||||
support_enable= True
|
||||
support_angle = 70
|
||||
adhesion_type = skirt
|
||||
skirt_line_count = 2
|
||||
skirt_gap = 2
|
||||
fill_outline_gaps = True
|
||||
infill_sparse_density = 15
|
||||
material_diameter = 1.75
|
||||
retraction_min_travel = 2
|
||||
speed_print = 60
|
||||
cool_fan_speed_0 = 10
|
||||
cool_min_layer_time = 12
|
||||
layer_start_x = 250
|
||||
layer_start_y = 250
|
||||
coasting_enable = False
|
||||
wall_line_count = 2
|
||||
material_print_temperature = =default_material_print_temperature
|
||||
material_initial_print_temperature = =material_print_temperature
|
||||
material_final_print_temperature = =material_print_temperature
|
||||
z_seam_corner = z_seam_corner_none
|
||||
optimize_wall_printing_order = True
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 don’t 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 didn’t 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 wouldn’t start before the splash window.
|
||||
- Qt 5.13 crashes. Fixed an issue where the ShaderEffect crashes using Qt 5.13
|
||||
- Can’t select other materials in print setting tab. Fixed an issue where other materials couldn’t be selected using the print settings tab.
|
||||
- Drop down to buildplate after resize. Models don’t 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 they do have 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.
|
||||
|
|
|
@ -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 |
17
resources/themes/cura-light/icons/pos_modify_overlaps.svg
Normal 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 |
9
resources/themes/cura-light/icons/pos_normal.svg
Normal 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 |
14
resources/themes/cura-light/icons/pos_print_as_support.svg
Normal 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 |
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
162
run_mypy.py
|
@ -1,80 +1,82 @@
|
|||
#!/usr/bin/env python
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
|
||||
# A quick Python implementation of unix 'where' command.
|
||||
def where(exe_name: str, search_path: str = os.getenv("PATH")) -> str:
|
||||
if search_path is None:
|
||||
search_path = ""
|
||||
paths = search_path.split(os.pathsep)
|
||||
result = ""
|
||||
print(" -> sys.executable location: %s" % sys.executable)
|
||||
sys_exec_dir = os.path.dirname(sys.executable)
|
||||
root_dir = os.path.dirname(sys_exec_dir)
|
||||
paths += [sys_exec_dir,
|
||||
os.path.join(root_dir, "bin"),
|
||||
os.path.join(root_dir, "scripts"),
|
||||
]
|
||||
paths = set(paths)
|
||||
|
||||
for path in sorted(paths):
|
||||
print(" -> Searching %s" % path)
|
||||
candidate_path = os.path.join(path, exe_name)
|
||||
if os.path.exists(candidate_path):
|
||||
result = candidate_path
|
||||
break
|
||||
return result
|
||||
|
||||
|
||||
def findModules(path):
|
||||
result = []
|
||||
for entry in os.scandir(path):
|
||||
if entry.is_dir() and os.path.exists(os.path.join(path, entry.name, "__init__.py")):
|
||||
result.append(entry.name)
|
||||
return result
|
||||
|
||||
|
||||
def main():
|
||||
# Find Uranium via the PYTHONPATH var
|
||||
uraniumUMPath = where("UM", os.getenv("PYTHONPATH"))
|
||||
if uraniumUMPath is None:
|
||||
uraniumUMPath = os.path.join("..", "Uranium")
|
||||
uraniumPath = os.path.dirname(uraniumUMPath)
|
||||
|
||||
mypy_path_parts = [".", os.path.join(".", "plugins"), os.path.join(".", "plugins", "VersionUpgrade"),
|
||||
uraniumPath, os.path.join(uraniumPath, "stubs")]
|
||||
if sys.platform == "win32":
|
||||
os.putenv("MYPYPATH", ";".join(mypy_path_parts))
|
||||
else:
|
||||
os.putenv("MYPYPATH", ":".join(mypy_path_parts))
|
||||
|
||||
# Mypy really needs to be run via its Python script otherwise it can't find its data files.
|
||||
mypy_exe_name = "mypy.exe" if sys.platform == "win32" else "mypy"
|
||||
mypy_exe_dir = where(mypy_exe_name)
|
||||
mypy_module = os.path.join(os.path.dirname(mypy_exe_dir), mypy_exe_name)
|
||||
print("Found mypy exe path: %s" % mypy_exe_dir)
|
||||
print("Found mypy module path: %s" % mypy_module)
|
||||
|
||||
plugins = findModules("plugins")
|
||||
plugins.sort()
|
||||
|
||||
mods = ["cura"] + plugins + findModules("plugins/VersionUpgrade")
|
||||
|
||||
for mod in mods:
|
||||
print("------------- Checking module {mod}".format(**locals()))
|
||||
if sys.platform == "win32":
|
||||
result = subprocess.run([mypy_module, "-p", mod, "--ignore-missing-imports"])
|
||||
else:
|
||||
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
|
||||
else:
|
||||
print("\n\nDone checking. All is good.")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
#!/usr/bin/env python
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
|
||||
# A quick Python implementation of unix 'where' command.
|
||||
def where(exe_name: str, search_path: str = os.getenv("PATH")) -> str:
|
||||
if search_path is None:
|
||||
search_path = ""
|
||||
paths = search_path.split(os.pathsep)
|
||||
result = ""
|
||||
print(" -> sys.executable location: %s" % sys.executable)
|
||||
sys_exec_dir = os.path.dirname(sys.executable)
|
||||
root_dir = os.path.dirname(sys_exec_dir)
|
||||
paths += [sys_exec_dir,
|
||||
os.path.join(root_dir, "bin"),
|
||||
os.path.join(root_dir, "scripts"),
|
||||
]
|
||||
paths = set(paths)
|
||||
|
||||
for path in sorted(paths):
|
||||
print(" -> Searching %s" % path)
|
||||
candidate_path = os.path.join(path, exe_name)
|
||||
if os.path.exists(candidate_path):
|
||||
result = candidate_path
|
||||
break
|
||||
return result
|
||||
|
||||
|
||||
def findModules(path):
|
||||
result = []
|
||||
for entry in os.scandir(path):
|
||||
if entry.is_dir() and os.path.exists(os.path.join(path, entry.name, "__init__.py")):
|
||||
result.append(entry.name)
|
||||
return result
|
||||
|
||||
|
||||
def main():
|
||||
# Find Uranium via the PYTHONPATH var
|
||||
uraniumUMPath = where("UM", os.getenv("PYTHONPATH"))
|
||||
if uraniumUMPath is None:
|
||||
uraniumUMPath = os.path.join("..", "Uranium")
|
||||
uraniumPath = os.path.dirname(uraniumUMPath)
|
||||
|
||||
mypy_path_parts = [".", os.path.join(".", "plugins"), os.path.join(".", "plugins", "VersionUpgrade"),
|
||||
uraniumPath, os.path.join(uraniumPath, "stubs")]
|
||||
if sys.platform == "win32":
|
||||
os.putenv("MYPYPATH", ";".join(mypy_path_parts))
|
||||
else:
|
||||
os.putenv("MYPYPATH", ":".join(mypy_path_parts))
|
||||
|
||||
# Mypy really needs to be run via its Python script otherwise it can't find its data files.
|
||||
mypy_exe_name = "mypy.exe" if sys.platform == "win32" else "mypy"
|
||||
mypy_exe_dir = where(mypy_exe_name)
|
||||
mypy_module = os.path.join(os.path.dirname(mypy_exe_dir), mypy_exe_name)
|
||||
print("Found mypy exe path: %s" % mypy_exe_dir)
|
||||
print("Found mypy module path: %s" % mypy_module)
|
||||
|
||||
plugins = findModules("plugins")
|
||||
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":
|
||||
result = subprocess.run([mypy_module, "-p", mod, "--ignore-missing-imports"])
|
||||
else:
|
||||
result = subprocess.run([sys.executable, mypy_module, "-p", mod, "--ignore-missing-imports"])
|
||||
if result.returncode != 0:
|
||||
print("\nModule {mod} failed checking. :(".format(**locals()))
|
||||
success_code = 1
|
||||
if success_code:
|
||||
print("\n\nSome modules failed checking!")
|
||||
else:
|
||||
print("\n\nDone checking. All is good.")
|
||||
return success_code
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|