mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Make 3MF-reader aware of setting-version for introduction Intent.
This commit is contained in:
parent
f8472d6414
commit
16ea437255
2 changed files with 33 additions and 11 deletions
|
@ -1,7 +1,7 @@
|
|||
# Copyright (c) 2018 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import Any, cast, List, Optional
|
||||
from typing import Any, cast, Dict, List, Optional
|
||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject
|
||||
|
||||
from UM.Application import Application
|
||||
|
@ -364,3 +364,22 @@ class _ContainerIndexes:
|
|||
|
||||
# Reverse lookup: type -> index
|
||||
TypeIndexMap = dict([(v, k) for k, v in IndexTypeMap.items()])
|
||||
|
||||
# Mapping to old values before Intent introduction. Used for reading older versions of input files.
|
||||
IndexToOldIndexMap = {
|
||||
UserChanges: 0,
|
||||
QualityChanges: 1,
|
||||
Intent: -1, # Wasn't there in the old 'format'!
|
||||
Quality: 2,
|
||||
Material: 3,
|
||||
Variant: 4,
|
||||
DefinitionChanges: 5,
|
||||
Definition: 6,
|
||||
}
|
||||
|
||||
# Reverse lookup: old index -> new index
|
||||
OldIndexToIndexMap = dict([(v, k) for k, v in IndexToOldIndexMap.items()])
|
||||
|
||||
@classmethod
|
||||
def getIndexMapping(cls, setting_version: int) -> Dict[int, int]:
|
||||
return dict([(x, x) for x in list(range(99))]) if setting_version >= 10 else cls.IndexToOldIndexMap
|
||||
|
|
|
@ -368,7 +368,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
|||
# Get quality type
|
||||
parser = ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
quality_container_id = parser["containers"][str(_ContainerIndexes.Quality)]
|
||||
index_map_version = _ContainerIndexes.getIndexMapping(int(parser["metadata"]["setting_version"]))
|
||||
quality_container_id = parser["containers"][str(index_map_version[_ContainerIndexes.Quality])]
|
||||
quality_type = "empty_quality"
|
||||
if quality_container_id not in ("empty", "empty_quality"):
|
||||
quality_type = instance_container_info_dict[quality_container_id].parser["metadata"]["quality_type"]
|
||||
|
@ -378,10 +379,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
|||
serialized = GlobalStack._updateSerialized(serialized, global_stack_file)
|
||||
parser = ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
definition_changes_id = parser["containers"][str(_ContainerIndexes.DefinitionChanges)]
|
||||
index_map_version = _ContainerIndexes.getIndexMapping(int(parser["metadata"]["setting_version"]))
|
||||
definition_changes_id = parser["containers"][str(index_map_version[_ContainerIndexes.DefinitionChanges])]
|
||||
if definition_changes_id not in ("empty", "empty_definition_changes"):
|
||||
self._machine_info.definition_changes_info = instance_container_info_dict[definition_changes_id]
|
||||
user_changes_id = parser["containers"][str(_ContainerIndexes.UserChanges)]
|
||||
user_changes_id = parser["containers"][str(index_map_version[_ContainerIndexes.UserChanges])]
|
||||
if user_changes_id not in ("empty", "empty_user_changes"):
|
||||
self._machine_info.user_changes_info = instance_container_info_dict[user_changes_id]
|
||||
|
||||
|
@ -391,8 +393,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
|||
|
||||
extruder_info = ExtruderInfo()
|
||||
extruder_info.position = position
|
||||
variant_id = parser["containers"][str(_ContainerIndexes.Variant)]
|
||||
material_id = parser["containers"][str(_ContainerIndexes.Material)]
|
||||
variant_id = parser["containers"][str(index_map_version[_ContainerIndexes.Variant])]
|
||||
material_id = parser["containers"][str(index_map_version[_ContainerIndexes.Material])]
|
||||
if variant_id not in ("empty", "empty_variant"):
|
||||
extruder_info.variant_info = instance_container_info_dict[variant_id]
|
||||
if material_id not in ("empty", "empty_material"):
|
||||
|
@ -400,7 +402,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
|||
extruder_info.root_material_id = root_material_id
|
||||
self._machine_info.extruder_info_dict[position] = extruder_info
|
||||
else:
|
||||
variant_id = parser["containers"][str(_ContainerIndexes.Variant)]
|
||||
variant_id = parser["containers"][str(index_map_version[_ContainerIndexes.Variant])]
|
||||
if variant_id not in ("empty", "empty_variant"):
|
||||
self._machine_info.variant_info = instance_container_info_dict[variant_id]
|
||||
|
||||
|
@ -412,13 +414,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
|||
serialized = ExtruderStack._updateSerialized(serialized, extruder_stack_file)
|
||||
parser = ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
index_map_version = _ContainerIndexes.getIndexMapping(int(parser["metadata"]["setting_version"]))
|
||||
|
||||
# The check should be done for the extruder stack that's associated with the existing global stack,
|
||||
# and those extruder stacks may have different IDs.
|
||||
# So we check according to the positions
|
||||
position = parser["metadata"]["position"]
|
||||
variant_id = parser["containers"][str(_ContainerIndexes.Variant)]
|
||||
material_id = parser["containers"][str(_ContainerIndexes.Material)]
|
||||
variant_id = parser["containers"][str(index_map_version[_ContainerIndexes.Variant])]
|
||||
material_id = parser["containers"][str(index_map_version[_ContainerIndexes.Material])]
|
||||
|
||||
extruder_info = ExtruderInfo()
|
||||
extruder_info.position = position
|
||||
|
@ -432,11 +435,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
|||
root_material_id = reverse_material_id_dict[material_id]
|
||||
extruder_info.root_material_id = root_material_id
|
||||
|
||||
definition_changes_id = parser["containers"][str(_ContainerIndexes.DefinitionChanges)]
|
||||
definition_changes_id = parser["containers"][str(index_map_version[_ContainerIndexes.DefinitionChanges])]
|
||||
if definition_changes_id not in ("empty", "empty_definition_changes"):
|
||||
extruder_info.definition_changes_info = instance_container_info_dict[definition_changes_id]
|
||||
|
||||
user_changes_id = parser["containers"][str(_ContainerIndexes.UserChanges)]
|
||||
user_changes_id = parser["containers"][str(index_map_version[_ContainerIndexes.UserChanges])]
|
||||
if user_changes_id not in ("empty", "empty_user_changes"):
|
||||
extruder_info.user_changes_info = instance_container_info_dict[user_changes_id]
|
||||
self._machine_info.extruder_info_dict[position] = extruder_info
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue