mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-13 03:09:04 +08:00
Merge branch 'master' of github.com:Ultimaker/Cura
This commit is contained in:
commit
b100050ee2
@ -294,6 +294,7 @@ class CuraApplication(QtApplication):
|
|||||||
z_seam_y
|
z_seam_y
|
||||||
infill
|
infill
|
||||||
infill_sparse_density
|
infill_sparse_density
|
||||||
|
gradual_infill_steps
|
||||||
material
|
material
|
||||||
material_print_temperature
|
material_print_temperature
|
||||||
material_bed_temperature
|
material_bed_temperature
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2016 Ultimaker B.V.
|
# Copyright (c) 2017 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@ -41,6 +41,14 @@ class CuraContainerRegistry(ContainerRegistry):
|
|||||||
if type(container) == ContainerStack:
|
if type(container) == ContainerStack:
|
||||||
container = self._convertContainerStack(container)
|
container = self._convertContainerStack(container)
|
||||||
|
|
||||||
|
if isinstance(container, InstanceContainer) and type(container) != type(self.getEmptyInstanceContainer()):
|
||||||
|
#Check against setting version of the definition.
|
||||||
|
required_setting_version = int(container.getDefinition().getMetaDataEntry("setting_version"))
|
||||||
|
actual_setting_version = int(container.getMetaDataEntry("setting_version", default = 0))
|
||||||
|
if required_setting_version != actual_setting_version:
|
||||||
|
Logger.log("w", "Instance container {container_id} is outdated. Its setting version is {actual_setting_version} but it should be {required_setting_version}.".format(container_id = container.getId(), actual_setting_version = actual_setting_version, required_setting_version = required_setting_version))
|
||||||
|
return #Don't add.
|
||||||
|
|
||||||
super().addContainer(container)
|
super().addContainer(container)
|
||||||
|
|
||||||
## Create a name that is not empty and unique
|
## Create a name that is not empty and unique
|
||||||
|
@ -254,6 +254,14 @@ class CuraContainerStack(ContainerStack):
|
|||||||
def definition(self) -> DefinitionContainer:
|
def definition(self) -> DefinitionContainer:
|
||||||
return self._containers[_ContainerIndexes.Definition]
|
return self._containers[_ContainerIndexes.Definition]
|
||||||
|
|
||||||
|
@override(ContainerStack)
|
||||||
|
def getBottom(self) -> "DefinitionContainer":
|
||||||
|
return self.definition
|
||||||
|
|
||||||
|
@override(ContainerStack)
|
||||||
|
def getTop(self) -> "InstanceContainer":
|
||||||
|
return self.userChanges
|
||||||
|
|
||||||
## Check whether the specified setting has a 'user' value.
|
## Check whether the specified setting has a 'user' value.
|
||||||
#
|
#
|
||||||
# A user value here is defined as the setting having a value in either
|
# A user value here is defined as the setting having a value in either
|
||||||
|
@ -11,14 +11,11 @@ from UM.Application import Application
|
|||||||
from UM.Preferences import Preferences
|
from UM.Preferences import Preferences
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.Message import Message
|
from UM.Message import Message
|
||||||
from UM.Decorators import deprecated
|
|
||||||
|
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
from UM.Settings.ContainerStack import ContainerStack
|
from UM.Settings.ContainerStack import ContainerStack
|
||||||
from UM.Settings.InstanceContainer import InstanceContainer
|
from UM.Settings.InstanceContainer import InstanceContainer
|
||||||
from UM.Settings.SettingDefinition import SettingDefinition
|
|
||||||
from UM.Settings.SettingFunction import SettingFunction
|
from UM.Settings.SettingFunction import SettingFunction
|
||||||
from UM.Settings.Validator import ValidatorState
|
|
||||||
from UM.Signal import postponeSignals
|
from UM.Signal import postponeSignals
|
||||||
import UM.FlameProfiler
|
import UM.FlameProfiler
|
||||||
|
|
||||||
@ -36,15 +33,18 @@ from typing import TYPE_CHECKING, Optional
|
|||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from UM.Settings.DefinitionContainer import DefinitionContainer
|
from UM.Settings.DefinitionContainer import DefinitionContainer
|
||||||
|
from cura.Settings.GlobalStack import GlobalStack
|
||||||
|
from cura.Settings.CuraContainerStack import CuraContainerStack
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
class MachineManager(QObject):
|
class MachineManager(QObject):
|
||||||
def __init__(self, parent = None):
|
def __init__(self, parent = None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
|
||||||
self._active_container_stack = None # type: ContainerStack
|
self._active_container_stack = None # type: CuraContainerStack
|
||||||
self._global_container_stack = None # type: ContainerStack
|
self._global_container_stack = None # type: GlobalStack
|
||||||
|
|
||||||
self._error_check_timer = QTimer()
|
self._error_check_timer = QTimer()
|
||||||
self._error_check_timer.setInterval(250)
|
self._error_check_timer.setInterval(250)
|
||||||
@ -105,8 +105,6 @@ class MachineManager(QObject):
|
|||||||
self._material_incompatible_message = Message(catalog.i18nc("@info:status",
|
self._material_incompatible_message = Message(catalog.i18nc("@info:status",
|
||||||
"The selected material is incompatible with the selected machine or configuration."))
|
"The selected material is incompatible with the selected machine or configuration."))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value)
|
globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value)
|
||||||
activeMaterialChanged = pyqtSignal()
|
activeMaterialChanged = pyqtSignal()
|
||||||
activeVariantChanged = pyqtSignal()
|
activeVariantChanged = pyqtSignal()
|
||||||
@ -331,7 +329,7 @@ class MachineManager(QObject):
|
|||||||
def _onInstanceContainersChanged(self, container):
|
def _onInstanceContainersChanged(self, container):
|
||||||
self._instance_container_timer.start()
|
self._instance_container_timer.start()
|
||||||
|
|
||||||
def _onPropertyChanged(self, key, property_name):
|
def _onPropertyChanged(self, key: str, property_name: str):
|
||||||
if property_name == "value":
|
if property_name == "value":
|
||||||
# Notify UI items, such as the "changed" star in profile pull down menu.
|
# Notify UI items, such as the "changed" star in profile pull down menu.
|
||||||
self.activeStackValueChanged.emit()
|
self.activeStackValueChanged.emit()
|
||||||
@ -415,7 +413,7 @@ class MachineManager(QObject):
|
|||||||
## Delete a user setting from the global stack and all extruder stacks.
|
## Delete a user setting from the global stack and all extruder stacks.
|
||||||
# \param key \type{str} the name of the key to delete
|
# \param key \type{str} the name of the key to delete
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def clearUserSettingAllCurrentStacks(self, key):
|
def clearUserSettingAllCurrentStacks(self, key: str):
|
||||||
if not self._global_container_stack:
|
if not self._global_container_stack:
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -571,7 +569,7 @@ class MachineManager(QObject):
|
|||||||
# \return The layer height of the currently active quality profile. If
|
# \return The layer height of the currently active quality profile. If
|
||||||
# there is no quality profile, this returns 0.
|
# there is no quality profile, this returns 0.
|
||||||
@pyqtProperty(float, notify=activeQualityChanged)
|
@pyqtProperty(float, notify=activeQualityChanged)
|
||||||
def activeQualityLayerHeight(self):
|
def activeQualityLayerHeight(self) -> float:
|
||||||
if not self._global_container_stack:
|
if not self._global_container_stack:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@ -588,7 +586,7 @@ class MachineManager(QObject):
|
|||||||
value = value(self._global_container_stack)
|
value = value(self._global_container_stack)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
return 0 #No quality profile.
|
return 0 # No quality profile.
|
||||||
|
|
||||||
## Get the Material ID associated with the currently active material
|
## Get the Material ID associated with the currently active material
|
||||||
# \returns MaterialID (string) if found, empty string otherwise
|
# \returns MaterialID (string) if found, empty string otherwise
|
||||||
@ -610,7 +608,7 @@ class MachineManager(QObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(str, notify=activeQualityChanged)
|
@pyqtProperty(str, notify=activeQualityChanged)
|
||||||
def activeQualityName(self):
|
def activeQualityName(self) -> str:
|
||||||
if self._active_container_stack and self._global_container_stack:
|
if self._active_container_stack and self._global_container_stack:
|
||||||
quality = self._global_container_stack.qualityChanges
|
quality = self._global_container_stack.qualityChanges
|
||||||
if quality and not isinstance(quality, type(self._empty_quality_changes_container)):
|
if quality and not isinstance(quality, type(self._empty_quality_changes_container)):
|
||||||
@ -621,7 +619,7 @@ class MachineManager(QObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(str, notify=activeQualityChanged)
|
@pyqtProperty(str, notify=activeQualityChanged)
|
||||||
def activeQualityId(self):
|
def activeQualityId(self) -> str:
|
||||||
if self._active_container_stack:
|
if self._active_container_stack:
|
||||||
quality = self._active_container_stack.qualityChanges
|
quality = self._active_container_stack.qualityChanges
|
||||||
if quality and not isinstance(quality, type(self._empty_quality_changes_container)):
|
if quality and not isinstance(quality, type(self._empty_quality_changes_container)):
|
||||||
@ -632,7 +630,7 @@ class MachineManager(QObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(str, notify=activeQualityChanged)
|
@pyqtProperty(str, notify=activeQualityChanged)
|
||||||
def globalQualityId(self):
|
def globalQualityId(self) -> str:
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
quality = self._global_container_stack.qualityChanges
|
quality = self._global_container_stack.qualityChanges
|
||||||
if quality and not isinstance(quality, type(self._empty_quality_changes_container)):
|
if quality and not isinstance(quality, type(self._empty_quality_changes_container)):
|
||||||
@ -643,7 +641,7 @@ class MachineManager(QObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(str, notify = activeQualityChanged)
|
@pyqtProperty(str, notify = activeQualityChanged)
|
||||||
def activeQualityType(self):
|
def activeQualityType(self) -> str:
|
||||||
if self._active_container_stack:
|
if self._active_container_stack:
|
||||||
quality = self._active_container_stack.quality
|
quality = self._active_container_stack.quality
|
||||||
if quality:
|
if quality:
|
||||||
@ -651,7 +649,7 @@ class MachineManager(QObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(bool, notify = activeQualityChanged)
|
@pyqtProperty(bool, notify = activeQualityChanged)
|
||||||
def isActiveQualitySupported(self):
|
def isActiveQualitySupported(self) -> bool:
|
||||||
if self._active_container_stack:
|
if self._active_container_stack:
|
||||||
quality = self._active_container_stack.quality
|
quality = self._active_container_stack.quality
|
||||||
if quality:
|
if quality:
|
||||||
@ -665,7 +663,7 @@ class MachineManager(QObject):
|
|||||||
# \todo Ideally, this method would be named activeQualityId(), and the other one
|
# \todo Ideally, this method would be named activeQualityId(), and the other one
|
||||||
# would be named something like activeQualityOrQualityChanges() for consistency
|
# would be named something like activeQualityOrQualityChanges() for consistency
|
||||||
@pyqtProperty(str, notify = activeQualityChanged)
|
@pyqtProperty(str, notify = activeQualityChanged)
|
||||||
def activeQualityContainerId(self):
|
def activeQualityContainerId(self) -> str:
|
||||||
# We're using the active stack instead of the global stack in case the list of qualities differs per extruder
|
# We're using the active stack instead of the global stack in case the list of qualities differs per extruder
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
quality = self._active_container_stack.quality
|
quality = self._active_container_stack.quality
|
||||||
@ -674,7 +672,7 @@ class MachineManager(QObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(str, notify = activeQualityChanged)
|
@pyqtProperty(str, notify = activeQualityChanged)
|
||||||
def activeQualityChangesId(self):
|
def activeQualityChangesId(self) -> str:
|
||||||
if self._active_container_stack:
|
if self._active_container_stack:
|
||||||
changes = self._active_container_stack.qualityChanges
|
changes = self._active_container_stack.qualityChanges
|
||||||
if changes and changes.getId() != "empty":
|
if changes and changes.getId() != "empty":
|
||||||
@ -691,7 +689,7 @@ class MachineManager(QObject):
|
|||||||
|
|
||||||
## Copy the value of the setting of the current extruder to all other extruders as well as the global container.
|
## Copy the value of the setting of the current extruder to all other extruders as well as the global container.
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def copyValueToExtruders(self, key):
|
def copyValueToExtruders(self, key: str):
|
||||||
if not self._active_container_stack or self._global_container_stack.getProperty("machine_extruder_count", "value") <= 1:
|
if not self._active_container_stack or self._global_container_stack.getProperty("machine_extruder_count", "value") <= 1:
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -705,7 +703,7 @@ class MachineManager(QObject):
|
|||||||
## Set the active material by switching out a container
|
## Set the active material by switching out a container
|
||||||
# Depending on from/to material+current variant, a quality profile is chosen and set.
|
# Depending on from/to material+current variant, a quality profile is chosen and set.
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def setActiveMaterial(self, material_id):
|
def setActiveMaterial(self, material_id: str):
|
||||||
with postponeSignals(*self._getContainerChangedSignals(), compress = True):
|
with postponeSignals(*self._getContainerChangedSignals(), compress = True):
|
||||||
containers = ContainerRegistry.getInstance().findInstanceContainers(id = material_id)
|
containers = ContainerRegistry.getInstance().findInstanceContainers(id = material_id)
|
||||||
if not containers or not self._active_container_stack:
|
if not containers or not self._active_container_stack:
|
||||||
@ -770,7 +768,7 @@ class MachineManager(QObject):
|
|||||||
self.setActiveQuality(new_quality_id)
|
self.setActiveQuality(new_quality_id)
|
||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def setActiveVariant(self, variant_id):
|
def setActiveVariant(self, variant_id: str):
|
||||||
with postponeSignals(*self._getContainerChangedSignals(), compress = True):
|
with postponeSignals(*self._getContainerChangedSignals(), compress = True):
|
||||||
containers = ContainerRegistry.getInstance().findInstanceContainers(id = variant_id)
|
containers = ContainerRegistry.getInstance().findInstanceContainers(id = variant_id)
|
||||||
if not containers or not self._active_container_stack:
|
if not containers or not self._active_container_stack:
|
||||||
@ -793,7 +791,7 @@ class MachineManager(QObject):
|
|||||||
## set the active quality
|
## set the active quality
|
||||||
# \param quality_id The quality_id of either a quality or a quality_changes
|
# \param quality_id The quality_id of either a quality or a quality_changes
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def setActiveQuality(self, quality_id):
|
def setActiveQuality(self, quality_id: str):
|
||||||
with postponeSignals(*self._getContainerChangedSignals(), compress = True):
|
with postponeSignals(*self._getContainerChangedSignals(), compress = True):
|
||||||
self.blurSettings.emit()
|
self.blurSettings.emit()
|
||||||
|
|
||||||
@ -852,7 +850,7 @@ class MachineManager(QObject):
|
|||||||
# \param quality_name \type{str} the name of the quality.
|
# \param quality_name \type{str} the name of the quality.
|
||||||
# \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes".
|
# \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes".
|
||||||
@UM.FlameProfiler.profile
|
@UM.FlameProfiler.profile
|
||||||
def determineQualityAndQualityChangesForQualityType(self, quality_type):
|
def determineQualityAndQualityChangesForQualityType(self, quality_type: str):
|
||||||
quality_manager = QualityManager.getInstance()
|
quality_manager = QualityManager.getInstance()
|
||||||
result = []
|
result = []
|
||||||
empty_quality_changes = self._empty_quality_changes_container
|
empty_quality_changes = self._empty_quality_changes_container
|
||||||
@ -889,7 +887,7 @@ class MachineManager(QObject):
|
|||||||
#
|
#
|
||||||
# \param quality_changes_name \type{str} the name of the quality changes.
|
# \param quality_changes_name \type{str} the name of the quality changes.
|
||||||
# \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes".
|
# \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes".
|
||||||
def _determineQualityAndQualityChangesForQualityChanges(self, quality_changes_name):
|
def _determineQualityAndQualityChangesForQualityChanges(self, quality_changes_name: str):
|
||||||
result = []
|
result = []
|
||||||
quality_manager = QualityManager.getInstance()
|
quality_manager = QualityManager.getInstance()
|
||||||
|
|
||||||
@ -964,7 +962,7 @@ class MachineManager(QObject):
|
|||||||
Application.getInstance().discardOrKeepProfileChanges()
|
Application.getInstance().discardOrKeepProfileChanges()
|
||||||
|
|
||||||
@pyqtProperty(str, notify = activeVariantChanged)
|
@pyqtProperty(str, notify = activeVariantChanged)
|
||||||
def activeVariantName(self):
|
def activeVariantName(self) -> str:
|
||||||
if self._active_container_stack:
|
if self._active_container_stack:
|
||||||
variant = self._active_container_stack.variant
|
variant = self._active_container_stack.variant
|
||||||
if variant:
|
if variant:
|
||||||
@ -973,7 +971,7 @@ class MachineManager(QObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(str, notify = activeVariantChanged)
|
@pyqtProperty(str, notify = activeVariantChanged)
|
||||||
def activeVariantId(self):
|
def activeVariantId(self) -> str:
|
||||||
if self._active_container_stack:
|
if self._active_container_stack:
|
||||||
variant = self._active_container_stack.variant
|
variant = self._active_container_stack.variant
|
||||||
if variant:
|
if variant:
|
||||||
@ -982,7 +980,7 @@ class MachineManager(QObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(str, notify = globalContainerChanged)
|
@pyqtProperty(str, notify = globalContainerChanged)
|
||||||
def activeDefinitionId(self):
|
def activeDefinitionId(self) -> str:
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
definition = self._global_container_stack.getBottom()
|
definition = self._global_container_stack.getBottom()
|
||||||
if definition:
|
if definition:
|
||||||
@ -991,7 +989,7 @@ class MachineManager(QObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(str, notify=globalContainerChanged)
|
@pyqtProperty(str, notify=globalContainerChanged)
|
||||||
def activeDefinitionName(self):
|
def activeDefinitionName(self) -> str:
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
definition = self._global_container_stack.getBottom()
|
definition = self._global_container_stack.getBottom()
|
||||||
if definition:
|
if definition:
|
||||||
@ -1003,7 +1001,7 @@ class MachineManager(QObject):
|
|||||||
# \returns DefinitionID (string) if found, empty string otherwise
|
# \returns DefinitionID (string) if found, empty string otherwise
|
||||||
# \sa getQualityDefinitionId
|
# \sa getQualityDefinitionId
|
||||||
@pyqtProperty(str, notify = globalContainerChanged)
|
@pyqtProperty(str, notify = globalContainerChanged)
|
||||||
def activeQualityDefinitionId(self):
|
def activeQualityDefinitionId(self) -> str:
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
return self.getQualityDefinitionId(self._global_container_stack.getBottom())
|
return self.getQualityDefinitionId(self._global_container_stack.getBottom())
|
||||||
return ""
|
return ""
|
||||||
@ -1012,14 +1010,14 @@ class MachineManager(QObject):
|
|||||||
# This is normally the id of the definition itself, but machines can specify a different definition to inherit qualities from
|
# This is normally the id of the definition itself, but machines can specify a different definition to inherit qualities from
|
||||||
# \param definition (DefinitionContainer) machine definition
|
# \param definition (DefinitionContainer) machine definition
|
||||||
# \returns DefinitionID (string) if found, empty string otherwise
|
# \returns DefinitionID (string) if found, empty string otherwise
|
||||||
def getQualityDefinitionId(self, definition):
|
def getQualityDefinitionId(self, definition: "DefinitionContainer") -> str:
|
||||||
return QualityManager.getInstance().getParentMachineDefinition(definition).getId()
|
return QualityManager.getInstance().getParentMachineDefinition(definition).getId()
|
||||||
|
|
||||||
## Get the Variant ID to use to select quality profiles for the currently active variant
|
## Get the Variant ID to use to select quality profiles for the currently active variant
|
||||||
# \returns VariantID (string) if found, empty string otherwise
|
# \returns VariantID (string) if found, empty string otherwise
|
||||||
# \sa getQualityVariantId
|
# \sa getQualityVariantId
|
||||||
@pyqtProperty(str, notify = activeVariantChanged)
|
@pyqtProperty(str, notify = activeVariantChanged)
|
||||||
def activeQualityVariantId(self):
|
def activeQualityVariantId(self) -> str:
|
||||||
if self._active_container_stack:
|
if self._active_container_stack:
|
||||||
variant = self._active_container_stack.variant
|
variant = self._active_container_stack.variant
|
||||||
if variant:
|
if variant:
|
||||||
@ -1030,9 +1028,9 @@ class MachineManager(QObject):
|
|||||||
# This is normally the id of the variant itself, but machines can specify a different definition
|
# This is normally the id of the variant itself, but machines can specify a different definition
|
||||||
# to inherit qualities from, which has consequences for the variant to use as well
|
# to inherit qualities from, which has consequences for the variant to use as well
|
||||||
# \param definition (DefinitionContainer) machine definition
|
# \param definition (DefinitionContainer) machine definition
|
||||||
# \param variant (DefinitionContainer) variant definition
|
# \param variant (InstanceContainer) variant definition
|
||||||
# \returns VariantID (string) if found, empty string otherwise
|
# \returns VariantID (string) if found, empty string otherwise
|
||||||
def getQualityVariantId(self, definition, variant):
|
def getQualityVariantId(self, definition: "DefinitionContainer", variant: "InstanceContainer") -> str:
|
||||||
variant_id = variant.getId()
|
variant_id = variant.getId()
|
||||||
definition_id = definition.getId()
|
definition_id = definition.getId()
|
||||||
quality_definition_id = self.getQualityDefinitionId(definition)
|
quality_definition_id = self.getQualityDefinitionId(definition)
|
||||||
@ -1044,7 +1042,7 @@ class MachineManager(QObject):
|
|||||||
## Gets how the active definition calls variants
|
## Gets how the active definition calls variants
|
||||||
# Caveat: per-definition-variant-title is currently not translated (though the fallback is)
|
# Caveat: per-definition-variant-title is currently not translated (though the fallback is)
|
||||||
@pyqtProperty(str, notify = globalContainerChanged)
|
@pyqtProperty(str, notify = globalContainerChanged)
|
||||||
def activeDefinitionVariantsName(self):
|
def activeDefinitionVariantsName(self) -> str:
|
||||||
fallback_title = catalog.i18nc("@label", "Nozzle")
|
fallback_title = catalog.i18nc("@label", "Nozzle")
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
return self._global_container_stack.getBottom().getMetaDataEntry("variants_name", fallback_title)
|
return self._global_container_stack.getBottom().getMetaDataEntry("variants_name", fallback_title)
|
||||||
@ -1052,7 +1050,7 @@ class MachineManager(QObject):
|
|||||||
return fallback_title
|
return fallback_title
|
||||||
|
|
||||||
@pyqtSlot(str, str)
|
@pyqtSlot(str, str)
|
||||||
def renameMachine(self, machine_id, new_name):
|
def renameMachine(self, machine_id: str, new_name: str):
|
||||||
containers = ContainerRegistry.getInstance().findContainerStacks(id = machine_id)
|
containers = ContainerRegistry.getInstance().findContainerStacks(id = machine_id)
|
||||||
if containers:
|
if containers:
|
||||||
new_name = self._createUniqueName("machine", containers[0].getName(), new_name, containers[0].getBottom().getName())
|
new_name = self._createUniqueName("machine", containers[0].getName(), new_name, containers[0].getBottom().getName())
|
||||||
@ -1060,7 +1058,7 @@ class MachineManager(QObject):
|
|||||||
self.globalContainerChanged.emit()
|
self.globalContainerChanged.emit()
|
||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def removeMachine(self, machine_id):
|
def removeMachine(self, machine_id: str):
|
||||||
# If the machine that is being removed is the currently active machine, set another machine as the active machine.
|
# If the machine that is being removed is the currently active machine, set another machine as the active machine.
|
||||||
activate_new_machine = (self._global_container_stack and self._global_container_stack.getId() == machine_id)
|
activate_new_machine = (self._global_container_stack and self._global_container_stack.getId() == machine_id)
|
||||||
|
|
||||||
@ -1078,14 +1076,14 @@ class MachineManager(QObject):
|
|||||||
|
|
||||||
|
|
||||||
@pyqtProperty(bool, notify = globalContainerChanged)
|
@pyqtProperty(bool, notify = globalContainerChanged)
|
||||||
def hasMaterials(self):
|
def hasMaterials(self) -> bool:
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
return bool(self._global_container_stack.getMetaDataEntry("has_materials", False))
|
return bool(self._global_container_stack.getMetaDataEntry("has_materials", False))
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@pyqtProperty(bool, notify = globalContainerChanged)
|
@pyqtProperty(bool, notify = globalContainerChanged)
|
||||||
def hasVariants(self):
|
def hasVariants(self) -> bool:
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
return bool(self._global_container_stack.getMetaDataEntry("has_variants", False))
|
return bool(self._global_container_stack.getMetaDataEntry("has_variants", False))
|
||||||
|
|
||||||
@ -1094,7 +1092,7 @@ class MachineManager(QObject):
|
|||||||
## Property to indicate if a machine has "specialized" material profiles.
|
## Property to indicate if a machine has "specialized" material profiles.
|
||||||
# Some machines have their own material profiles that "override" the default catch all profiles.
|
# Some machines have their own material profiles that "override" the default catch all profiles.
|
||||||
@pyqtProperty(bool, notify = globalContainerChanged)
|
@pyqtProperty(bool, notify = globalContainerChanged)
|
||||||
def filterMaterialsByMachine(self):
|
def filterMaterialsByMachine(self) -> bool:
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
return bool(self._global_container_stack.getMetaDataEntry("has_machine_materials", False))
|
return bool(self._global_container_stack.getMetaDataEntry("has_machine_materials", False))
|
||||||
|
|
||||||
@ -1103,7 +1101,7 @@ class MachineManager(QObject):
|
|||||||
## Property to indicate if a machine has "specialized" quality profiles.
|
## Property to indicate if a machine has "specialized" quality profiles.
|
||||||
# Some machines have their own quality profiles that "override" the default catch all profiles.
|
# Some machines have their own quality profiles that "override" the default catch all profiles.
|
||||||
@pyqtProperty(bool, notify = globalContainerChanged)
|
@pyqtProperty(bool, notify = globalContainerChanged)
|
||||||
def filterQualityByMachine(self):
|
def filterQualityByMachine(self) -> bool:
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
return bool(self._global_container_stack.getMetaDataEntry("has_machine_quality", False))
|
return bool(self._global_container_stack.getMetaDataEntry("has_machine_quality", False))
|
||||||
return False
|
return False
|
||||||
@ -1112,7 +1110,7 @@ class MachineManager(QObject):
|
|||||||
# \param machine_id string machine id to get the definition ID of
|
# \param machine_id string machine id to get the definition ID of
|
||||||
# \returns DefinitionID (string) if found, None otherwise
|
# \returns DefinitionID (string) if found, None otherwise
|
||||||
@pyqtSlot(str, result = str)
|
@pyqtSlot(str, result = str)
|
||||||
def getDefinitionByMachineId(self, machine_id):
|
def getDefinitionByMachineId(self, machine_id: str) -> str:
|
||||||
containers = ContainerRegistry.getInstance().findContainerStacks(id=machine_id)
|
containers = ContainerRegistry.getInstance().findContainerStacks(id=machine_id)
|
||||||
if containers:
|
if containers:
|
||||||
return containers[0].getBottom().getId()
|
return containers[0].getBottom().getId()
|
||||||
@ -1121,22 +1119,6 @@ class MachineManager(QObject):
|
|||||||
def createMachineManager(engine=None, script_engine=None):
|
def createMachineManager(engine=None, script_engine=None):
|
||||||
return MachineManager()
|
return MachineManager()
|
||||||
|
|
||||||
def _updateVariantContainer(self, definition: "DefinitionContainer"):
|
|
||||||
if not definition.getMetaDataEntry("has_variants"):
|
|
||||||
return self._empty_variant_container
|
|
||||||
machine_definition_id = Application.getInstance().getMachineManager().getQualityDefinitionId(definition)
|
|
||||||
containers = []
|
|
||||||
preferred_variant = definition.getMetaDataEntry("preferred_variant")
|
|
||||||
if preferred_variant:
|
|
||||||
containers = ContainerRegistry.getInstance().findInstanceContainers(type = "variant", definition = machine_definition_id, id = preferred_variant)
|
|
||||||
if not containers:
|
|
||||||
containers = ContainerRegistry.getInstance().findInstanceContainers(type = "variant", definition = machine_definition_id)
|
|
||||||
|
|
||||||
if containers:
|
|
||||||
return containers[0]
|
|
||||||
|
|
||||||
return self._empty_variant_container
|
|
||||||
|
|
||||||
def _updateMaterialContainer(self, definition: "DefinitionContainer", stack: "ContainerStack", variant_container: Optional["InstanceContainer"] = None, preferred_material_name: Optional[str] = None):
|
def _updateMaterialContainer(self, definition: "DefinitionContainer", stack: "ContainerStack", variant_container: Optional["InstanceContainer"] = None, preferred_material_name: Optional[str] = None):
|
||||||
if not definition.getMetaDataEntry("has_materials"):
|
if not definition.getMetaDataEntry("has_materials"):
|
||||||
return self._empty_material_container
|
return self._empty_material_container
|
||||||
@ -1174,110 +1156,6 @@ class MachineManager(QObject):
|
|||||||
Logger.log("w", "Unable to find a material container with provided criteria, returning an empty one instead.")
|
Logger.log("w", "Unable to find a material container with provided criteria, returning an empty one instead.")
|
||||||
return self._empty_material_container
|
return self._empty_material_container
|
||||||
|
|
||||||
def _updateQualityContainer(self, definition: "DefinitionContainer", variant_container: "ContainerStack", material_container = None, preferred_quality_name: Optional[str] = None):
|
|
||||||
container_registry = ContainerRegistry.getInstance()
|
|
||||||
search_criteria = { "type": "quality" }
|
|
||||||
|
|
||||||
if definition.getMetaDataEntry("has_machine_quality"):
|
|
||||||
search_criteria["definition"] = self.getQualityDefinitionId(definition)
|
|
||||||
|
|
||||||
if definition.getMetaDataEntry("has_materials") and material_container:
|
|
||||||
search_criteria["material"] = material_container.id
|
|
||||||
else:
|
|
||||||
search_criteria["definition"] = "fdmprinter"
|
|
||||||
|
|
||||||
if preferred_quality_name and preferred_quality_name != "empty":
|
|
||||||
search_criteria["name"] = preferred_quality_name
|
|
||||||
else:
|
|
||||||
preferred_quality = definition.getMetaDataEntry("preferred_quality")
|
|
||||||
if preferred_quality:
|
|
||||||
search_criteria["id"] = preferred_quality
|
|
||||||
|
|
||||||
containers = container_registry.findInstanceContainers(**search_criteria)
|
|
||||||
if containers:
|
|
||||||
return containers[0]
|
|
||||||
|
|
||||||
if "material" in search_criteria:
|
|
||||||
# First check if we can solve our material not found problem by checking if we can find quality containers
|
|
||||||
# that are assigned to the parents of this material profile.
|
|
||||||
try:
|
|
||||||
inherited_files = material_container.getInheritedFiles()
|
|
||||||
except AttributeError: # Material_container does not support inheritance.
|
|
||||||
inherited_files = []
|
|
||||||
|
|
||||||
if inherited_files:
|
|
||||||
for inherited_file in inherited_files:
|
|
||||||
# Extract the ID from the path we used to load the file.
|
|
||||||
search_criteria["material"] = os.path.basename(inherited_file).split(".")[0]
|
|
||||||
containers = container_registry.findInstanceContainers(**search_criteria)
|
|
||||||
if containers:
|
|
||||||
return containers[0]
|
|
||||||
# We still weren't able to find a quality for this specific material.
|
|
||||||
# Try to find qualities for a generic version of the material.
|
|
||||||
material_search_criteria = { "type": "material", "material": material_container.getMetaDataEntry("material"), "color_name": "Generic"}
|
|
||||||
if definition.getMetaDataEntry("has_machine_quality"):
|
|
||||||
if material_container:
|
|
||||||
material_search_criteria["definition"] = material_container.getDefinition().id
|
|
||||||
|
|
||||||
if definition.getMetaDataEntry("has_variants"):
|
|
||||||
material_search_criteria["variant"] = material_container.getMetaDataEntry("variant")
|
|
||||||
else:
|
|
||||||
material_search_criteria["definition"] = self.getQualityDefinitionId(definition)
|
|
||||||
|
|
||||||
if definition.getMetaDataEntry("has_variants") and variant_container:
|
|
||||||
material_search_criteria["variant"] = self.getQualityVariantId(definition, variant_container)
|
|
||||||
else:
|
|
||||||
material_search_criteria["definition"] = "fdmprinter"
|
|
||||||
material_containers = container_registry.findInstanceContainers(**material_search_criteria)
|
|
||||||
# Try all materials to see if there is a quality profile available.
|
|
||||||
for material_container in material_containers:
|
|
||||||
search_criteria["material"] = material_container.getId()
|
|
||||||
|
|
||||||
containers = container_registry.findInstanceContainers(**search_criteria)
|
|
||||||
if containers:
|
|
||||||
return containers[0]
|
|
||||||
|
|
||||||
if "name" in search_criteria or "id" in search_criteria:
|
|
||||||
# If a quality by this name can not be found, try a wider set of search criteria
|
|
||||||
search_criteria.pop("name", None)
|
|
||||||
search_criteria.pop("id", None)
|
|
||||||
|
|
||||||
containers = container_registry.findInstanceContainers(**search_criteria)
|
|
||||||
if containers:
|
|
||||||
return containers[0]
|
|
||||||
|
|
||||||
# Notify user that we were unable to find a matching quality
|
|
||||||
message = Message(catalog.i18nc("@info:status", "Unable to find a quality profile for this combination. Default settings will be used instead."))
|
|
||||||
message.show()
|
|
||||||
return self._empty_quality_container
|
|
||||||
|
|
||||||
## Finds a quality-changes container to use if any other container
|
|
||||||
# changes.
|
|
||||||
#
|
|
||||||
# \param quality_type The quality type to find a quality-changes for.
|
|
||||||
# \param preferred_quality_changes_name The name of the quality-changes to
|
|
||||||
# pick, if any such quality-changes profile is available.
|
|
||||||
def _updateQualityChangesContainer(self, quality_type, preferred_quality_changes_name = None):
|
|
||||||
container_registry = ContainerRegistry.getInstance() # Cache.
|
|
||||||
search_criteria = { "type": "quality_changes" }
|
|
||||||
|
|
||||||
search_criteria["quality"] = quality_type
|
|
||||||
if preferred_quality_changes_name:
|
|
||||||
search_criteria["name"] = preferred_quality_changes_name
|
|
||||||
|
|
||||||
# Try to search with the name in the criteria first, since we prefer to have the correct name.
|
|
||||||
containers = container_registry.findInstanceContainers(**search_criteria)
|
|
||||||
if containers: # Found one!
|
|
||||||
return containers[0]
|
|
||||||
|
|
||||||
if "name" in search_criteria:
|
|
||||||
del search_criteria["name"] # Not found, then drop the name requirement (if we had one) and search again.
|
|
||||||
containers = container_registry.findInstanceContainers(**search_criteria)
|
|
||||||
if containers:
|
|
||||||
return containers[0]
|
|
||||||
|
|
||||||
return self._empty_quality_changes_container # Didn't find anything with the required quality_type.
|
|
||||||
|
|
||||||
def _onMachineNameChanged(self):
|
def _onMachineNameChanged(self):
|
||||||
self.globalContainerChanged.emit()
|
self.globalContainerChanged.emit()
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2016 Ultimaker B.V.
|
# Copyright (c) 2017 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
import configparser #To get version numbers from config files.
|
import configparser #To get version numbers from config files.
|
||||||
@ -249,7 +249,9 @@ class VersionUpgrade21to22(VersionUpgrade):
|
|||||||
def getCfgVersion(self, serialised):
|
def getCfgVersion(self, serialised):
|
||||||
parser = configparser.ConfigParser(interpolation = None)
|
parser = configparser.ConfigParser(interpolation = None)
|
||||||
parser.read_string(serialised)
|
parser.read_string(serialised)
|
||||||
return int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
|
format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
|
||||||
|
setting_version = int(parser.get("metadata", "setting_version", fallback = 0))
|
||||||
|
return format_version * 1000000 + setting_version
|
||||||
|
|
||||||
## Gets the fallback quality to use for a specific machine-variant-material
|
## Gets the fallback quality to use for a specific machine-variant-material
|
||||||
# combination.
|
# combination.
|
||||||
|
@ -18,10 +18,10 @@ def getMetaData():
|
|||||||
"api": 3
|
"api": 3
|
||||||
},
|
},
|
||||||
"version_upgrade": {
|
"version_upgrade": {
|
||||||
# From To Upgrade function
|
# From To Upgrade function
|
||||||
("profile", 1): ("quality", 2, upgrade.upgradeProfile),
|
("profile", 1000000): ("quality", 2000000, upgrade.upgradeProfile),
|
||||||
("machine_instance", 1): ("machine_stack", 2, upgrade.upgradeMachineInstance),
|
("machine_instance", 1000000): ("machine_stack", 2000000, upgrade.upgradeMachineInstance),
|
||||||
("preferences", 2): ("preferences", 3, upgrade.upgradePreferences)
|
("preferences", 2000000): ("preferences", 3000000, upgrade.upgradePreferences)
|
||||||
},
|
},
|
||||||
"sources": {
|
"sources": {
|
||||||
"profile": {
|
"profile": {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2016 Ultimaker B.V.
|
# Copyright (c) 2017 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
import configparser #To get version numbers from config files.
|
import configparser #To get version numbers from config files.
|
||||||
@ -77,6 +77,7 @@ class VersionUpgrade22to24(VersionUpgrade):
|
|||||||
with open(variant_path, "r") as fhandle:
|
with open(variant_path, "r") as fhandle:
|
||||||
variant_config.read_file(fhandle)
|
variant_config.read_file(fhandle)
|
||||||
|
|
||||||
|
config_name = "Unknown Variant"
|
||||||
if variant_config.has_section("general") and variant_config.has_option("general", "name"):
|
if variant_config.has_section("general") and variant_config.has_option("general", "name"):
|
||||||
config_name = variant_config.get("general", "name")
|
config_name = variant_config.get("general", "name")
|
||||||
if config_name.endswith("_variant"):
|
if config_name.endswith("_variant"):
|
||||||
@ -144,4 +145,6 @@ class VersionUpgrade22to24(VersionUpgrade):
|
|||||||
def getCfgVersion(self, serialised):
|
def getCfgVersion(self, serialised):
|
||||||
parser = configparser.ConfigParser(interpolation = None)
|
parser = configparser.ConfigParser(interpolation = None)
|
||||||
parser.read_string(serialised)
|
parser.read_string(serialised)
|
||||||
return int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
|
format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
|
||||||
|
setting_version = int(parser.get("metadata", "setting_version", fallback = 0))
|
||||||
|
return format_version * 1000000 + setting_version
|
||||||
|
@ -18,10 +18,10 @@ def getMetaData():
|
|||||||
"api": 3
|
"api": 3
|
||||||
},
|
},
|
||||||
"version_upgrade": {
|
"version_upgrade": {
|
||||||
# From To Upgrade function
|
# From To Upgrade function
|
||||||
("machine_instance", 2): ("machine_stack", 3, upgrade.upgradeMachineInstance),
|
("machine_instance", 2000000): ("machine_stack", 3000000, upgrade.upgradeMachineInstance),
|
||||||
("extruder_train", 2): ("extruder_train", 3, upgrade.upgradeExtruderTrain),
|
("extruder_train", 2000000): ("extruder_train", 3000000, upgrade.upgradeExtruderTrain),
|
||||||
("preferences", 3): ("preferences", 4, upgrade.upgradePreferences)
|
("preferences", 3000000): ("preferences", 4000000, upgrade.upgradePreferences)
|
||||||
|
|
||||||
},
|
},
|
||||||
"sources": {
|
"sources": {
|
||||||
|
@ -7,7 +7,8 @@ import io #To serialise configparser output to a string.
|
|||||||
from UM.VersionUpgrade import VersionUpgrade
|
from UM.VersionUpgrade import VersionUpgrade
|
||||||
|
|
||||||
_removed_settings = { #Settings that were removed in 2.5.
|
_removed_settings = { #Settings that were removed in 2.5.
|
||||||
"start_layers_at_same_position"
|
"start_layers_at_same_position",
|
||||||
|
"sub_div_rad_mult"
|
||||||
}
|
}
|
||||||
|
|
||||||
_split_settings = { #These settings should be copied to all settings it was split into.
|
_split_settings = { #These settings should be copied to all settings it was split into.
|
||||||
@ -15,13 +16,13 @@ _split_settings = { #These settings should be copied to all settings it was spli
|
|||||||
}
|
}
|
||||||
|
|
||||||
## A collection of functions that convert the configuration of the user in Cura
|
## A collection of functions that convert the configuration of the user in Cura
|
||||||
# 2.4 to a configuration for Cura 2.5.
|
# 2.5 to a configuration for Cura 2.6.
|
||||||
#
|
#
|
||||||
# All of these methods are essentially stateless.
|
# All of these methods are essentially stateless.
|
||||||
class VersionUpgrade24to25(VersionUpgrade):
|
class VersionUpgrade25to26(VersionUpgrade):
|
||||||
## Gets the version number from a CFG file in Uranium's 2.4 format.
|
## Gets the version number from a CFG file in Uranium's 2.5 format.
|
||||||
#
|
#
|
||||||
# Since the format may change, this is implemented for the 2.4 format only
|
# Since the format may change, this is implemented for the 2.5 format only
|
||||||
# and needs to be included in the version upgrade system rather than
|
# and needs to be included in the version upgrade system rather than
|
||||||
# globally in Uranium.
|
# globally in Uranium.
|
||||||
#
|
#
|
||||||
@ -33,9 +34,11 @@ class VersionUpgrade24to25(VersionUpgrade):
|
|||||||
def getCfgVersion(self, serialised):
|
def getCfgVersion(self, serialised):
|
||||||
parser = configparser.ConfigParser(interpolation = None)
|
parser = configparser.ConfigParser(interpolation = None)
|
||||||
parser.read_string(serialised)
|
parser.read_string(serialised)
|
||||||
return int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
|
format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
|
||||||
|
setting_version = int(parser.get("metadata", "setting_version", fallback = 0))
|
||||||
|
return format_version * 1000000 + setting_version
|
||||||
|
|
||||||
## Upgrades the preferences file from version 2.4 to 2.5.
|
## Upgrades the preferences file from version 2.5 to 2.6.
|
||||||
#
|
#
|
||||||
# \param serialised The serialised form of a preferences file.
|
# \param serialised The serialised form of a preferences file.
|
||||||
# \param filename The name of the file to upgrade.
|
# \param filename The name of the file to upgrade.
|
||||||
@ -66,7 +69,7 @@ class VersionUpgrade24to25(VersionUpgrade):
|
|||||||
parser.write(output)
|
parser.write(output)
|
||||||
return [filename], [output.getvalue()]
|
return [filename], [output.getvalue()]
|
||||||
|
|
||||||
## Upgrades an instance container from version 2.4 to 2.5.
|
## Upgrades an instance container from version 2.5 to 2.6.
|
||||||
#
|
#
|
||||||
# \param serialised The serialised form of a quality profile.
|
# \param serialised The serialised form of a quality profile.
|
||||||
# \param filename The name of the file to upgrade.
|
# \param filename The name of the file to upgrade.
|
||||||
@ -85,7 +88,7 @@ class VersionUpgrade24to25(VersionUpgrade):
|
|||||||
|
|
||||||
#Change the version number in the file.
|
#Change the version number in the file.
|
||||||
if parser.has_section("general"):
|
if parser.has_section("general"):
|
||||||
parser["general"]["version"] = "3"
|
parser["general"]["setting_version"] = "1"
|
||||||
|
|
||||||
#Re-serialise the file.
|
#Re-serialise the file.
|
||||||
output = io.StringIO()
|
output = io.StringIO()
|
@ -1,28 +1,28 @@
|
|||||||
# Copyright (c) 2017 Ultimaker B.V.
|
# Copyright (c) 2017 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from . import VersionUpgrade24to25
|
from . import VersionUpgrade25to26
|
||||||
|
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
catalog = i18nCatalog("cura")
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
upgrade = VersionUpgrade24to25.VersionUpgrade24to25()
|
upgrade = VersionUpgrade25to26.VersionUpgrade25to26()
|
||||||
|
|
||||||
def getMetaData():
|
def getMetaData():
|
||||||
return {
|
return {
|
||||||
"plugin": {
|
"plugin": {
|
||||||
"name": catalog.i18nc("@label", "Version Upgrade 2.4 to 2.5"),
|
"name": catalog.i18nc("@label", "Version Upgrade 2.5 to 2.6"),
|
||||||
"author": "Ultimaker",
|
"author": "Ultimaker",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"description": catalog.i18nc("@info:whatsthis", "Upgrades configurations from Cura 2.4 to Cura 2.5."),
|
"description": catalog.i18nc("@info:whatsthis", "Upgrades configurations from Cura 2.5 to Cura 2.6."),
|
||||||
"api": 3
|
"api": 3
|
||||||
},
|
},
|
||||||
"version_upgrade": {
|
"version_upgrade": {
|
||||||
# From To Upgrade function
|
# From To Upgrade function
|
||||||
("preferences", 4): ("preferences", 5, upgrade.upgradePreferences),
|
("preferences", 4000000): ("preferences", 4000001, upgrade.upgradePreferences),
|
||||||
("quality", 2): ("quality", 3, upgrade.upgradeInstanceContainer),
|
("quality", 2000000): ("quality", 2000001, upgrade.upgradeInstanceContainer),
|
||||||
("variant", 2): ("variant", 3, upgrade.upgradeInstanceContainer), #We can re-use upgradeContainerStack since there is nothing specific to quality, variant or user profiles being changed.
|
("variant", 2000000): ("variant", 2000001, upgrade.upgradeInstanceContainer), #We can re-use upgradeContainerStack since there is nothing specific to quality, variant or user profiles being changed.
|
||||||
("user", 2): ("user", 3, upgrade.upgradeInstanceContainer)
|
("user", 2000000): ("user", 2000001, upgrade.upgradeInstanceContainer)
|
||||||
},
|
},
|
||||||
"sources": {
|
"sources": {
|
||||||
"quality": {
|
"quality": {
|
||||||
@ -41,5 +41,4 @@ def getMetaData():
|
|||||||
}
|
}
|
||||||
|
|
||||||
def register(app):
|
def register(app):
|
||||||
return {}
|
|
||||||
return { "version_upgrade": upgrade }
|
return { "version_upgrade": upgrade }
|
@ -4,12 +4,12 @@
|
|||||||
import configparser #To check whether the appropriate exceptions are raised.
|
import configparser #To check whether the appropriate exceptions are raised.
|
||||||
import pytest #To register tests with.
|
import pytest #To register tests with.
|
||||||
|
|
||||||
import VersionUpgrade24to25 #The module we're testing.
|
import VersionUpgrade25to26 #The module we're testing.
|
||||||
|
|
||||||
## Creates an instance of the upgrader to test with.
|
## Creates an instance of the upgrader to test with.
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def upgrader():
|
def upgrader():
|
||||||
return VersionUpgrade24to25.VersionUpgrade24to25()
|
return VersionUpgrade25to26.VersionUpgrade25to26()
|
||||||
|
|
||||||
test_cfg_version_good_data = [
|
test_cfg_version_good_data = [
|
||||||
{
|
{
|
||||||
@ -17,7 +17,7 @@ test_cfg_version_good_data = [
|
|||||||
"file_data": """[general]
|
"file_data": """[general]
|
||||||
version = 1
|
version = 1
|
||||||
""",
|
""",
|
||||||
"version": 1
|
"version": 1000000
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"test_name": "Other Data Around",
|
"test_name": "Other Data Around",
|
||||||
@ -31,14 +31,32 @@ version = 3
|
|||||||
layer_height = 0.12
|
layer_height = 0.12
|
||||||
infill_sparse_density = 42
|
infill_sparse_density = 42
|
||||||
""",
|
""",
|
||||||
"version": 3
|
"version": 3000000
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"test_name": "Negative Version", #Why not?
|
"test_name": "Negative Version", #Why not?
|
||||||
"file_data": """[general]
|
"file_data": """[general]
|
||||||
version = -20
|
version = -20
|
||||||
""",
|
""",
|
||||||
"version": -20
|
"version": -20000000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"test_name": "Setting Version",
|
||||||
|
"file_data": """[general]
|
||||||
|
version = 1
|
||||||
|
[metadata]
|
||||||
|
setting_version = 1
|
||||||
|
""",
|
||||||
|
"version": 1000001
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"test_name": "Negative Setting Version",
|
||||||
|
"file_data": """[general]
|
||||||
|
version = 1
|
||||||
|
[metadata]
|
||||||
|
setting_version = -3
|
||||||
|
""",
|
||||||
|
"version": 999997
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -77,6 +95,22 @@ true = false
|
|||||||
"test_name": "Not a Number",
|
"test_name": "Not a Number",
|
||||||
"file_data": """[general]
|
"file_data": """[general]
|
||||||
version = not-a-text-version-number
|
version = not-a-text-version-number
|
||||||
|
""",
|
||||||
|
"exception": ValueError
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"test_name": "Setting Value NaN",
|
||||||
|
"file_data": """[general]
|
||||||
|
version = 4
|
||||||
|
[metadata]
|
||||||
|
setting_version = latest_or_something
|
||||||
|
""",
|
||||||
|
"exception": ValueError
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"test_name": "Major-Minor",
|
||||||
|
"file_data": """[general]
|
||||||
|
version = 1.2
|
||||||
""",
|
""",
|
||||||
"exception": ValueError
|
"exception": ValueError
|
||||||
}
|
}
|
||||||
@ -121,7 +155,7 @@ foo = bar
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
## Tests whether the settings that should be removed are removed for the 2.5
|
## Tests whether the settings that should be removed are removed for the 2.6
|
||||||
# version of preferences.
|
# version of preferences.
|
||||||
@pytest.mark.parametrize("data", test_upgrade_preferences_removed_settings_data)
|
@pytest.mark.parametrize("data", test_upgrade_preferences_removed_settings_data)
|
||||||
def test_upgradePreferencesRemovedSettings(data, upgrader):
|
def test_upgradePreferencesRemovedSettings(data, upgrader):
|
||||||
@ -137,7 +171,7 @@ def test_upgradePreferencesRemovedSettings(data, upgrader):
|
|||||||
upgraded_preferences = upgraded_preferences[0]
|
upgraded_preferences = upgraded_preferences[0]
|
||||||
|
|
||||||
#Find whether the removed setting is removed from the file now.
|
#Find whether the removed setting is removed from the file now.
|
||||||
settings -= VersionUpgrade24to25._removed_settings
|
settings -= VersionUpgrade25to26._removed_settings
|
||||||
parser = configparser.ConfigParser(interpolation = None)
|
parser = configparser.ConfigParser(interpolation = None)
|
||||||
parser.read_string(upgraded_preferences)
|
parser.read_string(upgraded_preferences)
|
||||||
assert (parser.has_section("general") and "visible_settings" in parser["general"]) == (len(settings) > 0) #If there are settings, there must also be a preference.
|
assert (parser.has_section("general") and "visible_settings" in parser["general"]) == (len(settings) > 0) #If there are settings, there must also be a preference.
|
||||||
@ -166,7 +200,7 @@ type = instance_container
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
## Tests whether the settings that should be removed are removed for the 2.5
|
## Tests whether the settings that should be removed are removed for the 2.6
|
||||||
# version of instance containers.
|
# version of instance containers.
|
||||||
@pytest.mark.parametrize("data", test_upgrade_instance_container_removed_settings_data)
|
@pytest.mark.parametrize("data", test_upgrade_instance_container_removed_settings_data)
|
||||||
def test_upgradeInstanceContainerRemovedSettings(data, upgrader):
|
def test_upgradeInstanceContainerRemovedSettings(data, upgrader):
|
||||||
@ -182,7 +216,7 @@ def test_upgradeInstanceContainerRemovedSettings(data, upgrader):
|
|||||||
upgraded_container = upgraded_container[0]
|
upgraded_container = upgraded_container[0]
|
||||||
|
|
||||||
#Find whether the forbidden setting is still in the container.
|
#Find whether the forbidden setting is still in the container.
|
||||||
settings -= VersionUpgrade24to25._removed_settings
|
settings -= VersionUpgrade25to26._removed_settings
|
||||||
parser = configparser.ConfigParser(interpolation = None)
|
parser = configparser.ConfigParser(interpolation = None)
|
||||||
parser.read_string(upgraded_container)
|
parser.read_string(upgraded_container)
|
||||||
assert parser.has_section("values") == (len(settings) > 0) #If there are settings, there must also be the values category.
|
assert parser.has_section("values") == (len(settings) > 0) #If there are settings, there must also be the values category.
|
@ -21,6 +21,17 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
super().__init__(container_id, *args, **kwargs)
|
super().__init__(container_id, *args, **kwargs)
|
||||||
self._inherited_files = []
|
self._inherited_files = []
|
||||||
|
|
||||||
|
## Translates the version number in the XML files to the setting_version
|
||||||
|
# metadata entry.
|
||||||
|
#
|
||||||
|
# Since the two may increment independently we need a way to say which
|
||||||
|
# versions of the XML specification are compatible with our setting data
|
||||||
|
# version numbers.
|
||||||
|
def xmlVersionToSettingVersion(self, xml_version):
|
||||||
|
if xml_version == 1: #Only one known version and it happens to be the same as our current setting_version.
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
def getInheritedFiles(self):
|
def getInheritedFiles(self):
|
||||||
return self._inherited_files
|
return self._inherited_files
|
||||||
|
|
||||||
@ -403,6 +414,7 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
meta_data["type"] = "material"
|
meta_data["type"] = "material"
|
||||||
meta_data["base_file"] = self.id
|
meta_data["base_file"] = self.id
|
||||||
meta_data["status"] = "unknown" # TODO: Add material verfication
|
meta_data["status"] = "unknown" # TODO: Add material verfication
|
||||||
|
meta_data["setting_version"] = self.getVersionFromSerialized(serialized)
|
||||||
|
|
||||||
inherits = data.find("./um:inherits", self.__namespaces)
|
inherits = data.find("./um:inherits", self.__namespaces)
|
||||||
if inherits is not None:
|
if inherits is not None:
|
||||||
@ -441,8 +453,7 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
tag_name = _tag_without_namespace(entry)
|
tag_name = _tag_without_namespace(entry)
|
||||||
property_values[tag_name] = entry.text
|
property_values[tag_name] = entry.text
|
||||||
|
|
||||||
diameter = float(property_values.get("diameter", 2.85)) # In mm
|
meta_data["approximate_diameter"] = round(float(property_values.get("diameter", 2.85))) # In mm
|
||||||
density = float(property_values.get("density", 1.3)) # In g/cm3
|
|
||||||
meta_data["properties"] = property_values
|
meta_data["properties"] = property_values
|
||||||
|
|
||||||
self.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0])
|
self.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0])
|
||||||
@ -461,7 +472,6 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
Logger.log("d", "Unsupported material setting %s", key)
|
Logger.log("d", "Unsupported material setting %s", key)
|
||||||
self._cached_values = global_setting_values
|
self._cached_values = global_setting_values
|
||||||
|
|
||||||
meta_data["approximate_diameter"] = round(diameter)
|
|
||||||
meta_data["compatible"] = global_compatibility
|
meta_data["compatible"] = global_compatibility
|
||||||
self.setMetaData(meta_data)
|
self.setMetaData(meta_data)
|
||||||
self._dirty = False
|
self._dirty = False
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
"type": "extruder",
|
"type": "extruder",
|
||||||
"author": "Ultimaker B.V.",
|
"author": "Ultimaker B.V.",
|
||||||
"manufacturer": "Ultimaker",
|
"manufacturer": "Ultimaker",
|
||||||
|
"setting_version": 1,
|
||||||
"visible": false
|
"visible": false
|
||||||
},
|
},
|
||||||
"settings":
|
"settings":
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
"author": "Ultimaker B.V.",
|
"author": "Ultimaker B.V.",
|
||||||
"category": "Ultimaker",
|
"category": "Ultimaker",
|
||||||
"manufacturer": "Ultimaker",
|
"manufacturer": "Ultimaker",
|
||||||
|
"setting_version": 1,
|
||||||
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",
|
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",
|
||||||
"visible": false,
|
"visible": false,
|
||||||
"has_materials": true,
|
"has_materials": true,
|
||||||
@ -1217,19 +1218,6 @@
|
|||||||
"enabled": "infill_sparse_density > 0 and spaghetti_infill_enabled",
|
"enabled": "infill_sparse_density > 0 and spaghetti_infill_enabled",
|
||||||
"settable_per_mesh": true
|
"settable_per_mesh": true
|
||||||
},
|
},
|
||||||
"sub_div_rad_mult":
|
|
||||||
{
|
|
||||||
"label": "Cubic Subdivision Radius",
|
|
||||||
"description": "A multiplier on the radius from the center of each cube to check for the boundary of the model, as to decide whether this cube should be subdivided. Larger values lead to more subdivisions, i.e. more small cubes.",
|
|
||||||
"unit": "%",
|
|
||||||
"type": "float",
|
|
||||||
"default_value": 100,
|
|
||||||
"minimum_value": "0",
|
|
||||||
"minimum_value_warning": "100",
|
|
||||||
"maximum_value_warning": "200",
|
|
||||||
"enabled": "infill_sparse_density > 0 and infill_pattern == 'cubicsubdiv'",
|
|
||||||
"settable_per_mesh": true
|
|
||||||
},
|
|
||||||
"sub_div_rad_add":
|
"sub_div_rad_add":
|
||||||
{
|
{
|
||||||
"label": "Cubic Subdivision Shell",
|
"label": "Cubic Subdivision Shell",
|
||||||
@ -3636,7 +3624,7 @@
|
|||||||
"none": "None"
|
"none": "None"
|
||||||
},
|
},
|
||||||
"default_value": "brim",
|
"default_value": "brim",
|
||||||
"resolve": "'raft' if 'raft' in extruderValues('adhesion_type') else ('brim' if 'brim' in extruderValues('adhesion_type') else 'skirt')",
|
"limit_to_extruder": "adhesion_extruder_nr",
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": false
|
"settable_per_extruder": false
|
||||||
},
|
},
|
||||||
|
@ -56,7 +56,6 @@ UM.Dialog
|
|||||||
{
|
{
|
||||||
text: catalog.i18nc("@text:window", "You have customized some profile settings.\nWould you like to keep or discard those settings?")
|
text: catalog.i18nc("@text:window", "You have customized some profile settings.\nWould you like to keep or discard those settings?")
|
||||||
anchors.margins: UM.Theme.getSize("default_margin").width
|
anchors.margins: UM.Theme.getSize("default_margin").width
|
||||||
font: UM.Theme.getFont("default")
|
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[general]
|
[general]
|
||||||
version = 2
|
version = 2
|
||||||
name = Normal Quality
|
name = Normal Quality
|
||||||
@ -9,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla
|
material = generic_pla
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[general]
|
[general]
|
||||||
version = 2
|
version = 2
|
||||||
name = High Quality
|
name = High Quality
|
||||||
@ -9,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla
|
material = generic_pla
|
||||||
weight = 1
|
weight = 1
|
||||||
quality_type = high
|
quality_type = high
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.1
|
layer_height = 0.1
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[general]
|
[general]
|
||||||
version = 2
|
version = 2
|
||||||
name = Normal Quality
|
name = Normal Quality
|
||||||
@ -9,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla
|
material = generic_pla
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[general]
|
[general]
|
||||||
version = 2
|
version = 2
|
||||||
name = Normal Quality
|
name = Normal Quality
|
||||||
@ -9,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla
|
material = generic_pla
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[general]
|
[general]
|
||||||
version = 2
|
version = 2
|
||||||
name = High Quality
|
name = High Quality
|
||||||
@ -9,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla
|
material = generic_pla
|
||||||
weight = 1
|
weight = 1
|
||||||
quality_type = high
|
quality_type = high
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.1
|
layer_height = 0.1
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[general]
|
[general]
|
||||||
version = 2
|
version = 2
|
||||||
name = Normal Quality
|
name = Normal Quality
|
||||||
@ -9,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla
|
material = generic_pla
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[general]
|
[general]
|
||||||
version = 2
|
version = 2
|
||||||
name = Normal Quality
|
name = Normal Quality
|
||||||
@ -9,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla
|
material = generic_pla
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[general]
|
[general]
|
||||||
version = 2
|
version = 2
|
||||||
name = High Quality
|
name = High Quality
|
||||||
@ -8,6 +7,7 @@ type = quality
|
|||||||
material = generic_pla
|
material = generic_pla
|
||||||
weight = 1
|
weight = 1
|
||||||
quality_type = high
|
quality_type = high
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.1
|
layer_height = 0.1
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[general]
|
[general]
|
||||||
version = 2
|
version = 2
|
||||||
name = Normal Quality
|
name = Normal Quality
|
||||||
@ -9,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla
|
material = generic_pla
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_abs_175_cartesio_0.25_mm
|
material = generic_abs_175_cartesio_0.25_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_abs_175_cartesio_0.25_mm
|
material = generic_abs_175_cartesio_0.25_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_abs_175_cartesio_0.4_mm
|
material = generic_abs_175_cartesio_0.4_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_abs_175_cartesio_0.4_mm
|
material = generic_abs_175_cartesio_0.4_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = coarse
|
quality_type = coarse
|
||||||
material = generic_abs_175_cartesio_0.8_mm
|
material = generic_abs_175_cartesio_0.8_mm
|
||||||
weight = 3
|
weight = 3
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = extra coarse
|
quality_type = extra coarse
|
||||||
material = generic_abs_175_cartesio_0.8_mm
|
material = generic_abs_175_cartesio_0.8_mm
|
||||||
weight = 4
|
weight = 4
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_abs_175_cartesio_0.8_mm
|
material = generic_abs_175_cartesio_0.8_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_abs_175_cartesio_0.8_mm
|
material = generic_abs_175_cartesio_0.8_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = dsm_arnitel2045_175_cartesio_0.4_mm
|
material = dsm_arnitel2045_175_cartesio_0.4_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = dsm_arnitel2045_175_cartesio_0.4_mm
|
material = dsm_arnitel2045_175_cartesio_0.4_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = coarse
|
quality_type = coarse
|
||||||
global_quality = True
|
global_quality = True
|
||||||
weight = 0
|
weight = 0
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.4
|
layer_height = 0.4
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = extra coarse
|
quality_type = extra coarse
|
||||||
global_quality = True
|
global_quality = True
|
||||||
weight = 0
|
weight = 0
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.6
|
layer_height = 0.6
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
global_quality = True
|
global_quality = True
|
||||||
weight = 0
|
weight = 0
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.1
|
layer_height = 0.1
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
global_quality = True
|
global_quality = True
|
||||||
weight = 0
|
weight = 0
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_hips_175_cartesio_0.25_mm
|
material = generic_hips_175_cartesio_0.25_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_hips_175_cartesio_0.25_mm
|
material = generic_hips_175_cartesio_0.25_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_hips_175_cartesio_0.4_mm
|
material = generic_hips_175_cartesio_0.4_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_hips_175_cartesio_0.4_mm
|
material = generic_hips_175_cartesio_0.4_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = coarse
|
quality_type = coarse
|
||||||
material = generic_hips_175_cartesio_0.8_mm
|
material = generic_hips_175_cartesio_0.8_mm
|
||||||
weight = 3
|
weight = 3
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = extra coarse
|
quality_type = extra coarse
|
||||||
material = generic_hips_175_cartesio_0.8_mm
|
material = generic_hips_175_cartesio_0.8_mm
|
||||||
weight = 4
|
weight = 4
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_hips_175_cartesio_0.8_mm
|
material = generic_hips_175_cartesio_0.8_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_hips_175_cartesio_0.8_mm
|
material = generic_hips_175_cartesio_0.8_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_nylon_175_cartesio_0.25_mm
|
material = generic_nylon_175_cartesio_0.25_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_nylon_175_cartesio_0.25_mm
|
material = generic_nylon_175_cartesio_0.25_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_nylon_175_cartesio_0.4_mm
|
material = generic_nylon_175_cartesio_0.4_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_nylon_175_cartesio_0.4_mm
|
material = generic_nylon_175_cartesio_0.4_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = coarse
|
quality_type = coarse
|
||||||
material = generic_nylon_175_cartesio_0.8_mm
|
material = generic_nylon_175_cartesio_0.8_mm
|
||||||
weight = 3
|
weight = 3
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = extra coarse
|
quality_type = extra coarse
|
||||||
material = generic_nylon_175_cartesio_0.8_mm
|
material = generic_nylon_175_cartesio_0.8_mm
|
||||||
weight = 4
|
weight = 4
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_nylon_175_cartesio_0.8_mm
|
material = generic_nylon_175_cartesio_0.8_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_nylon_175_cartesio_0.8_mm
|
material = generic_nylon_175_cartesio_0.8_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_pc_175_cartesio_0.25_mm
|
material = generic_pc_175_cartesio_0.25_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_pc_175_cartesio_0.25_mm
|
material = generic_pc_175_cartesio_0.25_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_pc_175_cartesio_0.4_mm
|
material = generic_pc_175_cartesio_0.4_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_pc_175_cartesio_0.4_mm
|
material = generic_pc_175_cartesio_0.4_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = coarse
|
quality_type = coarse
|
||||||
material = generic_pc_175_cartesio_0.8_mm
|
material = generic_pc_175_cartesio_0.8_mm
|
||||||
weight = 3
|
weight = 3
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = extra coarse
|
quality_type = extra coarse
|
||||||
material = generic_pc_175_cartesio_0.8_mm
|
material = generic_pc_175_cartesio_0.8_mm
|
||||||
weight = 4
|
weight = 4
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_pc_175_cartesio_0.8_mm
|
material = generic_pc_175_cartesio_0.8_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_pc_175_cartesio_0.8_mm
|
material = generic_pc_175_cartesio_0.8_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_petg_175_cartesio_0.25_mm
|
material = generic_petg_175_cartesio_0.25_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_petg_175_cartesio_0.25_mm
|
material = generic_petg_175_cartesio_0.25_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_petg_175_cartesio_0.4_mm
|
material = generic_petg_175_cartesio_0.4_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_petg_175_cartesio_0.4_mm
|
material = generic_petg_175_cartesio_0.4_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = coarse
|
quality_type = coarse
|
||||||
material = generic_petg_175_cartesio_0.8_mm
|
material = generic_petg_175_cartesio_0.8_mm
|
||||||
weight = 3
|
weight = 3
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = extra coarse
|
quality_type = extra coarse
|
||||||
material = generic_petg_175_cartesio_0.8_mm
|
material = generic_petg_175_cartesio_0.8_mm
|
||||||
weight = 4
|
weight = 4
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_petg_175_cartesio_0.8_mm
|
material = generic_petg_175_cartesio_0.8_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_petg_175_cartesio_0.8_mm
|
material = generic_petg_175_cartesio_0.8_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_pla_175_cartesio_0.25_mm
|
material = generic_pla_175_cartesio_0.25_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_pla_175_cartesio_0.25_mm
|
material = generic_pla_175_cartesio_0.25_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_pla_175_cartesio_0.4_mm
|
material = generic_pla_175_cartesio_0.4_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_pla_175_cartesio_0.4_mm
|
material = generic_pla_175_cartesio_0.4_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = coarse
|
quality_type = coarse
|
||||||
material = generic_pla_175_cartesio_0.8_mm
|
material = generic_pla_175_cartesio_0.8_mm
|
||||||
weight = 3
|
weight = 3
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = extra coarse
|
quality_type = extra coarse
|
||||||
material = generic_pla_175_cartesio_0.8_mm
|
material = generic_pla_175_cartesio_0.8_mm
|
||||||
weight = 4
|
weight = 4
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_pla_175_cartesio_0.8_mm
|
material = generic_pla_175_cartesio_0.8_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_pla_175_cartesio_0.8_mm
|
material = generic_pla_175_cartesio_0.8_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_pva_175_cartesio_0.25_mm
|
material = generic_pva_175_cartesio_0.25_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_pva_175_cartesio_0.25_mm
|
material = generic_pva_175_cartesio_0.25_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.3
|
infill_line_width = 0.3
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_pva_175_cartesio_0.4_mm
|
material = generic_pva_175_cartesio_0.4_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_pva_175_cartesio_0.4_mm
|
material = generic_pva_175_cartesio_0.4_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.5
|
infill_line_width = 0.5
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = coarse
|
quality_type = coarse
|
||||||
material = generic_pva_175_cartesio_0.8_mm
|
material = generic_pva_175_cartesio_0.8_mm
|
||||||
weight = 3
|
weight = 3
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = extra coarse
|
quality_type = extra coarse
|
||||||
material = generic_pva_175_cartesio_0.8_mm
|
material = generic_pva_175_cartesio_0.8_mm
|
||||||
weight = 4
|
weight = 4
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
material = generic_pva_175_cartesio_0.8_mm
|
material = generic_pva_175_cartesio_0.8_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = normal
|
quality_type = normal
|
||||||
material = generic_pva_175_cartesio_0.8_mm
|
material = generic_pva_175_cartesio_0.8_mm
|
||||||
weight = 2
|
weight = 2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
infill_line_width = 0.9
|
infill_line_width = 0.9
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = coarse
|
quality_type = coarse
|
||||||
global_quality = True
|
global_quality = True
|
||||||
weight = -3
|
weight = -3
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.4
|
layer_height = 0.4
|
||||||
|
@ -9,6 +9,7 @@ type = quality
|
|||||||
quality_type = draft
|
quality_type = draft
|
||||||
global_quality = True
|
global_quality = True
|
||||||
weight = -2
|
weight = -2
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = Extra coarse
|
quality_type = Extra coarse
|
||||||
global_quality = True
|
global_quality = True
|
||||||
weight = -4
|
weight = -4
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.6
|
layer_height = 0.6
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
quality_type = high
|
quality_type = high
|
||||||
global_quality = True
|
global_quality = True
|
||||||
weight = 1
|
weight = 1
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.06
|
layer_height = 0.06
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_petg_imade3d_jellybox_0.4_mm
|
material = generic_petg_imade3d_jellybox_0.4_mm
|
||||||
weight = -1
|
weight = -1
|
||||||
quality_type = fast
|
quality_type = fast
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_petg_imade3d_jellybox_0.4_mm_2-fans
|
material = generic_petg_imade3d_jellybox_0.4_mm_2-fans
|
||||||
weight = -1
|
weight = -1
|
||||||
quality_type = fast
|
quality_type = fast
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_petg_imade3d_jellybox_0.4_mm
|
material = generic_petg_imade3d_jellybox_0.4_mm
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_petg_imade3d_jellybox_0.4_mm_2-fans
|
material = generic_petg_imade3d_jellybox_0.4_mm_2-fans
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla_imade3d_jellybox_0.4_mm
|
material = generic_pla_imade3d_jellybox_0.4_mm
|
||||||
weight = -1
|
weight = -1
|
||||||
quality_type = fast
|
quality_type = fast
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla_imade3d_jellybox_0.4_mm_2-fans
|
material = generic_pla_imade3d_jellybox_0.4_mm_2-fans
|
||||||
weight = -1
|
weight = -1
|
||||||
quality_type = fast
|
quality_type = fast
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla_imade3d_jellybox_0.4_mm
|
material = generic_pla_imade3d_jellybox_0.4_mm
|
||||||
weight = 1
|
weight = 1
|
||||||
quality_type = high
|
quality_type = high
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla_imade3d_jellybox_0.4_mm_2-fans
|
material = generic_pla_imade3d_jellybox_0.4_mm_2-fans
|
||||||
weight = 1
|
weight = 1
|
||||||
quality_type = high
|
quality_type = high
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla_imade3d_jellybox_0.4_mm
|
material = generic_pla_imade3d_jellybox_0.4_mm
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
@ -8,6 +8,7 @@ type = quality
|
|||||||
material = generic_pla_imade3d_jellybox_0.4_mm_2-fans
|
material = generic_pla_imade3d_jellybox_0.4_mm_2-fans
|
||||||
weight = 0
|
weight = 0
|
||||||
quality_type = normal
|
quality_type = normal
|
||||||
|
setting_version = 1
|
||||||
|
|
||||||
[values]
|
[values]
|
||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user