Merge branch '2.6'

This commit is contained in:
Ghostkeeper 2017-06-14 10:58:11 +02:00
commit 8bce6e060c
No known key found for this signature in database
GPG key ID: C5F96EE2BC0F7E75
9 changed files with 90 additions and 38 deletions

View file

@ -56,16 +56,14 @@ class XmlMaterialProfile(InstanceContainer):
def setMetaDataEntry(self, key, value):
if self.isReadOnly():
return
if self.getMetaDataEntry(key, None) == value:
# Prevent recursion caused by for loop.
return
super().setMetaDataEntry(key, value)
basefile = self.getMetaDataEntry("base_file", self._id) #if basefile is self.id, this is a basefile.
# Update all containers that share GUID and basefile
# Update all containers that share basefile
for container in ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile):
container.setMetaDataEntry(key, value)
if container.getMetaDataEntry(key, None) != value: # Prevent recursion
container.setMetaDataEntry(key, value)
## Overridden from InstanceContainer, similar to setMetaDataEntry.
# without this function the setName would only set the name of the specific nozzle / material / machine combination container
@ -111,7 +109,7 @@ class XmlMaterialProfile(InstanceContainer):
# container.setDirty(True)
## Overridden from InstanceContainer
# base file: global settings + supported machines
# base file: common settings + supported machines
# machine / variant combination: only changes for itself.
def serialize(self):
registry = ContainerRegistry.getInstance()
@ -426,6 +424,8 @@ class XmlMaterialProfile(InstanceContainer):
meta_data["base_file"] = self.id
meta_data["status"] = "unknown" # TODO: Add material verfication
common_setting_values = {}
inherits = data.find("./um:inherits", self.__namespaces)
if inherits is not None:
inherited = self._resolveInheritance(inherits.text)
@ -455,6 +455,9 @@ class XmlMaterialProfile(InstanceContainer):
continue
meta_data[tag_name] = entry.text
if tag_name in self.__material_metadata_setting_map:
common_setting_values[self.__material_metadata_setting_map[tag_name]] = entry.text
if "description" not in meta_data:
meta_data["description"] = ""
@ -467,45 +470,47 @@ class XmlMaterialProfile(InstanceContainer):
tag_name = _tag_without_namespace(entry)
property_values[tag_name] = entry.text
meta_data["approximate_diameter"] = round(float(property_values.get("diameter", 2.85))) # In mm
if tag_name in self.__material_properties_setting_map:
common_setting_values[self.__material_properties_setting_map[tag_name]] = entry.text
meta_data["approximate_diameter"] = str(round(float(property_values.get("diameter", 2.85)))) # In mm
meta_data["properties"] = property_values
self.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0])
global_compatibility = True
global_setting_values = {}
common_compatibility = True
settings = data.iterfind("./um:settings/um:setting", self.__namespaces)
for entry in settings:
key = entry.get("key")
if key in self.__material_property_setting_map:
global_setting_values[self.__material_property_setting_map[key]] = entry.text
if key in self.__material_settings_setting_map:
common_setting_values[self.__material_settings_setting_map[key]] = entry.text
elif key in self.__unmapped_settings:
if key == "hardware compatible":
global_compatibility = parseBool(entry.text)
common_compatibility = parseBool(entry.text)
else:
Logger.log("d", "Unsupported material setting %s", key)
self._cached_values = global_setting_values
self._cached_values = common_setting_values # from InstanceContainer ancestor
meta_data["compatible"] = global_compatibility
meta_data["compatible"] = common_compatibility
self.setMetaData(meta_data)
self._dirty = False
machines = data.iterfind("./um:settings/um:machine", self.__namespaces)
for machine in machines:
machine_compatibility = global_compatibility
machine_compatibility = common_compatibility
machine_setting_values = {}
settings = machine.iterfind("./um:setting", self.__namespaces)
for entry in settings:
key = entry.get("key")
if key in self.__material_property_setting_map:
machine_setting_values[self.__material_property_setting_map[key]] = entry.text
if key in self.__material_settings_setting_map:
machine_setting_values[self.__material_settings_setting_map[key]] = entry.text
elif key in self.__unmapped_settings:
if key == "hardware compatible":
machine_compatibility = parseBool(entry.text)
else:
Logger.log("d", "Unsupported material setting %s", key)
cached_machine_setting_properties = global_setting_values.copy()
cached_machine_setting_properties = common_setting_values.copy()
cached_machine_setting_properties.update(machine_setting_values)
identifiers = machine.iterfind("./um:machine_identifier", self.__namespaces)
@ -560,8 +565,8 @@ class XmlMaterialProfile(InstanceContainer):
settings = hotend.iterfind("./um:setting", self.__namespaces)
for entry in settings:
key = entry.get("key")
if key in self.__material_property_setting_map:
hotend_setting_values[self.__material_property_setting_map[key]] = entry.text
if key in self.__material_settings_setting_map:
hotend_setting_values[self.__material_settings_setting_map[key]] = entry.text
elif key in self.__unmapped_settings:
if key == "hardware compatible":
hotend_compatibility = parseBool(entry.text)
@ -591,7 +596,7 @@ class XmlMaterialProfile(InstanceContainer):
def _addSettingElement(self, builder, instance):
try:
key = UM.Dictionary.findKey(self.__material_property_setting_map, instance.definition.key)
key = UM.Dictionary.findKey(self.__material_settings_setting_map, instance.definition.key)
except ValueError:
return
@ -606,7 +611,7 @@ class XmlMaterialProfile(InstanceContainer):
return material_name
# Map XML file setting names to internal names
__material_property_setting_map = {
__material_settings_setting_map = {
"print temperature": "default_material_print_temperature",
"heated bed temperature": "material_bed_temperature",
"standby temperature": "material_standby_temperature",
@ -618,6 +623,12 @@ class XmlMaterialProfile(InstanceContainer):
__unmapped_settings = [
"hardware compatible"
]
__material_properties_setting_map = {
"diameter": "material_diameter"
}
__material_metadata_setting_map = {
"GUID": "material_guid"
}
# Map XML file product names to internal ids
# TODO: Move this to definition's metadata