mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-02 16:54:23 +08:00
Merge remote-tracking branch 'refs/remotes/Ultimaker/master' into master-using-platform
This commit is contained in:
commit
c1cf78f662
@ -196,6 +196,10 @@ class CuraApplication(QtApplication):
|
||||
speed
|
||||
speed_print
|
||||
speed_travel
|
||||
acceleration_print
|
||||
acceleration_travel
|
||||
jerk_print
|
||||
jerk_travel
|
||||
travel
|
||||
cooling
|
||||
cool_fan_enabled
|
||||
@ -280,7 +284,7 @@ class CuraApplication(QtApplication):
|
||||
path = None
|
||||
if not stack_type or stack_type == "machine":
|
||||
path = Resources.getStoragePath(self.ResourceTypes.MachineStack, file_name)
|
||||
elif stack_type == "extruder":
|
||||
elif stack_type == "extruder_train":
|
||||
path = Resources.getStoragePath(self.ResourceTypes.ExtruderStack, file_name)
|
||||
if path:
|
||||
with SaveFile(path, "wt", -1, "utf-8") as f:
|
||||
|
@ -18,7 +18,7 @@ class ExtruderManager(QObject):
|
||||
## Notify when the user switches the currently active extruder.
|
||||
activeExtruderChanged = pyqtSignal()
|
||||
|
||||
## Registers listeners and such to listen to changes to the extruders.
|
||||
## Registers listeners and such to listen to chafnges to the extruders.
|
||||
def __init__(self, parent = None):
|
||||
super().__init__(parent)
|
||||
self._extruder_trains = { } #Per machine, a dictionary of extruder container stack IDs.
|
||||
@ -99,6 +99,10 @@ class ExtruderManager(QObject):
|
||||
extruder_trains = container_registry.findContainerStacks(type = "extruder_train", machine = machine_definition.getId())
|
||||
for extruder_train in extruder_trains:
|
||||
self._extruder_trains[machine_id][extruder_train.getMetaDataEntry("position")] = extruder_train
|
||||
|
||||
## Ensure that the extruder train stacks are linked to global stack.
|
||||
extruder_train.setNextStack(UM.Application.getInstance().getGlobalContainerStack())
|
||||
|
||||
if extruder_trains:
|
||||
self.extrudersChanged.emit(machine_definition)
|
||||
|
||||
@ -169,19 +173,19 @@ class ExtruderManager(QObject):
|
||||
|
||||
#Find a quality to use for this extruder.
|
||||
quality = container_registry.getEmptyInstanceContainer()
|
||||
if machine_definition.getMetaDataEntry("has_machine_quality"):
|
||||
#First add any quality. Later, overwrite with preference if the preference is valid.
|
||||
qualities = container_registry.findInstanceContainers(type = "quality")
|
||||
if len(qualities) >= 1:
|
||||
quality = qualities[0]
|
||||
preferred_quality_id = machine_definition.getMetaDataEntry("preferred_quality")
|
||||
if preferred_quality_id:
|
||||
preferred_quality = container_registry.findInstanceContainers(id = preferred_quality_id.lower(), type = "quality")
|
||||
if len(preferred_quality) >= 1:
|
||||
quality = preferred_quality[0]
|
||||
else:
|
||||
UM.Logger.log("w", "The preferred quality \"%s\" of machine %s doesn't exist or is not a quality profile.", preferred_quality_id, machine_id)
|
||||
#And leave it at the default quality.
|
||||
|
||||
#First add any quality. Later, overwrite with preference if the preference is valid.
|
||||
qualities = container_registry.findInstanceContainers(type = "quality")
|
||||
if len(qualities) >= 1:
|
||||
quality = qualities[0]
|
||||
preferred_quality_id = machine_definition.getMetaDataEntry("preferred_quality")
|
||||
if preferred_quality_id:
|
||||
preferred_quality = container_registry.findInstanceContainers(id = preferred_quality_id.lower(), type = "quality")
|
||||
if len(preferred_quality) >= 1:
|
||||
quality = preferred_quality[0]
|
||||
else:
|
||||
UM.Logger.log("w", "The preferred quality \"%s\" of machine %s doesn't exist or is not a quality profile.", preferred_quality_id, machine_id)
|
||||
#And leave it at the default quality.
|
||||
container_stack.addContainer(quality)
|
||||
|
||||
user_profile = container_registry.findInstanceContainers(id = extruder_stack_id + "_current_settings")
|
||||
|
@ -18,15 +18,28 @@ class MachineManagerModel(QObject):
|
||||
def __init__(self, parent = None):
|
||||
super().__init__(parent)
|
||||
|
||||
self._active_container_stack = None
|
||||
self._global_container_stack = None
|
||||
|
||||
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged)
|
||||
self._global_stack_valid = None
|
||||
self._onGlobalContainerChanged()
|
||||
|
||||
ExtruderManager.ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged)
|
||||
self.globalContainerChanged.connect(self._onActiveExtruderStackChanged)
|
||||
self._onActiveExtruderStackChanged()
|
||||
|
||||
## When the global container is changed, active material probably needs to be updated.
|
||||
self.globalContainerChanged.connect(self.activeMaterialChanged)
|
||||
self.globalContainerChanged.connect(self.activeVariantChanged)
|
||||
self.globalContainerChanged.connect(self.activeQualityChanged)
|
||||
ExtruderManager.ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeMaterialChanged)
|
||||
ExtruderManager.ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeVariantChanged)
|
||||
ExtruderManager.ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeQualityChanged)
|
||||
|
||||
self.globalContainerChanged.connect(self.activeStackChanged)
|
||||
self.globalValueChanged.connect(self.activeStackChanged)
|
||||
ExtruderManager.ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeStackChanged)
|
||||
|
||||
self._empty_variant_container = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = "empty_variant")[0]
|
||||
self._empty_material_container = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = "empty_material")[0]
|
||||
@ -45,6 +58,7 @@ class MachineManagerModel(QObject):
|
||||
activeMaterialChanged = pyqtSignal()
|
||||
activeVariantChanged = pyqtSignal()
|
||||
activeQualityChanged = pyqtSignal()
|
||||
activeStackChanged = pyqtSignal()
|
||||
|
||||
globalValueChanged = pyqtSignal() # Emitted whenever a value inside global container is changed.
|
||||
globalValidationChanged = pyqtSignal() # Emitted whenever a validation inside global container is changed.
|
||||
@ -63,12 +77,12 @@ class MachineManagerModel(QObject):
|
||||
self.globalValueChanged.emit()
|
||||
if property_name == "validationState":
|
||||
if self._global_stack_valid:
|
||||
changed_validation_state = self._global_container_stack.getProperty(key, property_name)
|
||||
changed_validation_state = self._active_container_stack.getProperty(key, property_name)
|
||||
if changed_validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError):
|
||||
self._global_stack_valid = False
|
||||
self.globalValidationChanged.emit()
|
||||
else:
|
||||
new_validation_state = self._checkStackForErrors(self._global_container_stack)
|
||||
new_validation_state = self._checkStackForErrors(self._active_container_stack)
|
||||
if new_validation_state:
|
||||
self._global_stack_valid = True
|
||||
self.globalValidationChanged.emit()
|
||||
@ -87,6 +101,11 @@ class MachineManagerModel(QObject):
|
||||
self._global_container_stack.propertyChanged.connect(self._onGlobalPropertyChanged)
|
||||
self._global_stack_valid = not self._checkStackForErrors(self._global_container_stack)
|
||||
|
||||
def _onActiveExtruderStackChanged(self):
|
||||
self._active_container_stack = ExtruderManager.ExtruderManager.getInstance().getActiveExtruderStack()
|
||||
if not self._active_container_stack:
|
||||
self._active_container_stack = self._global_container_stack
|
||||
|
||||
def _onInstanceContainersChanged(self, container):
|
||||
container_type = container.getMetaDataEntry("type")
|
||||
if container_type == "material":
|
||||
@ -183,18 +202,19 @@ class MachineManagerModel(QObject):
|
||||
## Remove all instances from the top instanceContainer (effectively removing all user-changed settings)
|
||||
@pyqtSlot()
|
||||
def clearUserSettings(self):
|
||||
if not self._global_container_stack:
|
||||
if not self._active_container_stack:
|
||||
return
|
||||
user_settings = self._global_container_stack.getTop()
|
||||
|
||||
user_settings = self._active_container_stack.getTop()
|
||||
user_settings.clear()
|
||||
|
||||
## Check if the global_container has instances in the user container
|
||||
@pyqtProperty(bool, notify = globalValueChanged)
|
||||
@pyqtProperty(bool, notify = activeStackChanged)
|
||||
def hasUserSettings(self):
|
||||
if not self._global_container_stack:
|
||||
if not self._active_container_stack:
|
||||
return
|
||||
|
||||
user_settings = self._global_container_stack.getTop().findInstances(**{})
|
||||
user_settings = self._active_container_stack.getTop().findInstances(**{})
|
||||
return len(user_settings) != 0
|
||||
|
||||
## Check if the global profile does not contain error states
|
||||
@ -204,10 +224,10 @@ class MachineManagerModel(QObject):
|
||||
def isGlobalStackValid(self):
|
||||
return self._global_stack_valid
|
||||
|
||||
@pyqtProperty(str, notify = globalContainerChanged)
|
||||
@pyqtProperty(str, notify = activeStackChanged)
|
||||
def activeUserProfileId(self):
|
||||
if self._global_container_stack:
|
||||
return self._global_container_stack.getTop().getId()
|
||||
if self._active_container_stack:
|
||||
return self._active_container_stack.getTop().getId()
|
||||
|
||||
return ""
|
||||
|
||||
@ -227,8 +247,8 @@ class MachineManagerModel(QObject):
|
||||
|
||||
@pyqtProperty(str, notify = activeMaterialChanged)
|
||||
def activeMaterialName(self):
|
||||
if self._global_container_stack:
|
||||
material = self._global_container_stack.findContainer({"type":"material"})
|
||||
if self._active_container_stack:
|
||||
material = self._active_container_stack.findContainer({"type":"material"})
|
||||
if material:
|
||||
return material.getName()
|
||||
|
||||
@ -236,8 +256,8 @@ class MachineManagerModel(QObject):
|
||||
|
||||
@pyqtProperty(str, notify=activeMaterialChanged)
|
||||
def activeMaterialId(self):
|
||||
if self._global_container_stack:
|
||||
material = self._global_container_stack.findContainer({"type": "material"})
|
||||
if self._active_container_stack:
|
||||
material = self._active_container_stack.findContainer({"type": "material"})
|
||||
if material:
|
||||
return material.getId()
|
||||
|
||||
@ -245,16 +265,16 @@ class MachineManagerModel(QObject):
|
||||
|
||||
@pyqtProperty(str, notify=activeQualityChanged)
|
||||
def activeQualityName(self):
|
||||
if self._global_container_stack:
|
||||
quality = self._global_container_stack.findContainer({"type": "quality"})
|
||||
if self._active_container_stack:
|
||||
quality = self._active_container_stack.findContainer({"type": "quality"})
|
||||
if quality:
|
||||
return quality.getName()
|
||||
return ""
|
||||
|
||||
@pyqtProperty(str, notify=activeQualityChanged)
|
||||
def activeQualityId(self):
|
||||
if self._global_container_stack:
|
||||
quality = self._global_container_stack.findContainer({"type": "quality"})
|
||||
if self._active_container_stack:
|
||||
quality = self._active_container_stack.findContainer({"type": "quality"})
|
||||
if quality:
|
||||
return quality.getId()
|
||||
return ""
|
||||
@ -262,8 +282,8 @@ class MachineManagerModel(QObject):
|
||||
## Check if a container is read_only
|
||||
@pyqtSlot(str, result = bool)
|
||||
def isReadOnly(self, container_id):
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id=container_id)
|
||||
if not containers or not self._global_container_stack:
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = container_id)
|
||||
if not containers or not self._active_container_stack:
|
||||
return True
|
||||
return containers[0].isReadOnly()
|
||||
|
||||
@ -278,9 +298,9 @@ class MachineManagerModel(QObject):
|
||||
|
||||
@pyqtSlot(str, result=str)
|
||||
def duplicateContainer(self, container_id):
|
||||
if not self._global_container_stack:
|
||||
if not self._active_container_stack:
|
||||
return ""
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id=container_id)
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = container_id)
|
||||
if containers:
|
||||
new_name = self._createUniqueName("quality", "", containers[0].getName(), catalog.i18nc("@label", "Custom profile"))
|
||||
|
||||
@ -331,7 +351,7 @@ class MachineManagerModel(QObject):
|
||||
@pyqtSlot(str)
|
||||
def removeQualityContainer(self, container_id):
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = container_id)
|
||||
if not containers or not self._global_container_stack:
|
||||
if not containers or not self._active_container_stack:
|
||||
return
|
||||
|
||||
# If the container that is being removed is the currently active container, set another machine as the active container
|
||||
@ -349,10 +369,10 @@ class MachineManagerModel(QObject):
|
||||
|
||||
@pyqtSlot()
|
||||
def updateQualityContainerFromUserContainer(self):
|
||||
if not self._global_container_stack:
|
||||
if not self._active_container_stack:
|
||||
return
|
||||
user_settings = self._global_container_stack.getTop()
|
||||
quality = self._global_container_stack.findContainer({"type": "quality"})
|
||||
user_settings = self._active_container_stack.getTop()
|
||||
quality = self._active_container_stack.findContainer({"type": "quality"})
|
||||
for key in user_settings.getAllKeys():
|
||||
quality.setProperty(key, "value", user_settings.getProperty(key, "value"))
|
||||
self.clearUserSettings() # As all users settings are noq a quality, remove them.
|
||||
@ -360,45 +380,45 @@ class MachineManagerModel(QObject):
|
||||
|
||||
@pyqtSlot(str)
|
||||
def setActiveMaterial(self, material_id):
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id=material_id)
|
||||
if not containers or not self._global_container_stack:
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = material_id)
|
||||
if not containers or not self._active_container_stack:
|
||||
return
|
||||
|
||||
old_material = self._global_container_stack.findContainer({"type":"material"})
|
||||
old_material = self._active_container_stack.findContainer({"type":"material"})
|
||||
if old_material:
|
||||
material_index = self._global_container_stack.getContainerIndex(old_material)
|
||||
self._global_container_stack.replaceContainer(material_index, containers[0])
|
||||
material_index = self._active_container_stack.getContainerIndex(old_material)
|
||||
self._active_container_stack.replaceContainer(material_index, containers[0])
|
||||
|
||||
self.setActiveQuality(self._updateQualityContainer(self._global_container_stack.getBottom(), containers[0]).id)
|
||||
self.setActiveQuality(self._updateQualityContainer(self._active_container_stack.getBottom(), containers[0]).id)
|
||||
|
||||
@pyqtSlot(str)
|
||||
def setActiveVariant(self, variant_id):
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id=variant_id)
|
||||
if not containers or not self._global_container_stack:
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = variant_id)
|
||||
if not containers or not self._active_container_stack:
|
||||
return
|
||||
|
||||
old_variant = self._global_container_stack.findContainer({"type": "variant"})
|
||||
old_variant = self._active_container_stack.findContainer({"type": "variant"})
|
||||
if old_variant:
|
||||
variant_index = self._global_container_stack.getContainerIndex(old_variant)
|
||||
self._global_container_stack.replaceContainer(variant_index, containers[0])
|
||||
variant_index = self._active_container_stack.getContainerIndex(old_variant)
|
||||
self._active_container_stack.replaceContainer(variant_index, containers[0])
|
||||
|
||||
self.setActiveMaterial(self._updateMaterialContainer(self._global_container_stack.getBottom(), containers[0]).id)
|
||||
self.setActiveMaterial(self._updateMaterialContainer(self._active_container_stack.getBottom(), containers[0]).id)
|
||||
|
||||
@pyqtSlot(str)
|
||||
def setActiveQuality(self, quality_id):
|
||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = quality_id)
|
||||
if not containers or not self._global_container_stack:
|
||||
if not containers or not self._active_container_stack:
|
||||
return
|
||||
|
||||
old_quality = self._global_container_stack.findContainer({"type": "quality"})
|
||||
old_quality = self._active_container_stack.findContainer({"type": "quality"})
|
||||
if old_quality:
|
||||
quality_index = self._global_container_stack.getContainerIndex(old_quality)
|
||||
self._global_container_stack.replaceContainer(quality_index, containers[0])
|
||||
quality_index = self._active_container_stack.getContainerIndex(old_quality)
|
||||
self._active_container_stack.replaceContainer(quality_index, containers[0])
|
||||
|
||||
@pyqtProperty(str, notify = activeVariantChanged)
|
||||
def activeVariantName(self):
|
||||
if self._global_container_stack:
|
||||
variant = self._global_container_stack.findContainer({"type": "variant"})
|
||||
if self._active_container_stack:
|
||||
variant = self._active_container_stack.findContainer({"type": "variant"})
|
||||
if variant:
|
||||
return variant.getName()
|
||||
|
||||
@ -406,8 +426,8 @@ class MachineManagerModel(QObject):
|
||||
|
||||
@pyqtProperty(str, notify = activeVariantChanged)
|
||||
def activeVariantId(self):
|
||||
if self._global_container_stack:
|
||||
variant = self._global_container_stack.findContainer({"type": "variant"})
|
||||
if self._active_container_stack:
|
||||
variant = self._active_container_stack.findContainer({"type": "variant"})
|
||||
if variant:
|
||||
return variant.getId()
|
||||
|
||||
@ -415,7 +435,7 @@ class MachineManagerModel(QObject):
|
||||
|
||||
@pyqtProperty(str, notify = globalContainerChanged)
|
||||
def activeDefinitionId(self):
|
||||
if self._global_container_stack:
|
||||
if self._active_container_stack:
|
||||
definition = self._global_container_stack.getBottom()
|
||||
if definition:
|
||||
return definition.id
|
||||
@ -449,15 +469,15 @@ class MachineManagerModel(QObject):
|
||||
|
||||
@pyqtProperty(bool, notify = globalContainerChanged)
|
||||
def hasMaterials(self):
|
||||
if self._global_container_stack:
|
||||
return bool(self._global_container_stack.getMetaDataEntry("has_materials", False))
|
||||
if self._active_container_stack:
|
||||
return bool(self._active_container_stack.getMetaDataEntry("has_materials", False))
|
||||
|
||||
return False
|
||||
|
||||
@pyqtProperty(bool, notify = globalContainerChanged)
|
||||
def hasVariants(self):
|
||||
if self._global_container_stack:
|
||||
return bool(self._global_container_stack.getMetaDataEntry("has_variants", False))
|
||||
if self._active_container_stack:
|
||||
return bool(self._active_container_stack.getMetaDataEntry("has_variants", False))
|
||||
|
||||
return False
|
||||
|
||||
|
@ -35,6 +35,8 @@ Item {
|
||||
model: Cura.ExtrudersModel
|
||||
{
|
||||
id: extruders_model
|
||||
onRowsInserted: extruderSelector.visible = extruders_model.rowCount() > 1
|
||||
onModelReset: extruderSelector.visible = extruders_model.rowCount() > 1
|
||||
}
|
||||
visible: extruders_model.rowCount() > 1
|
||||
textRole: "name"
|
||||
|
@ -47,7 +47,7 @@ class PerObjectSettingsTool(Tool):
|
||||
# \return The active extruder of the currently selected object.
|
||||
def getSelectedActiveExtruder(self):
|
||||
selected_object = Selection.getSelectedObject(0)
|
||||
selected_object.callDecoration("getActiveExtruder")
|
||||
return selected_object.callDecoration("getActiveExtruder")
|
||||
|
||||
## Changes the active extruder of the currently selected object.
|
||||
#
|
||||
|
@ -1172,7 +1172,7 @@
|
||||
"speed_wall_x":
|
||||
{
|
||||
"label": "Inner Wall Speed",
|
||||
"description": "The speed at which all inner walls are printed Printing the inner wall faster than the outer wall will reduce printing time. It works well to set this in between the outer wall speed and the infill speed.",
|
||||
"description": "The speed at which all inner walls are printed. Printing the inner wall faster than the outer wall will reduce printing time. It works well to set this in between the outer wall speed and the infill speed.",
|
||||
"unit": "mm/s",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
@ -1310,6 +1310,381 @@
|
||||
"maximum_value_warning": "300",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
||||
|
||||
"acceleration_enabled": {
|
||||
"label": "Enable Acceleration Control",
|
||||
"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,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"acceleration_print": {
|
||||
"label": "Print Acceleration",
|
||||
"description": "The acceleration with which printing happens.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"enabled": "acceleration_enabled",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"acceleration_infill": {
|
||||
"label": "Infill Acceleration",
|
||||
"description": "The acceleration with which infill is printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "acceleration_enabled",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"acceleration_wall": {
|
||||
"label": "Wall Acceleration",
|
||||
"description": "The acceleration with which the walls are printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "acceleration_enabled",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"acceleration_wall_0": {
|
||||
"label": "Outer Wall Acceleration",
|
||||
"description": "The acceleration with which the outermost walls are printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_wall",
|
||||
"enabled": "acceleration_enabled",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"acceleration_wall_x": {
|
||||
"label": "Inner Wall Acceleration",
|
||||
"description": "The acceleration with which all inner walls are printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_wall",
|
||||
"enabled": "acceleration_enabled",
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"acceleration_topbottom": {
|
||||
"label": "Top/Bottom Acceleration",
|
||||
"description": "The acceleration with which top/bottom layers are printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "acceleration_enabled",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"acceleration_support": {
|
||||
"label": "Support Acceleration",
|
||||
"description": "The acceleration with which the support structure is printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "acceleration_enabled and support_roof_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children": {
|
||||
"acceleration_support_infill": {
|
||||
"label": "Support Infill Acceleration",
|
||||
"description": "The acceleration with which the infill of support is printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_support",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled and support_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"acceleration_support_roof": {
|
||||
"label": "Support Roof Acceleration",
|
||||
"description": "The acceleration with which the roofs of support are printed. Printing the support roof at lower accelerations can improve overhang quality.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_support",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled and support_roof_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"acceleration_prime_tower": {
|
||||
"label": "Prime Tower Acceleration",
|
||||
"description": "The acceleration with which the prime tower is printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"enabled": "prime_tower_enable and acceleration_enabled",
|
||||
"settable_per_mesh": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"acceleration_travel": {
|
||||
"label": "Travel Acceleration",
|
||||
"description": "The acceleration with which travel moves are made.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 5000,
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"value": "acceleration_print if magic_spiralize else 5000",
|
||||
"enabled": "acceleration_enabled",
|
||||
"settable_per_mesh": false
|
||||
},
|
||||
"acceleration_layer_0": {
|
||||
"label": "Initial Layer Acceleration",
|
||||
"description": "The acceleration for the initial layer.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"acceleration_skirt": {
|
||||
"label": "Skirt Acceleration",
|
||||
"description": "The acceleration with which the skirt and brim are printed. Normally this is done with the initial layer acceleration, but sometimes you might want to print the skirt at a different acceleration.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_layer_0",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "acceleration_enabled",
|
||||
"settable_per_mesh": false
|
||||
},
|
||||
|
||||
|
||||
|
||||
"jerk_enabled": {
|
||||
"label": "Enable Jerk Control",
|
||||
"description": "Enables adjusting the jerk of print head when the X or Y axis halts or starts to move. Increasing the jerk can reduce printing time at the cost of print quality.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"jerk_print": {
|
||||
"label": "Print Jerk",
|
||||
"description": "The maximal allowed jerk of the print head when starting to move or when changing direction.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"enabled": "jerk_enabled",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"jerk_infill": {
|
||||
"label": "Infill Jerk",
|
||||
"description": "The jerk with which infill is printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "jerk_enabled",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"jerk_wall": {
|
||||
"label": "Wall Jerk",
|
||||
"description": "The jerk with which the walls are printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "jerk_enabled",
|
||||
"settable_per_mesh": true,
|
||||
"children": {
|
||||
"jerk_wall_0": {
|
||||
"label": "Outer Wall Jerk",
|
||||
"description": "The jerk with which the outermost walls are printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_wall",
|
||||
"enabled": "jerk_enabled",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"jerk_wall_x": {
|
||||
"label": "Inner Wall Jerk",
|
||||
"description": "The jerk with which all inner walls are printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_wall",
|
||||
"enabled": "jerk_enabled",
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"jerk_topbottom": {
|
||||
"label": "Top/Bottom Jerk",
|
||||
"description": "The jerk with which top/bottom layers are printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "jerk_enabled",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"jerk_support": {
|
||||
"label": "Support Jerk",
|
||||
"description": "The jerk with which the support structure is printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "jerk_enabled and support_roof_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children": {
|
||||
"jerk_support_infill": {
|
||||
"label": "Support Infill Jerk",
|
||||
"description": "The jerk with which the infill of support is printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"default_value": 20,
|
||||
"value": "jerk_support",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "jerk_enabled and support_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"jerk_support_roof": {
|
||||
"label": "Support Roof Jerk",
|
||||
"description": "The jerk with which the roofs of support are printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"default_value": 20,
|
||||
"value": "jerk_support",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "jerk_enabled and support_roof_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"jerk_prime_tower": {
|
||||
"label": "Prime Tower Jerk",
|
||||
"description": "The jerk with which the prime tower is printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"enabled": "prime_tower_enable and jerk_enabled",
|
||||
"settable_per_mesh": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"jerk_travel": {
|
||||
"label": "Travel Jerk",
|
||||
"description": "The jerk with which travel moves are made.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"default_value": 30,
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"value": "jerk_print if magic_spiralize else 30",
|
||||
"enabled": "jerk_enabled",
|
||||
"settable_per_mesh": false
|
||||
},
|
||||
"jerk_layer_0": {
|
||||
"label": "Initial Layer Jerk",
|
||||
"description": "The print jerk for the initial layer.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"default_value": 20,
|
||||
"value": "jerk_print",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "jerk_enabled",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"jerk_skirt": {
|
||||
"label": "Skirt Jerk",
|
||||
"description": "The jerk with which the skirt and brim are printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"default_value": 20,
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"value": "jerk_layer_0",
|
||||
"enabled": "jerk_enabled",
|
||||
"settable_per_mesh": false
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -2116,8 +2491,8 @@
|
||||
{
|
||||
"raft_surface_speed":
|
||||
{
|
||||
"label": "Raft Surface Print Speed",
|
||||
"description": "The speed at which the surface raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines.",
|
||||
"label": "Raft Top Print Speed",
|
||||
"description": "The speed at which the top raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines.",
|
||||
"unit": "mm/s",
|
||||
"type": "float",
|
||||
"default_value": 30,
|
||||
@ -2131,8 +2506,8 @@
|
||||
},
|
||||
"raft_interface_speed":
|
||||
{
|
||||
"label": "Raft Interface Print Speed",
|
||||
"description": "The speed at which the interface raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
|
||||
"label": "Raft Middle Print Speed",
|
||||
"description": "The speed at which the middle raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
|
||||
"unit": "mm/s",
|
||||
"type": "float",
|
||||
"default_value": 15,
|
||||
@ -2161,8 +2536,123 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"raft_fan_speed":
|
||||
{
|
||||
|
||||
|
||||
|
||||
"raft_acceleration": {
|
||||
"label": "Raft Print Acceleration",
|
||||
"description": "The acceleration with which the raft is printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"value": "acceleration_print",
|
||||
"enabled": "adhesion_type == \"raft\" and acceleration_enabled",
|
||||
"settable_per_mesh": false,
|
||||
"children": {
|
||||
"raft_surface_acceleration": {
|
||||
"label": "Raft Top Print Acceleration",
|
||||
"description": "The acceleration with which the top raft layers are printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"value": "raft_acceleration",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "adhesion_type == \"raft\" and acceleration_enabled",
|
||||
"settable_per_mesh": false
|
||||
},
|
||||
"raft_interface_acceleration": {
|
||||
"label": "Raft Middle Print Acceleration",
|
||||
"description": "The acceleration with which the middle raft layer is printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"value": "raft_acceleration",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "adhesion_type == \"raft\" and acceleration_enabled",
|
||||
"settable_per_mesh": false
|
||||
},
|
||||
"raft_base_acceleration": {
|
||||
"label": "Raft Base Print Acceleration",
|
||||
"description": "The acceleration with which the base raft layer is printed.",
|
||||
"unit": "mm/s²",
|
||||
"type": "float",
|
||||
"default_value": 3000,
|
||||
"value": "raft_acceleration",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "10000",
|
||||
"enabled": "adhesion_type == \"raft\" and acceleration_enabled",
|
||||
"settable_per_mesh": false
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
|
||||
"raft_jerk": {
|
||||
"label": "Raft Print Jerk",
|
||||
"description": "The jerk with which the raft is printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"default_value": 20,
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"value": "jerk_print",
|
||||
"enabled": "adhesion_type == \"raft\" and jerk_enabled",
|
||||
"settable_per_mesh": false,
|
||||
"children": {
|
||||
"raft_surface_jerk": {
|
||||
"label": "Raft Top Print Jerk",
|
||||
"description": "The jerk with which the top raft layers are printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"default_value": 20,
|
||||
"value": "raft_jerk",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "100",
|
||||
"enabled": "adhesion_type == \"raft\" and jerk_enabled",
|
||||
"settable_per_mesh": false
|
||||
},
|
||||
"raft_interface_jerk": {
|
||||
"label": "Raft Middle Print Jerk",
|
||||
"description": "The jerk with which the middle raft layer is printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"default_value": 20,
|
||||
"value": "raft_jerk",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "adhesion_type == \"raft\" and jerk_enabled",
|
||||
"settable_per_mesh": false
|
||||
},
|
||||
"raft_base_jerk": {
|
||||
"label": "Raft Base Print Jerk",
|
||||
"description": "The jerk with which the base raft layer is printed.",
|
||||
"unit": "mm/s³",
|
||||
"type": "float",
|
||||
"default_value": 20,
|
||||
"value": "raft_jerk",
|
||||
"minimum_value": "0.1",
|
||||
"minimum_value_warning": "5",
|
||||
"maximum_value_warning": "50",
|
||||
"enabled": "adhesion_type == \"raft\" and jerk_enabled",
|
||||
"settable_per_mesh": false
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
"raft_fan_speed": {
|
||||
"label": "Raft Fan Speed",
|
||||
"description": "The fan speed for the raft.",
|
||||
"unit": "%",
|
||||
@ -2177,8 +2667,8 @@
|
||||
{
|
||||
"raft_surface_fan_speed":
|
||||
{
|
||||
"label": "Raft Surface Fan Speed",
|
||||
"description": "The fan speed for the surface raft layers.",
|
||||
"label": "Raft Top Fan Speed",
|
||||
"description": "The fan speed for the top raft layers.",
|
||||
"unit": "%",
|
||||
"type": "float",
|
||||
"minimum_value": "0",
|
||||
@ -2191,8 +2681,8 @@
|
||||
},
|
||||
"raft_interface_fan_speed":
|
||||
{
|
||||
"label": "Raft Interface Fan Speed",
|
||||
"description": "The fan speed for the interface raft layer.",
|
||||
"label": "Raft Middle Fan Speed",
|
||||
"description": "The fan speed for the middle raft layer.",
|
||||
"unit": "%",
|
||||
"type": "float",
|
||||
"minimum_value": "0",
|
||||
@ -2221,95 +2711,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"meshfix":
|
||||
{
|
||||
"label": "Mesh Fixes",
|
||||
"type": "category",
|
||||
"icon": "category_fixes",
|
||||
"description": "category_fixes",
|
||||
"children":
|
||||
{
|
||||
"meshfix_union_all":
|
||||
{
|
||||
"label": "Union Overlapping Volumes",
|
||||
"description": "Ignore the internal geometry arising from overlapping volumes and print the volumes as one. This may cause internal cavities to disappear.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"meshfix_union_all_remove_holes":
|
||||
{
|
||||
"label": "Remove All Holes",
|
||||
"description": "Remove the holes in each layer and keep only the outside shape. This will ignore any invisible internal geometry. However, it also ignores layer holes which can be viewed from above or below.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"meshfix_extensive_stitching":
|
||||
{
|
||||
"label": "Extensive Stitching",
|
||||
"description": "Extensive stitching tries to stitch up open holes in the mesh by closing the hole with touching polygons. This option can introduce a lot of processing time.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"meshfix_keep_open_polygons":
|
||||
{
|
||||
"label": "Keep Disconnected Faces",
|
||||
"description": "Normally Cura tries to stitch up small holes in the mesh and remove parts of a layer with big holes. Enabling this option keeps those parts which cannot be stitched. This option should be used as a last resort option when everything else fails to produce proper GCode.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"blackmagic":
|
||||
{
|
||||
"label": "Special Modes",
|
||||
"type": "category",
|
||||
"icon": "category_blackmagic",
|
||||
"description": "category_blackmagic",
|
||||
"children":
|
||||
{
|
||||
"print_sequence":
|
||||
{
|
||||
"label": "Print Sequence",
|
||||
"description": "Whether to print all objects one layer at a time or to wait for one object to finish, before moving on to the next. One at a time mode is only possible if all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes.",
|
||||
"type": "enum",
|
||||
"options":
|
||||
{
|
||||
"all_at_once": "All at Once",
|
||||
"one_at_a_time": "One at a Time"
|
||||
},
|
||||
"default_value": "all_at_once",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
},
|
||||
"magic_mesh_surface_mode":
|
||||
{
|
||||
"label": "Surface Mode",
|
||||
"description": "Treat the model as a surface only, a volume, or volumes with loose surfaces. The normal print mode only prints enclosed volumes. \"Surface\" prints a single wall tracing the mesh surface with no infill and no top/bottom skin. \"Both\" prints enclosed volumes like normal and any remaining polygons as surfaces.",
|
||||
"type": "enum",
|
||||
"options":
|
||||
{
|
||||
"normal": "Normal",
|
||||
"surface": "Surface",
|
||||
"both": "Both"
|
||||
},
|
||||
"default_value": "normal",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"magic_spiralize":
|
||||
{
|
||||
"label": "Spiralize Outer Contour",
|
||||
"description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid object into a single walled print with a solid bottom. This feature used to be called Joris in older versions.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"dual":
|
||||
{
|
||||
"label": "Dual Extrusion",
|
||||
@ -2500,6 +2901,95 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"meshfix":
|
||||
{
|
||||
"label": "Mesh Fixes",
|
||||
"type": "category",
|
||||
"icon": "category_fixes",
|
||||
"description": "category_fixes",
|
||||
"children":
|
||||
{
|
||||
"meshfix_union_all":
|
||||
{
|
||||
"label": "Union Overlapping Volumes",
|
||||
"description": "Ignore the internal geometry arising from overlapping volumes and print the volumes as one. This may cause internal cavities to disappear.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"meshfix_union_all_remove_holes":
|
||||
{
|
||||
"label": "Remove All Holes",
|
||||
"description": "Remove the holes in each layer and keep only the outside shape. This will ignore any invisible internal geometry. However, it also ignores layer holes which can be viewed from above or below.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"meshfix_extensive_stitching":
|
||||
{
|
||||
"label": "Extensive Stitching",
|
||||
"description": "Extensive stitching tries to stitch up open holes in the mesh by closing the hole with touching polygons. This option can introduce a lot of processing time.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"meshfix_keep_open_polygons":
|
||||
{
|
||||
"label": "Keep Disconnected Faces",
|
||||
"description": "Normally Cura tries to stitch up small holes in the mesh and remove parts of a layer with big holes. Enabling this option keeps those parts which cannot be stitched. This option should be used as a last resort option when everything else fails to produce proper GCode.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"blackmagic":
|
||||
{
|
||||
"label": "Special Modes",
|
||||
"type": "category",
|
||||
"icon": "category_blackmagic",
|
||||
"description": "category_blackmagic",
|
||||
"children":
|
||||
{
|
||||
"print_sequence":
|
||||
{
|
||||
"label": "Print Sequence",
|
||||
"description": "Whether to print all objects one layer at a time or to wait for one object to finish, before moving on to the next. One at a time mode is only possible if all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes.",
|
||||
"type": "enum",
|
||||
"options":
|
||||
{
|
||||
"all_at_once": "All at Once",
|
||||
"one_at_a_time": "One at a Time"
|
||||
},
|
||||
"default_value": "all_at_once",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
},
|
||||
"magic_mesh_surface_mode":
|
||||
{
|
||||
"label": "Surface Mode",
|
||||
"description": "Treat the model as a surface only, a volume, or volumes with loose surfaces. The normal print mode only prints enclosed volumes. \"Surface\" prints a single wall tracing the mesh surface with no infill and no top/bottom skin. \"Both\" prints enclosed volumes like normal and any remaining polygons as surfaces.",
|
||||
"type": "enum",
|
||||
"options":
|
||||
{
|
||||
"normal": "Normal",
|
||||
"surface": "Surface",
|
||||
"both": "Both"
|
||||
},
|
||||
"default_value": "normal",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"magic_spiralize":
|
||||
{
|
||||
"label": "Spiralize Outer Contour",
|
||||
"description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid object into a single walled print with a solid bottom. This feature used to be called Joris in older versions.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"experimental":
|
||||
{
|
||||
"label": "Experimental Modes",
|
||||
|
41
resources/definitions/printrbot_simple.def.json
Normal file
41
resources/definitions/printrbot_simple.def.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"id": "printrbot_simple",
|
||||
"version": 2,
|
||||
"name": "Printrbot Simple",
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Calvindog717",
|
||||
"manufacturer": "PrintrBot",
|
||||
"file_formats": "text/x-gcode"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_heated_bed": { "default_value": false },
|
||||
"machine_width": { "default_value": 150 },
|
||||
"machine_height": { "default_value": 150 },
|
||||
"machine_depth": { "default_value": 140 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_nozzle_size": { "default_value": 0.3 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"machine_nozzle_heat_up_speed": { "default_value": 2 },
|
||||
"machine_nozzle_cool_down_speed": { "default_value": 2 },
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
[ 55, -20 ],
|
||||
[ 55, 99999 ],
|
||||
[ -49, 99999 ],
|
||||
[ -49, -20 ]
|
||||
]
|
||||
},
|
||||
"gantry_height": { "default_value": 99999 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG29 ; auto bed-levelling\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..."
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"id": "ultimaker_base",
|
||||
"version": 2,
|
||||
"visible": false,
|
||||
"name": "Ultimaker",
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Ultimaker"
|
||||
"manufacturer": "Ultimaker",
|
||||
"visible": false
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@
|
||||
"version": 2,
|
||||
"name": "Ultimaker 2 Extended+",
|
||||
"inherits": "ultimaker2_plus",
|
||||
"visible": false,
|
||||
"metadata": {
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Ultimaker",
|
||||
|
@ -3,7 +3,6 @@
|
||||
"version": 2,
|
||||
"name": "Ultimaker 2+",
|
||||
"inherits": "ultimaker2",
|
||||
"visible": "false",
|
||||
"metadata": {
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Ultimaker",
|
||||
|
Loading…
x
Reference in New Issue
Block a user