1from UM.Scene.SceneNodeDecorator import SceneNodeDecorator 2from cura.Scene.CuraSceneNode import CuraSceneNode 3 4 5class BuildPlateDecorator(SceneNodeDecorator): 6 """Make a SceneNode build plate aware CuraSceneNode objects all have this decorator.""" 7 8 def __init__(self, build_plate_number: int = -1) -> None: 9 super().__init__() 10 self._build_plate_number = build_plate_number 11 self.setBuildPlateNumber(build_plate_number) 12 13 def setBuildPlateNumber(self, nr: int) -> None: 14 # Make sure that groups are set correctly 15 # setBuildPlateForSelection in CuraActions makes sure that no single childs are set. 16 self._build_plate_number = nr 17 if isinstance(self._node, CuraSceneNode): 18 self._node.transformChanged() # trigger refresh node without introducing a new signal 19 if self._node: 20 for child in self._node.getChildren(): 21 child.callDecoration("setBuildPlateNumber", nr) 22 23 def getBuildPlateNumber(self) -> int: 24 return self._build_plate_number 25 26 def __deepcopy__(self, memo): 27 return BuildPlateDecorator() 28