From c5d443109bb05a07f10da99232e7f94e2ceb635f Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 28 Feb 2018 11:12:44 +0100 Subject: [PATCH] Split MaterialGroup and MaterialNode --- cura/Machines/MaterialGroup.py | 25 +++++++++++++++++++++++++ cura/Machines/MaterialManager.py | 24 ++---------------------- cura/Machines/MaterialNode.py | 21 +++++++++++++++++++++ 3 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 cura/Machines/MaterialGroup.py create mode 100644 cura/Machines/MaterialNode.py diff --git a/cura/Machines/MaterialGroup.py b/cura/Machines/MaterialGroup.py new file mode 100644 index 0000000000..9111cc3a80 --- /dev/null +++ b/cura/Machines/MaterialGroup.py @@ -0,0 +1,25 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +# +# A MaterialGroup represents a group of material InstanceContainers that are derived from a single material profile. +# The main InstanceContainer which has the ID of the material profile file name is called the "root_material". For +# example: "generic_abs" is the root material (ID) of "generic_abs_ultimaker3" and "generic_abs_ultimaker3_AA_0.4", +# and "generic_abs_ultimaker3" and "generic_abs_ultimaker3_AA_0.4" are derived materials of "generic_abs". +# +# Using "generic_abs" as an example, the MaterialGroup for "generic_abs" will contain the following information: +# - name: "generic_abs", root_material_id +# - root_material_node: MaterialNode of "generic_abs" +# - derived_material_node_list: A list of MaterialNodes that are derived from "generic_abs", +# so "generic_abs_ultimaker3", "generic_abs_ultimaker3_AA_0.4", etc. +# +class MaterialGroup: + __slots__ = ("name", "root_material_node", "derived_material_node_list") + + def __init__(self, name: str): + self.name = name + self.root_material_node = None + self.derived_material_node_list = [] + + def __str__(self) -> str: + return "%s[%s]" % (self.__class__.__name__, self.name) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index cbfc822303..44e3468c63 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -6,28 +6,8 @@ from PyQt5.Qt import QTimer, QObject, pyqtSignal from UM.Logger import Logger from UM.Settings import ContainerRegistry -from cura.Machines.ContainerNode import ContainerNode - - -class MaterialGroup: - __slots__ = ("name", "root_material_node", "derived_material_node_list") - - def __init__(self, name: str): - self.name = name - self.root_material_node = None - self.derived_material_node_list = [] - - def __str__(self) -> str: - return "%s[%s]" % (self.__class__.__name__, self.name) - - -class MaterialNode(ContainerNode): - __slots__ = ("material_map", "children_map") - - def __init__(self, metadata: Optional[dict] = None): - super().__init__(metadata = metadata) - self.material_map = {} - self.children_map = {} +from .MaterialNode import MaterialNode +from .MaterialGroup import MaterialGroup class MaterialManager(QObject): diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py new file mode 100644 index 0000000000..fde11186c2 --- /dev/null +++ b/cura/Machines/MaterialNode.py @@ -0,0 +1,21 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Optional + +from .ContainerNode import ContainerNode + + +# +# A MaterialNode is a node in the material lookup tree/map/table. It contains 2 (extra) fields: +# - material_map: a one-to-one map of "material_root_id" to material_node. +# - children_map: the key-value map for child nodes of this node. This is used in a lookup tree. +# +# +class MaterialNode(ContainerNode): + __slots__ = ("material_map", "children_map") + + def __init__(self, metadata: Optional[dict] = None): + super().__init__(metadata = metadata) + self.material_map = {} # material_root_id -> material_node + self.children_map = {} # mapping for the child nodes