mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-14 03:35:57 +08:00
Merge branch 'master' of https://github.com/Ultimaker/Cura
This commit is contained in:
commit
d7148844ac
@ -142,6 +142,23 @@ class CuraApplication(QtApplication):
|
|||||||
ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.UserInstanceContainer)
|
ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.UserInstanceContainer)
|
||||||
ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.MachineStack)
|
ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.MachineStack)
|
||||||
|
|
||||||
|
# Add empty variant, material and quality containers.
|
||||||
|
# Since they are empty, they should never be serialized and instead just programmatically created.
|
||||||
|
# We need them to simplify the switching between materials.
|
||||||
|
empty_container = ContainerRegistry.getInstance().getEmptyInstanceContainer()
|
||||||
|
empty_variant_container = copy.deepcopy(empty_container)
|
||||||
|
empty_variant_container._id = "empty_variant"
|
||||||
|
empty_variant_container.addMetaDataEntry("type", "variant")
|
||||||
|
ContainerRegistry.getInstance().addContainer(empty_variant_container)
|
||||||
|
empty_material_container = copy.deepcopy(empty_container)
|
||||||
|
empty_material_container._id = "empty_material"
|
||||||
|
empty_material_container.addMetaDataEntry("type", "material")
|
||||||
|
ContainerRegistry.getInstance().addContainer(empty_material_container)
|
||||||
|
empty_quality_container = copy.deepcopy(empty_container)
|
||||||
|
empty_quality_container._id = "empty_quality"
|
||||||
|
empty_quality_container.addMetaDataEntry("type", "quality")
|
||||||
|
ContainerRegistry.getInstance().addContainer(empty_quality_container)
|
||||||
|
|
||||||
ContainerRegistry.getInstance().load()
|
ContainerRegistry.getInstance().load()
|
||||||
|
|
||||||
Preferences.getInstance().addPreference("cura/active_mode", "simple")
|
Preferences.getInstance().addPreference("cura/active_mode", "simple")
|
||||||
|
@ -22,6 +22,10 @@ class MachineManagerModel(QObject):
|
|||||||
self.globalContainerChanged.connect(self.activeVariantChanged)
|
self.globalContainerChanged.connect(self.activeVariantChanged)
|
||||||
self.globalContainerChanged.connect(self.activeQualityChanged)
|
self.globalContainerChanged.connect(self.activeQualityChanged)
|
||||||
|
|
||||||
|
self._empty_variant_container = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = "empty_variant")[0]
|
||||||
|
self._empty_material_container = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = "empty_material")[0]
|
||||||
|
self._empty_quality_container = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = "empty_quality")[0]
|
||||||
|
|
||||||
Preferences.getInstance().addPreference("cura/active_machine", "")
|
Preferences.getInstance().addPreference("cura/active_machine", "")
|
||||||
|
|
||||||
active_machine_id = Preferences.getInstance().getValue("cura/active_machine")
|
active_machine_id = Preferences.getInstance().getValue("cura/active_machine")
|
||||||
@ -74,28 +78,26 @@ class MachineManagerModel(QObject):
|
|||||||
new_global_stack.addMetaDataEntry("type", "machine")
|
new_global_stack.addMetaDataEntry("type", "machine")
|
||||||
UM.Settings.ContainerRegistry.getInstance().addContainer(new_global_stack)
|
UM.Settings.ContainerRegistry.getInstance().addContainer(new_global_stack)
|
||||||
|
|
||||||
empty_container = UM.Settings.ContainerRegistry.getInstance().getEmptyInstanceContainer()
|
variant_instance_container = self._empty_variant_container
|
||||||
|
|
||||||
variant_instance_container = empty_container
|
|
||||||
if definition.getMetaDataEntry("has_variants"):
|
if definition.getMetaDataEntry("has_variants"):
|
||||||
variant_instance_container = self._getPreferredContainer(definition, "preferred_variant", empty_container)
|
variant_instance_container = self._getPreferredContainer(definition, "preferred_variant", self._empty_variant_container)
|
||||||
|
|
||||||
if variant_instance_container == empty_container:
|
if variant_instance_container == self._empty_variant_container:
|
||||||
variants = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "variant", definition = definition.id)
|
variants = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "variant", definition = definition.id)
|
||||||
if variants:
|
if variants:
|
||||||
variant_instance_container = variants[0]
|
variant_instance_container = variants[0]
|
||||||
|
|
||||||
if variant_instance_container == empty_container:
|
if variant_instance_container == self._empty_variant_container:
|
||||||
Logger.log("w", "Machine %s defines it has variants but no variants found", definition.id)
|
Logger.log("w", "Machine %s defines it has variants but no variants found", definition.id)
|
||||||
|
|
||||||
material_instance_container = empty_container
|
material_instance_container = self._empty_material_container
|
||||||
if definition.getMetaDataEntry("has_materials"):
|
if definition.getMetaDataEntry("has_materials"):
|
||||||
material_instance_container = self._getPreferredContainer(definition, "preferred_material", empty_container)
|
material_instance_container = self._getPreferredContainer(definition, "preferred_material", self._empty_material_container)
|
||||||
|
|
||||||
if material_instance_container == empty_container:
|
if material_instance_container == self._empty_material_container:
|
||||||
materials = None
|
materials = None
|
||||||
if definition.getMetaDataEntry("has_machine_materials"):
|
if definition.getMetaDataEntry("has_machine_materials"):
|
||||||
if variant_instance_container != empty_container:
|
if variant_instance_container != self._empty_material_container:
|
||||||
materials = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "material", definition = definition.id, variant = variant_instance_container.id)
|
materials = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "material", definition = definition.id, variant = variant_instance_container.id)
|
||||||
else:
|
else:
|
||||||
materials = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "material", definition = definition.id)
|
materials = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "material", definition = definition.id)
|
||||||
@ -105,9 +107,11 @@ class MachineManagerModel(QObject):
|
|||||||
if materials:
|
if materials:
|
||||||
material_instance_container = materials[0]
|
material_instance_container = materials[0]
|
||||||
|
|
||||||
quality_instance_container = self._getPreferredContainer(definition, "preferred_quality", empty_container)
|
if material_instance_container == self._empty_material_container:
|
||||||
|
Logger.log("w", "Machine %s defines it has materials but no matererials found", definition.id)
|
||||||
|
|
||||||
if quality_instance_container == empty_container:
|
quality_instance_container = self._getPreferredContainer(definition, "preferred_quality", self._empty_quality_container)
|
||||||
|
if quality_instance_container == self._empty_quality_container:
|
||||||
if definition.getMetaDataEntry("has_machine_quality"):
|
if definition.getMetaDataEntry("has_machine_quality"):
|
||||||
if material_instance_container:
|
if material_instance_container:
|
||||||
qualities = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "quality", definition = definition.id, material = material_instance_container.id)
|
qualities = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(type = "quality", definition = definition.id, material = material_instance_container.id)
|
||||||
|
@ -51,6 +51,20 @@ class StartSliceJob(Job):
|
|||||||
def getSliceMessage(self):
|
def getSliceMessage(self):
|
||||||
return self._slice_message
|
return self._slice_message
|
||||||
|
|
||||||
|
## Check if a stack has any errors.
|
||||||
|
## returns true if it has errors, false otherwise.
|
||||||
|
def _checkStackForErrors(self, stack):
|
||||||
|
if stack is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
for key in stack.getAllKeys():
|
||||||
|
validation_state = stack.getProperty(key, "validationState")
|
||||||
|
if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError):
|
||||||
|
Logger.log("w", "Setting %s is not valid, but %s. Aborting slicing.", key, validation_state)
|
||||||
|
return True
|
||||||
|
Job.yieldThread()
|
||||||
|
return False
|
||||||
|
|
||||||
## Runs the job that initiates the slicing.
|
## Runs the job that initiates the slicing.
|
||||||
def run(self):
|
def run(self):
|
||||||
stack = Application.getInstance().getGlobalContainerStack()
|
stack = Application.getInstance().getGlobalContainerStack()
|
||||||
@ -59,30 +73,18 @@ class StartSliceJob(Job):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Don't slice if there is a setting with an error value.
|
# Don't slice if there is a setting with an error value.
|
||||||
for key in stack.getAllKeys():
|
if self._checkStackForErrors(stack):
|
||||||
validation_state = stack.getProperty(key, "validationState")
|
self.setResult(StartJobResult.SettingError)
|
||||||
if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError):
|
return
|
||||||
Logger.log("w", "Setting %s is not valid, but %s. Aborting slicing.", key, validation_state)
|
|
||||||
self.setResult(StartJobResult.SettingError)
|
|
||||||
return
|
|
||||||
|
|
||||||
Job.yieldThread()
|
|
||||||
|
|
||||||
# Don't slice if there is a per object setting with an error value.
|
# Don't slice if there is a per object setting with an error value.
|
||||||
for node in DepthFirstIterator(self._scene.getRoot()):
|
for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
if type(node) is not SceneNode or not node.isSelectable():
|
if type(node) is not SceneNode or not node.isSelectable():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
node_stack = node.callDecoration("getStack")
|
if self._checkStackForErrors(node.callDecoration("getStack")):
|
||||||
if node_stack:
|
self.setResult(StartJobResult.SettingError)
|
||||||
for key in node_stack.getAllKeys():
|
return
|
||||||
validation_state = node_stack.getProperty(key, "validationState")
|
|
||||||
if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError):
|
|
||||||
Logger.log("w", "Per object setting %s is not valid, but %s. Aborting slicing.", key, validation_state)
|
|
||||||
self.setResult(StartJobResult.SettingError)
|
|
||||||
return
|
|
||||||
|
|
||||||
Job.yieldThread()
|
|
||||||
|
|
||||||
with self._scene.getSceneLock():
|
with self._scene.getSceneLock():
|
||||||
# Remove old layer data.
|
# Remove old layer data.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user