mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-08-08 06:23:59 -06:00
Merge branch 'master' into feature_better_warning_formulas
This commit is contained in:
commit
ed0f8c0235
18 changed files with 234 additions and 102 deletions
|
@ -85,6 +85,9 @@ class BuildVolume(SceneNode):
|
|||
# activeQualityChanged is always emitted after setActiveVariant, setActiveMaterial and setActiveQuality.
|
||||
# Therefore this works.
|
||||
Application.getInstance().getMachineManager().activeQualityChanged.connect(self._onStackChanged)
|
||||
# This should also ways work, and it is semantically more correct,
|
||||
# but it does not update the disallowed areas after material change
|
||||
Application.getInstance().getMachineManager().activeStackChanged.connect(self._onStackChanged)
|
||||
|
||||
def _onSceneChanged(self, source):
|
||||
if self._global_container_stack:
|
||||
|
|
|
@ -503,7 +503,7 @@ class CuraApplication(QtApplication):
|
|||
|
||||
qmlRegisterType(cura.Settings.ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel")
|
||||
qmlRegisterType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel")
|
||||
qmlRegisterType(cura.Settings.ProfilesPageModel, "Cura", 1, 0, "ProfilesPageModel")
|
||||
qmlRegisterType(cura.Settings.QualityAndUserProfilesModel, "Cura", 1, 0, "QualityAndUserProfilesModel")
|
||||
qmlRegisterType(cura.Settings.MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler")
|
||||
qmlRegisterType(cura.Settings.QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel")
|
||||
|
||||
|
|
|
@ -42,7 +42,12 @@ class QualityManager:
|
|||
# \return the matching quality changes containers \type{List[ContainerInstance]}
|
||||
def findQualityChangesByName(self, quality_changes_name, machine_definition=None):
|
||||
criteria = {"type": "quality_changes", "name": quality_changes_name}
|
||||
return self._getFilteredContainersForStack(machine_definition, [], **criteria)
|
||||
result = self._getFilteredContainersForStack(machine_definition, [], **criteria)
|
||||
|
||||
criteria = {"type": "quality_changes", "global_profile": quality_changes_name}
|
||||
result.extend(self._getFilteredContainersForStack(machine_definition, [], **criteria))
|
||||
|
||||
return result
|
||||
|
||||
## Fetch the list of available quality types for this combination of machine definition and materials.
|
||||
#
|
||||
|
@ -60,6 +65,11 @@ class QualityManager:
|
|||
|
||||
return list(common_quality_types)
|
||||
|
||||
## Fetches a dict of quality types names to quality profiles for a combination of machine and material.
|
||||
#
|
||||
# \param machine_definition \type{DefinitionContainer} the machine definition.
|
||||
# \param material \type{ContainerInstance} the material.
|
||||
# \return \type{Dict[str, ContainerInstance]} the dict of suitable quality type names mapping to qualities.
|
||||
def __fetchQualityTypeDictForMaterial(self, machine_definition, material):
|
||||
qualities = self.findAllQualitiesForMachineMaterial(machine_definition, material)
|
||||
quality_type_dict = {}
|
||||
|
@ -87,6 +97,11 @@ class QualityManager:
|
|||
result = self._getFilteredContainersForStack(machine_definition, [basic_material], **criteria)
|
||||
return result[0] if result else None
|
||||
|
||||
## Find all suitable qualities for a combination of machine and material.
|
||||
#
|
||||
# \param machine_definition \type{DefinitionContainer} the machine definition.
|
||||
# \param material_container \type{ContainerInstance} the material.
|
||||
# \return \type{List[ContainerInstance]} the list of suitable qualities.
|
||||
def findAllQualitiesForMachineMaterial(self, machine_definition, material_container):
|
||||
criteria = {"type": "quality" }
|
||||
result = self._getFilteredContainersForStack(machine_definition, [material_container], **criteria)
|
||||
|
@ -95,6 +110,11 @@ class QualityManager:
|
|||
result = self._getFilteredContainersForStack(machine_definition, [basic_material], **criteria)
|
||||
return result
|
||||
|
||||
## Fetch a more basic version of a material.
|
||||
#
|
||||
# This tries to find a generic or basic version of the given material.
|
||||
# \param material_container \type{InstanceContainer} the material
|
||||
# \return \type{Option[InstanceContainer]} the basic material or None if one could not be found.
|
||||
def _getBasicMaterial(self, material_container):
|
||||
base_material = material_container.getMetaDataEntry("material")
|
||||
if base_material:
|
||||
|
|
|
@ -467,6 +467,8 @@ class ContainerManager(QObject):
|
|||
base_name = active_quality_name
|
||||
unique_name = self._container_registry.uniqueName(base_name)
|
||||
|
||||
global_changes = None
|
||||
|
||||
# Go through the active stacks and create quality_changes containers from the user containers.
|
||||
for stack in cura.Settings.ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks():
|
||||
user_container = stack.getTop()
|
||||
|
@ -482,6 +484,11 @@ class ContainerManager(QObject):
|
|||
extruder_id)
|
||||
self._performMerge(new_changes, user_container)
|
||||
|
||||
if stack is global_stack:
|
||||
global_changes = new_changes
|
||||
else:
|
||||
new_changes.setMetaDataEntry("global_profile", global_changes.getId())
|
||||
|
||||
self._container_registry.addContainer(new_changes)
|
||||
stack.replaceContainer(stack.getContainerIndex(quality_changes_container), new_changes)
|
||||
|
||||
|
@ -563,9 +570,16 @@ class ContainerManager(QObject):
|
|||
container_registry = self._container_registry
|
||||
|
||||
containers_to_rename = self._container_registry.findInstanceContainers(type = "quality_changes", name = quality_name)
|
||||
containers_to_rename.extend(self._container_registry.findInstanceContainers(type = "quality_changes", global_profile = quality_name))
|
||||
|
||||
global_changes_id = ""
|
||||
for container in containers_to_rename:
|
||||
stack_id = container.getMetaDataEntry("extruder", global_stack.getId())
|
||||
container_registry.renameContainer(container.getId(), new_name, self._createUniqueId(stack_id, new_name))
|
||||
if "global_profile" not in container.getMetaData():
|
||||
global_changes_id = container.getId()
|
||||
else:
|
||||
container.setMetaDataEntry("global_profile", global_changes_id)
|
||||
|
||||
if not containers_to_rename:
|
||||
UM.Logger.log("e", "Unable to rename %s, because we could not find the profile", quality_name)
|
||||
|
@ -628,8 +642,9 @@ class ContainerManager(QObject):
|
|||
new_change_instances = []
|
||||
|
||||
# Handle the global stack first.
|
||||
new_changes = self._createQualityChanges(quality_container, new_name, machine_definition, None)
|
||||
new_change_instances.append(new_changes)
|
||||
global_changes = self._createQualityChanges(quality_container, new_name, machine_definition, None)
|
||||
new_changes.addMetaDataEntry("global_profile", global_changes.getId())
|
||||
new_change_instances.append(global_changes)
|
||||
self._container_registry.addContainer(new_changes)
|
||||
|
||||
# Handle the extruders if present.
|
||||
|
@ -638,6 +653,7 @@ class ContainerManager(QObject):
|
|||
for key in extruders:
|
||||
value = extruders[key]
|
||||
new_changes = self._createQualityChanges(quality_container, new_name, machine_definition, value)
|
||||
new_changes.addMetaDataEntry("global_profile", global_changes.getId())
|
||||
new_change_instances.append(new_changes)
|
||||
self._container_registry.addContainer(new_changes)
|
||||
|
||||
|
@ -646,10 +662,16 @@ class ContainerManager(QObject):
|
|||
# Duplicate a quality changes container
|
||||
def _duplicateQualityChangesForMachineType(self, quality_changes_name, base_name, machine_definition):
|
||||
new_change_instances = []
|
||||
profile_index = -1
|
||||
global_changes_id = ""
|
||||
for container in QualityManager.getInstance().findQualityChangesByName(quality_changes_name,
|
||||
machine_definition):
|
||||
new_unique_id = self._createUniqueId(container.getId(), base_name)
|
||||
new_container = container.duplicate(new_unique_id, base_name)
|
||||
if profile_index >= 0:
|
||||
new_changes.setMetaDataEntry("global_profile", global_changes_id)
|
||||
else:
|
||||
global_changes_id = new_unique_id
|
||||
new_change_instances.append(new_container)
|
||||
self._container_registry.addContainer(new_container)
|
||||
|
||||
|
@ -678,6 +700,16 @@ class ContainerManager(QObject):
|
|||
duplicated_container.setDirty(True)
|
||||
self._container_registry.addContainer(duplicated_container)
|
||||
|
||||
## Get the singleton instance for this class.
|
||||
@classmethod
|
||||
def getInstance(cls):
|
||||
# Note: Explicit use of class name to prevent issues with inheritance.
|
||||
if ContainerManager.__instance is None:
|
||||
ContainerManager.__instance = cls()
|
||||
return ContainerManager.__instance
|
||||
|
||||
__instance = None
|
||||
|
||||
# Factory function, used by QML
|
||||
@staticmethod
|
||||
def createContainerManager(engine, js_engine):
|
||||
|
|
|
@ -16,6 +16,9 @@ from UM.Platform import Platform
|
|||
from UM.PluginRegistry import PluginRegistry #For getting the possible profile writers to write with.
|
||||
from UM.Util import parseBool
|
||||
|
||||
from cura.Settings.ExtruderManager import ExtruderManager
|
||||
from cura.Settings.ContainerManager import ContainerManager
|
||||
|
||||
from UM.i18n import i18nCatalog
|
||||
catalog = i18nCatalog("cura")
|
||||
|
||||
|
@ -128,8 +131,15 @@ class CuraContainerRegistry(ContainerRegistry):
|
|||
return { "status": "error", "message": catalog.i18nc("@info:status", "Failed to import profile from <filename>{0}</filename>: <message>{1}</message>", file_name, "Invalid path")}
|
||||
|
||||
plugin_registry = PluginRegistry.getInstance()
|
||||
container_registry = ContainerRegistry.getInstance()
|
||||
extension = file_name.split(".")[-1]
|
||||
|
||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||
if not global_container_stack:
|
||||
return
|
||||
|
||||
machine_extruders = list(ExtruderManager.getInstance().getMachineExtruders(global_container_stack.getId()))
|
||||
machine_extruders.sort(key = lambda k: k.getMetaDataEntry("position"))
|
||||
|
||||
for plugin_id, meta_data in self._getIOPlugins("profile_reader"):
|
||||
if meta_data["profile_reader"][0]["extension"] != extension:
|
||||
continue
|
||||
|
@ -148,17 +158,49 @@ class CuraContainerRegistry(ContainerRegistry):
|
|||
self._configureProfile(profile, name_seed)
|
||||
return { "status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile.getName()) }
|
||||
else:
|
||||
profile_index = -1
|
||||
global_profile = None
|
||||
|
||||
for profile in profile_or_list:
|
||||
extruder_id = profile.getMetaDataEntry("extruder")
|
||||
if extruder_id:
|
||||
profile_name = "%s_%s" % (extruder_id, name_seed)
|
||||
if profile_index >= 0:
|
||||
if len(machine_extruders) > profile_index:
|
||||
extruder_id = machine_extruders[profile_index].getBottom().getId()
|
||||
profile_name = "%s_%s" % (extruder_id, name_seed)
|
||||
# Ensure the extruder profiles get non-conflicting names
|
||||
# NB: these are not user-facing
|
||||
if "extruder" in profile.getMetaData():
|
||||
profile.setMetaDataEntry("extruder", extruder_id)
|
||||
else:
|
||||
profile.addMetaDataEntry("extruder", extruder_id)
|
||||
if "global_profile" in profile.getMetaData():
|
||||
profile.setMetaDataEntry("global_profile", global_profile.getId())
|
||||
else:
|
||||
profile.addMetaDataEntry("global_profile", global_profile.getId())
|
||||
elif profile_index == 0:
|
||||
# Importing a multiextrusion profile into a single extrusion machine; merge 1st extruder profile into global profile
|
||||
profile._id = self.uniqueName("temporary_profile")
|
||||
self.addContainer(profile)
|
||||
ContainerManager.getInstance().mergeContainers(global_profile.getId(), profile.getId())
|
||||
self.removeContainer(profile.getId())
|
||||
break
|
||||
else:
|
||||
# The imported composite profile has a profile for an extruder that this machine does not have. Ignore this extruder-profile
|
||||
break
|
||||
else:
|
||||
global_profile = profile
|
||||
profile_name = name_seed
|
||||
new_name = container_registry.uniqueName(profile_name)
|
||||
new_name = self.uniqueName(profile_name)
|
||||
|
||||
profile.setDirty(True) # Ensure the profiles are correctly saved
|
||||
if "type" in profile.getMetaData():
|
||||
profile.setMetaDataEntry("type", "quality_changes")
|
||||
else:
|
||||
profile.addMetaDataEntry("type", "quality_changes")
|
||||
self._configureProfile(profile, profile_name)
|
||||
profile.setName(new_name)
|
||||
|
||||
profile_index += 1
|
||||
|
||||
return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile_or_list[0].getName())}
|
||||
|
||||
# If it hasn't returned by now, none of the plugins loaded the profile successfully.
|
||||
|
@ -171,7 +213,7 @@ class CuraContainerRegistry(ContainerRegistry):
|
|||
profile._id = new_id
|
||||
|
||||
if self._machineHasOwnQualities():
|
||||
profile.setDefinition(self._activeDefinition())
|
||||
profile.setDefinition(self._activeQualityDefinition())
|
||||
if self._machineHasOwnMaterials():
|
||||
profile.addMetaDataEntry("material", self._activeMaterialId())
|
||||
else:
|
||||
|
@ -192,12 +234,14 @@ class CuraContainerRegistry(ContainerRegistry):
|
|||
result.append( (plugin_id, meta_data) )
|
||||
return result
|
||||
|
||||
## Gets the active definition
|
||||
# \return the active definition object or None if there is no definition
|
||||
def _activeDefinition(self):
|
||||
## Get the definition to use to select quality profiles for the active machine
|
||||
# \return the active quality definition object or None if there is no quality definition
|
||||
def _activeQualityDefinition(self):
|
||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||
if global_container_stack:
|
||||
definition = global_container_stack.getBottom()
|
||||
definition_id = Application.getInstance().getMachineManager().getQualityDefinitionId(global_container_stack.getBottom())
|
||||
definition = self.findDefinitionContainers(id=definition_id)[0]
|
||||
|
||||
if definition:
|
||||
return definition
|
||||
return None
|
||||
|
|
|
@ -29,6 +29,9 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
|||
# containers.
|
||||
IndexRole = Qt.UserRole + 4
|
||||
|
||||
# The ID of the definition of the extruder.
|
||||
DefinitionRole = Qt.UserRole + 5
|
||||
|
||||
## List of colours to display if there is no material or the material has no known
|
||||
# colour.
|
||||
defaultColors = ["#ffc924", "#86ec21", "#22eeee", "#245bff", "#9124ff", "#ff24c8"]
|
||||
|
@ -44,6 +47,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
|||
self.addRoleName(self.NameRole, "name")
|
||||
self.addRoleName(self.ColorRole, "color")
|
||||
self.addRoleName(self.IndexRole, "index")
|
||||
self.addRoleName(self.DefinitionRole, "definition")
|
||||
|
||||
self._add_global = False
|
||||
self._simple_names = False
|
||||
|
@ -51,8 +55,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
|||
self._active_extruder_stack = None
|
||||
|
||||
#Listen to changes.
|
||||
UM.Application.getInstance().globalContainerStackChanged.connect(self._updateExtruders)
|
||||
manager = ExtruderManager.getInstance()
|
||||
manager.globalContainerStackDefinitionChanged.connect(self._updateExtruders) #When the global stack changes to a printer with different extruders.
|
||||
|
||||
self._updateExtruders()
|
||||
|
||||
|
@ -126,7 +130,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
|||
"id": global_container_stack.getId(),
|
||||
"name": "Global",
|
||||
"color": color,
|
||||
"index": -1
|
||||
"index": -1,
|
||||
"definition": ""
|
||||
}
|
||||
items.append(item)
|
||||
changed = True
|
||||
|
@ -148,7 +153,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel):
|
|||
"id": extruder.getId(),
|
||||
"name": extruder_name,
|
||||
"color": color,
|
||||
"index": position
|
||||
"index": position,
|
||||
"definition": extruder.getBottom().getId()
|
||||
}
|
||||
items.append(item)
|
||||
changed = True
|
||||
|
|
|
@ -461,8 +461,8 @@ class MachineManager(QObject):
|
|||
|
||||
@pyqtProperty(str, notify=activeQualityChanged)
|
||||
def activeQualityName(self):
|
||||
if self._active_container_stack:
|
||||
quality = self._active_container_stack.findContainer({"type": "quality_changes"})
|
||||
if self._active_container_stack and self._global_container_stack:
|
||||
quality = self._global_container_stack.findContainer({"type": "quality_changes"})
|
||||
if quality and quality != self._empty_quality_changes_container:
|
||||
return quality.getName()
|
||||
quality = self._active_container_stack.findContainer({"type": "quality"})
|
||||
|
@ -544,6 +544,7 @@ class MachineManager(QObject):
|
|||
|
||||
material_index = self._active_container_stack.getContainerIndex(old_material)
|
||||
self._active_container_stack.replaceContainer(material_index, material_container)
|
||||
Logger.log("d", "Active material changed")
|
||||
|
||||
material_container.nameChanged.connect(self._onMaterialNameChanged)
|
||||
|
||||
|
@ -566,10 +567,11 @@ class MachineManager(QObject):
|
|||
[material_container])
|
||||
if not candidate_quality:
|
||||
# Fall back to a quality
|
||||
new_quality_id = quality_manager.findQualityByQualityType(None,
|
||||
new_quality = quality_manager.findQualityByQualityType(None,
|
||||
quality_manager.getWholeMachineDefinition(machine_definition),
|
||||
[material_container])
|
||||
|
||||
if new_quality:
|
||||
new_quality_id = new_quality.getId()
|
||||
else:
|
||||
if not old_quality_changes:
|
||||
new_quality_id = candidate_quality.getId()
|
||||
|
@ -588,7 +590,7 @@ class MachineManager(QObject):
|
|||
self.blurSettings.emit()
|
||||
variant_index = self._active_container_stack.getContainerIndex(old_variant)
|
||||
self._active_container_stack.replaceContainer(variant_index, containers[0])
|
||||
|
||||
Logger.log("d", "Active variant changed")
|
||||
preferred_material = None
|
||||
if old_material:
|
||||
preferred_material_name = old_material.getName()
|
||||
|
|
|
@ -6,6 +6,7 @@ from UM.Settings.Models.InstanceContainersModel import InstanceContainersModel
|
|||
|
||||
from cura.QualityManager import QualityManager
|
||||
from cura.Settings.ExtruderManager import ExtruderManager
|
||||
from cura.Settings.MachineManager import MachineManager
|
||||
|
||||
## QML Model for listing the current list of valid quality profiles.
|
||||
#
|
||||
|
@ -15,6 +16,10 @@ class ProfilesModel(InstanceContainersModel):
|
|||
|
||||
Application.getInstance().globalContainerStackChanged.connect(self._update)
|
||||
|
||||
Application.getInstance().getMachineManager().activeVariantChanged.connect(self._update)
|
||||
Application.getInstance().getMachineManager().activeStackChanged.connect(self._update)
|
||||
Application.getInstance().getMachineManager().activeMaterialChanged.connect(self._update)
|
||||
|
||||
## Fetch the list of containers to display.
|
||||
#
|
||||
# See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
|
||||
|
|
|
@ -8,7 +8,7 @@ from cura.Settings.ProfilesModel import ProfilesModel
|
|||
|
||||
## QML Model for listing the current list of valid quality and quality changes profiles.
|
||||
#
|
||||
class ProfilesPageModel(ProfilesModel):
|
||||
class QualityAndUserProfilesModel(ProfilesModel):
|
||||
def __init__(self, parent = None):
|
||||
super().__init__(parent)
|
||||
|
|
@ -25,6 +25,7 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
|
|||
self._container_registry = UM.Settings.ContainerRegistry.getInstance()
|
||||
|
||||
self._extruder_id = None
|
||||
self._extruder_definition_id = None
|
||||
self._quality = None
|
||||
self._material = None
|
||||
|
||||
|
@ -46,6 +47,17 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
|
|||
def extruderId(self):
|
||||
return self._extruder_id
|
||||
|
||||
def setExtruderDefinition(self, extruder_definition):
|
||||
if extruder_definition != self._extruder_definition_id:
|
||||
self._extruder_definition_id = extruder_definition
|
||||
self._update()
|
||||
self.extruderDefinitionChanged.emit()
|
||||
|
||||
extruderDefinitionChanged = pyqtSignal()
|
||||
@pyqtProperty(str, fset = setExtruderDefinition, notify = extruderDefinitionChanged)
|
||||
def extruderDefinition(self):
|
||||
return self._extruder_definition_id
|
||||
|
||||
def setQuality(self, quality):
|
||||
if quality != self._quality:
|
||||
self._quality = quality
|
||||
|
@ -138,8 +150,9 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
|
|||
|
||||
if quality_changes_container:
|
||||
criteria = {"type": "quality_changes", "quality_type": quality_type, "definition": definition_id, "name": quality_changes_container.getName()}
|
||||
if self._extruder_id != "":
|
||||
criteria["extruder"] = self._extruder_id
|
||||
if self._extruder_definition_id != "":
|
||||
criteria["extruder"] = self._extruder_definition_id
|
||||
criteria["name"] = "%s_%s" % (self._extruder_definition_id, quality_changes_container.getName())
|
||||
else:
|
||||
criteria["extruder"] = None
|
||||
|
||||
|
|
|
@ -13,4 +13,4 @@ from .SettingOverrideDecorator import SettingOverrideDecorator
|
|||
from .QualitySettingsModel import QualitySettingsModel
|
||||
from .SettingInheritanceManager import SettingInheritanceManager
|
||||
from .ProfilesModel import ProfilesModel
|
||||
from .ProfilesPageModel import ProfilesPageModel
|
||||
from .QualityAndUserProfilesModel import QualityAndUserProfilesModel
|
||||
|
|
|
@ -550,6 +550,7 @@
|
|||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 0.3,
|
||||
"resolve": "sum(extruderValues('layer_height_0')) / len(extruderValues('layer_height_0'))",
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "0.1",
|
||||
"maximum_value_warning": "0.8 * min(extruderValues('machine_nozzle_size'))",
|
||||
|
@ -680,7 +681,7 @@
|
|||
"minimum_value_warning": "0.4 * machine_nozzle_size",
|
||||
"maximum_value_warning": "2 * machine_nozzle_size",
|
||||
"type": "float",
|
||||
"enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable')",
|
||||
"enabled": "support_enable and support_interface_enable",
|
||||
"limit_to_extruder": "support_interface_extruder_nr",
|
||||
"value": "line_width",
|
||||
"settable_per_mesh": false,
|
||||
|
@ -1655,6 +1656,7 @@
|
|||
"description": "The first few layers are printed slower than the rest of the model, to get better adhesion to the build plate and improve the overall success rate of prints. The speed is gradually increased over these layers.",
|
||||
"type": "int",
|
||||
"default_value": 2,
|
||||
"resolve": "sum(extruderValues('speed_slowdown_layers')) / len(extruderValues('speed_slowdown_layers'))",
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "1.0 / layer_height",
|
||||
"settable_per_mesh": false,
|
||||
|
@ -1690,6 +1692,7 @@
|
|||
"description": "Enables adjusting the print head acceleration. Increasing the accelerations can reduce printing time at the cost of print quality.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"resolve": "any(extruderValues('acceleration_enabled'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -1702,7 +1705,7 @@
|
|||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"acceleration_infill": {
|
||||
|
@ -1715,7 +1718,7 @@
|
|||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "acceleration_enabled and infill_sparse_density > 0",
|
||||
"enabled": "resolveOrValue('acceleration_enabled') and infill_sparse_density > 0",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"acceleration_wall": {
|
||||
|
@ -1728,7 +1731,7 @@
|
|||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"acceleration_wall_0": {
|
||||
|
@ -1741,7 +1744,7 @@
|
|||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_wall",
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"acceleration_wall_x": {
|
||||
|
@ -1754,7 +1757,7 @@
|
|||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_wall",
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
|
@ -1769,7 +1772,7 @@
|
|||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"acceleration_support": {
|
||||
|
@ -1782,7 +1785,7 @@
|
|||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "acceleration_enabled and support_enable",
|
||||
"enabled": "resolveOrValue('acceleration_enabled') and support_enable",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "support_extruder_nr",
|
||||
"settable_per_extruder": true,
|
||||
|
@ -1797,7 +1800,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled and support_enable",
|
||||
"enabled": "resolveOrValue('acceleration_enabled') and support_enable",
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
|
@ -1812,7 +1815,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled and extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable",
|
||||
"enabled": "resolveOrValue('acceleration_enabled') and extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable",
|
||||
"limit_to_extruder": "support_interface_extruder_nr",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
|
@ -1829,7 +1832,7 @@
|
|||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "resolveOrValue('prime_tower_enable') and acceleration_enabled",
|
||||
"enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": false
|
||||
}
|
||||
}
|
||||
|
@ -1844,7 +1847,7 @@
|
|||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"value": "acceleration_print if magic_spiralize else 5000",
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": false
|
||||
},
|
||||
"acceleration_layer_0": {
|
||||
|
@ -1857,7 +1860,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"acceleration_print_layer_0":
|
||||
|
@ -1871,7 +1874,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"acceleration_travel_layer_0":
|
||||
|
@ -1885,7 +1888,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_extruder": true,
|
||||
"settable_per_mesh": false
|
||||
}
|
||||
|
@ -1901,7 +1904,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled",
|
||||
"enabled": "resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr"
|
||||
},
|
||||
|
@ -1911,6 +1914,7 @@
|
|||
"description": "Enables adjusting the jerk of print head when the velocity in the X or Y axis changes. Increasing the jerk can reduce printing time at the cost of print quality.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"resolve": "any(extruderValues('jerk_enabled'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -1923,7 +1927,7 @@
|
|||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"jerk_infill": {
|
||||
|
@ -1936,7 +1940,7 @@
|
|||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "jerk_enabled and infill_sparse_density > 0",
|
||||
"enabled": "resolveOrValue('jerk_enabled') and infill_sparse_density > 0",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"jerk_wall": {
|
||||
|
@ -1949,7 +1953,7 @@
|
|||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"jerk_wall_0": {
|
||||
|
@ -1962,7 +1966,7 @@
|
|||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_wall",
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"jerk_wall_x": {
|
||||
|
@ -1975,7 +1979,7 @@
|
|||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_wall",
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
|
@ -1990,7 +1994,7 @@
|
|||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"jerk_support": {
|
||||
|
@ -2003,7 +2007,7 @@
|
|||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "jerk_enabled and support_enable",
|
||||
"enabled": "resolveOrValue('jerk_enabled') and support_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true,
|
||||
"limit_to_extruder": "support_extruder_nr",
|
||||
|
@ -2018,7 +2022,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "jerk_enabled and support_enable",
|
||||
"enabled": "resolveOrValue('jerk_enabled') and support_enable",
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
|
@ -2033,7 +2037,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "jerk_enabled and extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable",
|
||||
"enabled": "resolveOrValue('jerk_enabled') and extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable",
|
||||
"limit_to_extruder": "support_interface_extruder_nr",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
|
@ -2050,7 +2054,7 @@
|
|||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "resolveOrValue('prime_tower_enable') and jerk_enabled",
|
||||
"enabled": "resolveOrValue('prime_tower_enable') and resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": false
|
||||
}
|
||||
}
|
||||
|
@ -2065,7 +2069,7 @@
|
|||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"value": "jerk_print if magic_spiralize else 30",
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": false
|
||||
},
|
||||
"jerk_layer_0": {
|
||||
|
@ -2078,7 +2082,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"jerk_print_layer_0":
|
||||
|
@ -2092,7 +2096,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"jerk_travel_layer_0":
|
||||
|
@ -2106,7 +2110,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_extruder": true,
|
||||
"settable_per_mesh": false
|
||||
}
|
||||
|
@ -2122,7 +2126,7 @@
|
|||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"value": "jerk_layer_0",
|
||||
"enabled": "jerk_enabled",
|
||||
"enabled": "resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr"
|
||||
}
|
||||
|
@ -2148,6 +2152,7 @@
|
|||
"noskin": "No Skin"
|
||||
},
|
||||
"default_value": "all",
|
||||
"resolve": "'noskin' if 'noskin' in extruderValues('retraction_combing') else ('all' if 'all' in extruderValues('retraction_combing') else 'off')",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"travel_avoid_other_parts":
|
||||
|
@ -2156,7 +2161,7 @@
|
|||
"description": "The nozzle avoids already printed parts when traveling. This option is only available when combing is enabled.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"enabled": "retraction_combing != 'off'",
|
||||
"enabled": "resolveOrValue('retraction_combing') != 'off'",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
|
@ -2171,7 +2176,7 @@
|
|||
"minimum_value": "0",
|
||||
"minimum_value_warning": "machine_nozzle_tip_outer_diameter * 0.5",
|
||||
"maximum_value_warning": "machine_nozzle_tip_outer_diameter * 5",
|
||||
"enabled": "retraction_combing != 'off' and travel_avoid_other_parts",
|
||||
"enabled": "resolveOrValue('retraction_combing') != 'off' and travel_avoid_other_parts",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
}
|
||||
|
@ -2258,7 +2263,7 @@
|
|||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 0.5,
|
||||
"value": "0 if resolveOrValue('adhesion_type') == 'raft' else layer_height_0",
|
||||
"value": "0 if resolveOrValue('adhesion_type') == 'raft' else resolveOrValue('layer_height_0')",
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "10.0",
|
||||
"settable_per_mesh": false,
|
||||
|
@ -2273,7 +2278,7 @@
|
|||
"default_value": 2,
|
||||
"minimum_value": "1",
|
||||
"maximum_value_warning": "10 / layer_height",
|
||||
"value": "max(1, int(math.floor((cool_fan_full_at_height - layer_height_0) / layer_height) + 2))",
|
||||
"value": "max(1, int(math.floor((cool_fan_full_at_height - resolveOrValue('layer_height_0')) / layer_height) + 2))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
}
|
||||
|
@ -2342,6 +2347,7 @@
|
|||
"everywhere": "Everywhere"
|
||||
},
|
||||
"default_value": "everywhere",
|
||||
"resolve": "'everywhere' if 'everywhere' in extruderValues('support_type') else buildplate",
|
||||
"enabled": "support_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
|
@ -2457,10 +2463,10 @@
|
|||
"minimum_value": "0",
|
||||
"maximum_value_warning": "machine_nozzle_size",
|
||||
"default_value": 0.1,
|
||||
"value": "extruderValue(support_extruder_nr, 'support_z_distance') if support_type == 'everywhere' else 0",
|
||||
"value": "extruderValue(support_extruder_nr, 'support_z_distance') if resolveOrValue('support_type') == 'everywhere' else 0",
|
||||
"limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr",
|
||||
"type": "float",
|
||||
"enabled": "support_enable and support_type == 'everywhere'",
|
||||
"enabled": "support_enable and resolveOrValue('support_type') == 'everywhere'",
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
|
@ -3009,7 +3015,7 @@
|
|||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 0.3,
|
||||
"value": "layer_height_0 * 1.2",
|
||||
"value": "resolveOrValue('layer_height_0') * 1.2",
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "0.04",
|
||||
"maximum_value_warning": "0.75 * extruderValue(adhesion_extruder_nr, 'machine_nozzle_size')",
|
||||
|
@ -3127,7 +3133,7 @@
|
|||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"value": "acceleration_print",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and acceleration_enabled",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr",
|
||||
"children": {
|
||||
|
@ -3141,7 +3147,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and acceleration_enabled",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr"
|
||||
},
|
||||
|
@ -3155,7 +3161,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and acceleration_enabled",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr"
|
||||
},
|
||||
|
@ -3169,7 +3175,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and acceleration_enabled",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr"
|
||||
}
|
||||
|
@ -3185,7 +3191,7 @@
|
|||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"value": "jerk_print",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and jerk_enabled",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr",
|
||||
"children": {
|
||||
|
@ -3199,7 +3205,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "100",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and jerk_enabled",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr"
|
||||
},
|
||||
|
@ -3213,7 +3219,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and jerk_enabled",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr"
|
||||
},
|
||||
|
@ -3227,7 +3233,7 @@
|
|||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and jerk_enabled",
|
||||
"enabled": "resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')",
|
||||
"settable_per_mesh": false,
|
||||
"limit_to_extruder": "adhesion_extruder_nr"
|
||||
}
|
||||
|
@ -3380,6 +3386,7 @@
|
|||
"enabled": "resolveOrValue('prime_tower_enable')",
|
||||
"default_value": 15,
|
||||
"value": "15 if resolveOrValue('prime_tower_enable') else 0",
|
||||
"resolve": "max(extruderValues('prime_tower_size'))",
|
||||
"minimum_value": "0",
|
||||
"maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)",
|
||||
"minimum_value_warning": "max(extruderValues('prime_tower_line_width')) * 2",
|
||||
|
@ -3397,8 +3404,8 @@
|
|||
"default_value": 200,
|
||||
"minimum_value_warning": "-1000",
|
||||
"maximum_value_warning": "1000",
|
||||
"maximum_value": "machine_width - 0.5 * prime_tower_size",
|
||||
"minimum_value": "0.5 * prime_tower_size",
|
||||
"maximum_value": "machine_width - 0.5 * resolveOrValue('prime_tower_size')",
|
||||
"minimum_value": "0.5 * resolveOrValue('prime_tower_size')",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -3412,8 +3419,8 @@
|
|||
"default_value": 200,
|
||||
"minimum_value_warning": "-1000",
|
||||
"maximum_value_warning": "1000",
|
||||
"maximum_value": "machine_depth - 0.5 * prime_tower_size",
|
||||
"minimum_value": "0.5 * prime_tower_size",
|
||||
"maximum_value": "machine_depth - 0.5 * resolveOrValue('prime_tower_size')",
|
||||
"minimum_value": "0.5 * resolveOrValue('prime_tower_size')",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -3438,6 +3445,7 @@
|
|||
"type": "bool",
|
||||
"enabled": "resolveOrValue('prime_tower_enable')",
|
||||
"default_value": true,
|
||||
"resolve": "any(extruderValues('prime_tower_wipe_enabled'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -3457,6 +3465,7 @@
|
|||
"label": "Enable Ooze Shield",
|
||||
"description": "Enable exterior ooze shield. This will create a shell around the model which is likely to wipe a second nozzle if it's at the same height as the first nozzle.",
|
||||
"type": "bool",
|
||||
"resolve": "any(extruderValues('ooze_shield_enabled'))",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
|
@ -3467,8 +3476,9 @@
|
|||
"description": "The maximum angle a part in the ooze shield will have. With 0 degrees being vertical, and 90 degrees being horizontal. A smaller angle leads to less failed ooze shields, but more material.",
|
||||
"type": "float",
|
||||
"unit": "°",
|
||||
"enabled": "ooze_shield_enabled",
|
||||
"enabled": "resolveOrValue('ooze_shield_enabled')",
|
||||
"default_value": 60,
|
||||
"resolve": "min(extruderValues('ooze_shield_angle'))",
|
||||
"minimum_value": "0",
|
||||
"maximum_value": "90",
|
||||
"settable_per_mesh": false,
|
||||
|
@ -3480,8 +3490,9 @@
|
|||
"description": "Distance of the ooze shield from the print, in the X/Y directions.",
|
||||
"type": "float",
|
||||
"unit": "mm",
|
||||
"enabled": "ooze_shield_enabled",
|
||||
"enabled": "resolveOrValue('ooze_shield_enabled')",
|
||||
"default_value": 2,
|
||||
"resolve": "max(extruderValues('ooze_shield_dist'))",
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "20",
|
||||
"settable_per_mesh": false,
|
||||
|
@ -3629,6 +3640,7 @@
|
|||
"minimum_value": "0",
|
||||
"maximum_value_warning": "10",
|
||||
"default_value": 10,
|
||||
"resolve": "max(extruderValues('draft_shield_dist'))",
|
||||
"enabled": "draft_shield_enabled",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
|
@ -3644,6 +3656,7 @@
|
|||
"limited": "Limited"
|
||||
},
|
||||
"default_value": "full",
|
||||
"resolve": "'full' if 'full' in extruderValues('draft_shield_height_limitation') else 'limited'",
|
||||
"enabled": "draft_shield_enabled",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
|
|
|
@ -144,7 +144,7 @@
|
|||
"default_value": 15
|
||||
},
|
||||
"adhesion_type": {
|
||||
"default_value": "Raft"
|
||||
"default_value": "raft"
|
||||
},
|
||||
"skirt_brim_minimal_length": {
|
||||
"default_value": 100
|
||||
|
|
|
@ -88,16 +88,13 @@
|
|||
"default_value": 0
|
||||
},
|
||||
"skirt_line_count": {
|
||||
"default_value": 3,
|
||||
"enabled": "adhesion_type == \"Skirt\""
|
||||
"default_value": 3
|
||||
},
|
||||
"skirt_gap": {
|
||||
"default_value": 4,
|
||||
"enabled": "adhesion_type == \"Skirt\""
|
||||
"default_value": 4
|
||||
},
|
||||
"skirt_brim_minimal_length": {
|
||||
"default_value": 200,
|
||||
"enabled": "adhesion_type == \"Skirt\""
|
||||
"default_value": 200
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,16 +91,13 @@
|
|||
"default_value": 0
|
||||
},
|
||||
"skirt_line_count": {
|
||||
"default_value": 3,
|
||||
"enabled": "adhesion_type == \"Skirt\""
|
||||
"default_value": 3
|
||||
},
|
||||
"skirt_gap": {
|
||||
"default_value": 4,
|
||||
"enabled": "adhesion_type == \"Skirt\""
|
||||
"default_value": 4
|
||||
},
|
||||
"skirt_brim_minimal_length": {
|
||||
"default_value": 200,
|
||||
"enabled": "adhesion_type == \"Skirt\""
|
||||
"default_value": 200
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ Tab
|
|||
id: base
|
||||
|
||||
property string extruderId: "";
|
||||
property string extruderDefinition: "";
|
||||
property string quality: "";
|
||||
property string material: "";
|
||||
|
||||
|
@ -55,7 +56,8 @@ Tab
|
|||
|
||||
model: Cura.QualitySettingsModel
|
||||
{
|
||||
extruderId: base.extruderId != "" ? base.extruderId : ""
|
||||
extruderId: base.extruderId
|
||||
extruderDefinition: base.extruderDefinition
|
||||
quality: base.quality != null ? base.quality : ""
|
||||
material: base.material != null ? base.material : ""
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ UM.ManagementPage
|
|||
title: catalog.i18nc("@title:tab", "Profiles");
|
||||
property var extrudersModel: Cura.ExtrudersModel{}
|
||||
|
||||
model: Cura.ProfilesPageModel { }
|
||||
model: Cura.QualityAndUserProfilesModel { }
|
||||
|
||||
section.property: "readOnly"
|
||||
section.delegate: Rectangle
|
||||
|
@ -223,6 +223,7 @@ UM.ManagementPage
|
|||
{
|
||||
title: model.name;
|
||||
extruderId: model.id;
|
||||
extruderDefinition: model.definition;
|
||||
quality: base.currentItem != null ? base.currentItem.id : "";
|
||||
material: Cura.MachineManager.allActiveMaterialIds[model.id]
|
||||
}
|
||||
|
@ -335,18 +336,16 @@ UM.ManagementPage
|
|||
folder: CuraApplication.getDefaultPath("dialog_profile_path")
|
||||
onAccepted:
|
||||
{
|
||||
var profiles_to_export = [base.currentItem.id]
|
||||
for(var extruder_nr in base.extrudersModel.items)
|
||||
{
|
||||
profiles_to_export.push(ExtruderManager.getQualityChangesIdByExtruderStackId(base.extrudersModel.items[extruder_nr].id))
|
||||
}
|
||||
var result = base.model.exportProfile(profiles_to_export, fileUrl, selectedNameFilter)
|
||||
var containers = Cura.ContainerManager.findInstanceContainers({"type": "quality_changes", "name": base.currentItem.name})
|
||||
var result = base.model.exportProfile(containers, fileUrl, selectedNameFilter)
|
||||
|
||||
if(result && result.status == "error")
|
||||
{
|
||||
messageDialog.icon = StandardIcon.Critical
|
||||
messageDialog.text = result.message
|
||||
messageDialog.open()
|
||||
}
|
||||
|
||||
// else pop-up Message thing from python code
|
||||
CuraApplication.setDefaultPath("dialog_profile_path", folder)
|
||||
}
|
||||
|
|
|
@ -217,10 +217,9 @@ Item {
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(last_entry == 4 && base.stackLevel == 0 && base.stackLevels.length == 2)
|
||||
if((last_entry == 4 || last_entry == 11) && base.stackLevel == 0 && base.stackLevels.length == 2)
|
||||
{
|
||||
// Special case of the inherit reset. If only the definition (4th container) and the first
|
||||
// Special case of the inherit reset. If only the definition (4th or 11th) container) and the first
|
||||
// entry (user container) are set, we can simply remove the container.
|
||||
propertyProvider.removeFromContainer(0)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue