diff options
author | Lipu Fei <lipu.fei815@gmail.com> | 2018-02-18 00:23:49 +0300 |
---|---|---|
committer | Lipu Fei <lipu.fei815@gmail.com> | 2018-02-18 00:24:05 +0300 |
commit | 495fc8bbd705f5145fe8312207b3f048a7dcc106 (patch) | |
tree | 6969e6cfe2523a181b7f7f980988e7d990b77da3 | |
parent | 1c8f63e47fe7840905d5c844aba0ce475b011e5d (diff) |
WIP: Refactor BuildPlateModel and split MultiBuildPlateModel
27 files changed, 172 insertions, 111 deletions
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 395d6655cb..b369ebcfed 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -53,10 +53,13 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.SettingFunction import SettingFunction from cura.Settings.MachineNameValidator import MachineNameValidator +from cura.Machines.Models.BuildPlateModel import BuildPlateModel from cura.Machines.Models.NozzleModel import NozzleModel from cura.Machines.Models.QualityProfilesModel import QualityProfilesModel from cura.Machines.Models.CustomQualityProfilesModel import CustomQualityProfilesModel +from cura.Machines.Models.Other.MultiBuildPlateModel import MultiBuildPlateModel + from cura.Settings.MaterialsModel import MaterialsModel, BrandMaterialsModel, GenericMaterialsModel, NewMaterialsModel from cura.Settings.SettingInheritanceManager import SettingInheritanceManager from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager @@ -84,7 +87,6 @@ from cura.Settings.QualitySettingsModel import QualitySettingsModel from cura.Settings.ContainerManager import ContainerManager from cura.ObjectsModel import ObjectsModel -from cura.BuildPlateModel import BuildPlateModel from PyQt5.QtCore import QUrl, pyqtSignal, pyqtProperty, QEvent, Q_ENUMS from UM.FlameProfiler import pyqtSlot @@ -219,6 +221,7 @@ class CuraApplication(QtApplication): self._material_manager = None self._object_manager = None self._build_plate_model = None + self._multi_build_plate_model = None self._setting_inheritance_manager = None self._simple_mode_settings_manager = None self._cura_scene_controller = None @@ -858,10 +861,14 @@ class CuraApplication(QtApplication): self._object_manager = ObjectsModel.createObjectsModel() return self._object_manager + def getMultiBuildPlateModel(self, *args): + if self._multi_build_plate_model is None: + self._multi_build_plate_model = MultiBuildPlateModel(self) + return self._multi_build_plate_model + def getBuildPlateModel(self, *args): if self._build_plate_model is None: - self._build_plate_model = BuildPlateModel.createBuildPlateModel() - + self._build_plate_model = BuildPlateModel(self) return self._build_plate_model def getCuraSceneController(self, *args): @@ -923,15 +930,16 @@ class CuraApplication(QtApplication): qmlRegisterUncreatableType(CuraApplication, "Cura", 1, 0, "ResourceTypes", "Just an Enum type") - qmlRegisterSingletonType(CuraSceneController, "Cura", 1, 2, "SceneController", self.getCuraSceneController) + qmlRegisterSingletonType(CuraSceneController, "Cura", 1, 0, "SceneController", self.getCuraSceneController) qmlRegisterSingletonType(ExtruderManager, "Cura", 1, 0, "ExtruderManager", self.getExtruderManager) qmlRegisterSingletonType(MachineManager, "Cura", 1, 0, "MachineManager", self.getMachineManager) qmlRegisterSingletonType(SettingInheritanceManager, "Cura", 1, 0, "SettingInheritanceManager", self.getSettingInheritanceManager) - qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 2, "SimpleModeSettingsManager", self.getSimpleModeSettingsManager) + qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 0, "SimpleModeSettingsManager", self.getSimpleModeSettingsManager) qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager) - qmlRegisterSingletonType(ObjectsModel, "Cura", 1, 2, "ObjectsModel", self.getObjectsModel) - qmlRegisterSingletonType(BuildPlateModel, "Cura", 1, 2, "BuildPlateModel", self.getBuildPlateModel) + qmlRegisterSingletonType(ObjectsModel, "Cura", 1, 0, "ObjectsModel", self.getObjectsModel) + qmlRegisterSingletonType(BuildPlateModel, "Cura", 1, 0, "BuildPlateModel", self.getBuildPlateModel) + qmlRegisterSingletonType(MultiBuildPlateModel, "Cura", 1, 0, "MultiBuildPlateModel", self.getMultiBuildPlateModel) qmlRegisterType(InstanceContainer, "Cura", 1, 0, "InstanceContainer") qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel") qmlRegisterType(ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel") @@ -951,7 +959,7 @@ class CuraApplication(QtApplication): qmlRegisterType(MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler") qmlRegisterType(QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel") qmlRegisterType(MachineNameValidator, "Cura", 1, 0, "MachineNameValidator") - qmlRegisterType(UserChangesModel, "Cura", 1, 1, "UserChangesModel") + qmlRegisterType(UserChangesModel, "Cura", 1, 0, "UserChangesModel") qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, "ContainerManager", ContainerManager.createContainerManager) # As of Qt5.7, it is necessary to get rid of any ".." in the path for the singleton to work. @@ -1033,7 +1041,7 @@ class CuraApplication(QtApplication): count = 0 scene_bounding_box = None is_block_slicing_node = False - active_build_plate = self.getBuildPlateModel().activeBuildPlate + active_build_plate = self._multi_build_plate_model.activeBuildPlate for node in DepthFirstIterator(self.getController().getScene().getRoot()): if ( not issubclass(type(node), CuraSceneNode) or @@ -1282,7 +1290,7 @@ class CuraApplication(QtApplication): @pyqtSlot() def arrangeAll(self): nodes = [] - active_build_plate = self.getBuildPlateModel().activeBuildPlate + active_build_plate = self._multi_build_plate_model.activeBuildPlate for node in DepthFirstIterator(self.getController().getScene().getRoot()): if not isinstance(node, SceneNode): continue @@ -1431,7 +1439,7 @@ class CuraApplication(QtApplication): group_decorator = GroupDecorator() group_node.addDecorator(group_decorator) group_node.addDecorator(ConvexHullDecorator()) - group_node.addDecorator(BuildPlateDecorator(self.getBuildPlateModel().activeBuildPlate)) + group_node.addDecorator(BuildPlateDecorator(self._multi_build_plate_model.activeBuildPlate)) group_node.setParent(self.getController().getScene().getRoot()) group_node.setSelectable(True) center = Selection.getSelectionCenter() @@ -1576,7 +1584,7 @@ class CuraApplication(QtApplication): arrange_objects_on_load = ( not Preferences.getInstance().getValue("cura/use_multi_build_plate") or not Preferences.getInstance().getValue("cura/not_arrange_objects_on_load")) - target_build_plate = self.getBuildPlateModel().activeBuildPlate if arrange_objects_on_load else -1 + target_build_plate = self._multi_build_plate_model.activeBuildPlate if arrange_objects_on_load else -1 root = self.getController().getScene().getRoot() fixed_nodes = [] diff --git a/cura/Machines/Models/BuildPlateModel.py b/cura/Machines/Models/BuildPlateModel.py new file mode 100644 index 0000000000..ff623eeca7 --- /dev/null +++ b/cura/Machines/Models/BuildPlateModel.py @@ -0,0 +1,40 @@ +from PyQt5.QtCore import Qt + +from UM.Application import Application +from UM.Qt.ListModel import ListModel + +from cura.Machines.VariantManager import VariantType + + +class BuildPlateModel(ListModel): + NameRole = Qt.UserRole + 1 + ContainerNodeRole = Qt.UserRole + 2 + + def __init__(self, parent = None): + super().__init__(parent) + + self.addRoleName(self.NameRole, "name") + self.addRoleName(self.ContainerNodeRole, "container_node") + + self._application = Application.getInstance() + self._variant_manager = self._application._variant_manager + self._machine_manager = self._application.getMachineManager() + + self._machine_manager.globalContainerChanged.connect(self._update) + + self._update() + + def _update(self): + global_stack = self._machine_manager._global_container_stack + if not global_stack: + self.setItems([]) + return + + variant_dict = self._variant_manager.getVariantNodes(global_stack, variant_type = VariantType.BUILD_PLATE) + + item_list = [] + for name, variant_node in variant_dict.items(): + item = {"name": name, + "container_node": variant_node} + item_list.append(item) + self.setItems(item_list) diff --git a/cura/BuildPlateModel.py b/cura/Machines/Models/Other/MultiBuildPlateModel.py index 73f61202c6..78ad458a99 100644 --- a/cura/BuildPlateModel.py +++ b/cura/Machines/Models/Other/MultiBuildPlateModel.py @@ -1,24 +1,25 @@ -from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot +from PyQt5.QtCore import pyqtSignal, pyqtProperty -from UM.Qt.ListModel import ListModel -from UM.Scene.Selection import Selection -from UM.Logger import Logger from UM.Application import Application +from UM.Scene.Selection import Selection +from UM.Qt.ListModel import ListModel -class BuildPlateModel(ListModel): +class MultiBuildPlateModel(ListModel): + maxBuildPlateChanged = pyqtSignal() activeBuildPlateChanged = pyqtSignal() selectionChanged = pyqtSignal() - def __init__(self): - super().__init__() - Application.getInstance().getController().getScene().sceneChanged.connect(self._updateSelectedObjectBuildPlateNumbers) + def __init__(self, parent = None): + super().__init__(parent) + + self._application = Application.getInstance() + self._application.getController().getScene().sceneChanged.connect(self._updateSelectedObjectBuildPlateNumbers) Selection.selectionChanged.connect(self._updateSelectedObjectBuildPlateNumbers) self._max_build_plate = 1 # default self._active_build_plate = -1 - self._selection_build_plates = [] def setMaxBuildPlate(self, max_build_plate): self._max_build_plate = max_build_plate @@ -37,10 +38,6 @@ class BuildPlateModel(ListModel): def activeBuildPlate(self): return self._active_build_plate - @staticmethod - def createBuildPlateModel(): - return BuildPlateModel() - def _updateSelectedObjectBuildPlateNumbers(self, *args): result = set() for node in Selection.getAllSelectedObjects(): diff --git a/cura/Machines/Models/Other/__init__.py b/cura/Machines/Models/Other/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/cura/Machines/Models/Other/__init__.py diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index 8b6fbb1f28..9cbd7aec7e 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -76,15 +76,18 @@ class PrintInformation(QObject): self._active_build_plate = 0 self._initVariablesWithBuildPlate(self._active_build_plate) - Application.getInstance().globalContainerStackChanged.connect(self._updateJobName) - Application.getInstance().fileLoaded.connect(self.setBaseName) - Application.getInstance().getBuildPlateModel().activeBuildPlateChanged.connect(self._onActiveBuildPlateChanged) - Application.getInstance().workspaceLoaded.connect(self.setProjectName) + self._application = Application.getInstance() + self._multi_build_plate_model = self._application.getMultiBuildPlateModel() + + self._application.globalContainerStackChanged.connect(self._updateJobName) + self._application.fileLoaded.connect(self.setBaseName) + self._application.workspaceLoaded.connect(self.setProjectName) + self._multi_build_plate_model.activeBuildPlateChanged.connect(self._onActiveBuildPlateChanged) Preferences.getInstance().preferenceChanged.connect(self._onPreferencesChanged) self._active_material_container = None - Application.getInstance().getMachineManager().activeMaterialChanged.connect(self._onActiveMaterialChanged) + self._application.getMachineManager().activeMaterialChanged.connect(self._onActiveMaterialChanged) self._onActiveMaterialChanged() self._material_amounts = [] @@ -260,7 +263,7 @@ class PrintInformation(QObject): if preference != "cura/material_settings": return - for build_plate_number in range(Application.getInstance().getBuildPlateModel().maxBuildPlate + 1): + for build_plate_number in range(self._multi_build_plate_model.maxBuildPlate + 1): self._calculateInformation(build_plate_number) def _onActiveMaterialChanged(self): @@ -278,7 +281,7 @@ class PrintInformation(QObject): self._active_material_container.metaDataChanged.connect(self._onMaterialMetaDataChanged) def _onActiveBuildPlateChanged(self): - new_active_build_plate = Application.getInstance().getBuildPlateModel().activeBuildPlate + new_active_build_plate = self._multi_build_plate_model.activeBuildPlate if new_active_build_plate != self._active_build_plate: self._active_build_plate = new_active_build_plate @@ -291,7 +294,7 @@ class PrintInformation(QObject): self.currentPrintTimeChanged.emit() def _onMaterialMetaDataChanged(self, *args, **kwargs): - for build_plate_number in range(Application.getInstance().getBuildPlateModel().maxBuildPlate + 1): + for build_plate_number in range(self._multi_build_plate_model.maxBuildPlate + 1): self._calculateInformation(build_plate_number) @pyqtSlot(str) diff --git a/cura/Scene/ConvexHullNode.py b/cura/Scene/ConvexHullNode.py index 6c8c201498..1131958627 100644 --- a/cura/Scene/ConvexHullNode.py +++ b/cura/Scene/ConvexHullNode.py @@ -68,7 +68,7 @@ class ConvexHullNode(SceneNode): ConvexHullNode.shader.setUniformValue("u_opacity", 0.6) if self.getParent(): - if self.getMeshData() and isinstance(self._node, SceneNode) and self._node.callDecoration("getBuildPlateNumber") == Application.getInstance().getBuildPlateModel().activeBuildPlate: + if self.getMeshData() and isinstance(self._node, SceneNode) and self._node.callDecoration("getBuildPlateNumber") == Application.getInstance().getMultiBuildPlateModel().activeBuildPlate: renderer.queueNode(self, transparent = True, shader = ConvexHullNode.shader, backface_cull = True, sort = -8) if self._convex_hull_head_mesh: renderer.queueNode(self, shader = ConvexHullNode.shader, transparent = True, mesh = self._convex_hull_head_mesh, backface_cull = True, sort = -8) diff --git a/cura/Scene/CuraSceneController.py b/cura/Scene/CuraSceneController.py index 1c008d1893..d60179ae08 100644 --- a/cura/Scene/CuraSceneController.py +++ b/cura/Scene/CuraSceneController.py @@ -4,7 +4,7 @@ from PyQt5.QtCore import Qt, pyqtSlot, QObject from PyQt5.QtWidgets import QApplication from cura.ObjectsModel import ObjectsModel -from cura.BuildPlateModel import BuildPlateModel +from cura.Machines.Models.Other.MultiBuildPlateModel import MultiBuildPlateModel from UM.Application import Application from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator @@ -16,11 +16,11 @@ from UM.Signal import Signal class CuraSceneController(QObject): activeBuildPlateChanged = Signal() - def __init__(self, objects_model: ObjectsModel, build_plate_model: BuildPlateModel): + def __init__(self, objects_model: ObjectsModel, multi_build_plate_model: MultiBuildPlateModel): super().__init__() self._objects_model = objects_model - self._build_plate_model = build_plate_model + self._multi_build_plate_model = multi_build_plate_model self._active_build_plate = -1 self._last_selected_index = 0 @@ -41,9 +41,9 @@ class CuraSceneController(QObject): self._max_build_plate = max_build_plate changed = True if changed: - self._build_plate_model.setMaxBuildPlate(self._max_build_plate) + self._multi_build_plate_model.setMaxBuildPlate(self._max_build_plate) build_plates = [{"name": "Build Plate %d" % (i + 1), "buildPlateNumber": i} for i in range(self._max_build_plate + 1)] - self._build_plate_model.setItems(build_plates) + self._multi_build_plate_model.setItems(build_plates) if self._active_build_plate > self._max_build_plate: build_plate_number = 0 if self._last_selected_index >= 0: # go to the buildplate of the item you last selected @@ -104,12 +104,12 @@ class CuraSceneController(QObject): self._active_build_plate = nr Selection.clear() - self._build_plate_model.setActiveBuildPlate(nr) + self._multi_build_plate_model.setActiveBuildPlate(nr) self._objects_model.setActiveBuildPlate(nr) self.activeBuildPlateChanged.emit() @staticmethod def createCuraSceneController(): objects_model = Application.getInstance().getObjectsModel() - build_plate_model = Application.getInstance().getBuildPlateModel() - return CuraSceneController(objects_model = objects_model, build_plate_model = build_plate_model) + multi_build_plate_model = Application.getInstance().getMultiBuildPlateModel() + return CuraSceneController(objects_model = objects_model, multi_build_plate_model = multi_build_plate_model) diff --git a/cura/Scene/CuraSceneNode.py b/cura/Scene/CuraSceneNode.py index 969d491f49..df346baaad 100644 --- a/cura/Scene/CuraSceneNode.py +++ b/cura/Scene/CuraSceneNode.py @@ -20,10 +20,10 @@ class CuraSceneNode(SceneNode): return self._outside_buildarea or self.callDecoration("getBuildPlateNumber") < 0 def isVisible(self): - return super().isVisible() and self.callDecoration("getBuildPlateNumber") == Application.getInstance().getBuildPlateModel().activeBuildPlate + return super().isVisible() and self.callDecoration("getBuildPlateNumber") == Application.getInstance().getMultiBuildPlateModel().activeBuildPlate def isSelectable(self) -> bool: - return super().isSelectable() and self.callDecoration("getBuildPlateNumber") == Application.getInstance().getBuildPlateModel().activeBuildPlate + return super().isSelectable() and self.callDecoration("getBuildPlateNumber") == Application.getInstance().getMultiBuildPlateModel().activeBuildPlate ## Get the extruder used to print this node. If there is no active node, then the extruder in position zero is returned # TODO The best way to do it is by adding the setActiveExtruder decorator to every node when is loaded diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e53145ee87..9f25e27a5c 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -545,11 +545,11 @@ class MachineManager(QObject): return "" @pyqtProperty(str, notify=activeVariantChanged) - def globalVariantId(self) -> str: + def globalVariantName(self) -> str: if self._global_container_stack: variant = self._global_container_stack.variant if variant and not isinstance(variant, type(self._empty_variant_container)): - return variant.getId() + return variant.getName() return "" @pyqtProperty(str, notify = activeQualityChanged) @@ -1319,6 +1319,9 @@ class MachineManager(QObject): def _setVariantNode(self, position, container_node): self._global_container_stack.extruders[position].variant = container_node.getContainer() + def _setGlobalVariant(self, container_node): + self._global_container_stack.variant = container_node.getContainer() + def _setMaterial(self, position, container_node = None): if container_node: self._global_container_stack.extruders[position].material = container_node.getContainer() @@ -1354,22 +1357,33 @@ class MachineManager(QObject): self._setQualityGroup(candidate_quality_groups[quality_type], empty_quality_changes = False) - def _updateMaterialWithVariant(self, position, current_material_base_name, current_variant_name): - material_manager = Application.getInstance()._material_manager - material_diameter = self._global_container_stack.getProperty("material_diameter", "value") - candidate_materials = material_manager.getAvailableMaterials( - self._global_container_stack.getId(), - current_variant_name, - material_diameter) + def _updateMaterialWithVariant(self, position: Optional[str]): + if position is None: + position_list = list(self._global_container_stack.extruders.keys()) + else: + position_list = [position] - if not candidate_materials: - self._setMaterial(position, container_node = None) - return + for position in position_list: + extruder = self._global_container_stack.extruders[position] - if current_material_base_name in candidate_materials: - new_material = candidate_materials[current_material_base_name] - self._setMaterial(position, new_material) - return + current_material_base_name = extruder.material.getMetaDataEntry("base_file") + current_variant_name = extruder.variant.getMetaDataEntry("name") + + material_manager = Application.getInstance()._material_manager + material_diameter = self._global_container_stack.getProperty("material_diameter", "value") + candidate_materials = material_manager.getAvailableMaterials( + self._global_container_stack.getId(), + current_variant_name, + material_diameter) + + if not candidate_materials: + self._setMaterial(position, container_node = None) + continue + + if current_material_base_name in candidate_materials: + new_material = candidate_materials[current_material_base_name] + self._setMaterial(position, new_material) + continue # # Find a fallback material # preferred_material_query = self._global_container_stack.getMetaDataEntry("preferred_material") @@ -1378,6 +1392,15 @@ class MachineManager(QObject): # self._setMaterial(position, candidate_materials[preferred_material_key]) # return + @pyqtSlot("QVariant") + def setGlobalVariant(self, container_node): + Logger.log("d", "---------------- container = [%s]", container_node) + self.blurSettings.emit() + with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): + self._setGlobalVariant(container_node) + self._updateMaterialWithVariant(None) # Update all materials + self._updateQualityWithMaterial() + @pyqtSlot(str, "QVariant") def setMaterial(self, position, container_node): Logger.log("d", "---------------- container = [%s]", container_node) @@ -1394,9 +1417,7 @@ class MachineManager(QObject): self.blurSettings.emit() with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self._setVariantNode(position, container_node) - current_variant_name = container_node.metadata["name"] - current_material_base_name = self._global_container_stack.extruders[position].material.getMetaDataEntry("base_file") - self._updateMaterialWithVariant(position, current_material_base_name, current_variant_name) + self._updateMaterialWithVariant(position) self._updateQualityWithMaterial() @pyqtSlot("QVariant") diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 1726818100..907c1c44b7 100755 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -77,7 +77,7 @@ class ThreeMFReader(MeshReader): self._object_count += 1 node_name = "Object %s" % self._object_count - active_build_plate = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate um_node = CuraSceneNode() um_node.addDecorator(BuildPlateDecorator(active_build_plate)) diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index c4b7035cf1..ff6333763a 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -68,7 +68,7 @@ class ThreeMFWriter(MeshWriter): if not isinstance(um_node, SceneNode): return None - active_build_plate_nr = CuraApplication.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate_nr = CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate if um_node.callDecoration("getBuildPlateNumber") != active_build_plate_nr: return diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 1c275d6d5b..cd4f74141b 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -70,7 +70,7 @@ class CuraEngineBackend(QObject, Backend): # Workaround to disable layer view processing if layer view is not active. self._layer_view_active = False Application.getInstance().getController().activeViewChanged.connect(self._onActiveViewChanged) - Application.getInstance().getBuildPlateModel().activeBuildPlateChanged.connect(self._onActiveViewChanged) + Application.getInstance().getMultiBuildPlateModel().activeBuildPlateChanged.connect(self._onActiveViewChanged) self._onActiveViewChanged() self._stored_layer_data = [] self._stored_optimized_layer_data = {} # key is build plate number, then arrays are stored until they go to the ProcessSlicesLayersJob @@ -207,7 +207,7 @@ class CuraEngineBackend(QObject, Backend): self._scene.gcode_dict = {} # see if we really have to slice - active_build_plate = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate build_plate_to_be_sliced = self._build_plates_to_be_sliced.pop(0) Logger.log("d", "Going to slice build plate [%s]!" % build_plate_to_be_sliced) num_objects = self._numObjects() @@ -497,7 +497,7 @@ class CuraEngineBackend(QObject, Backend): node.getParent().removeChild(node) def markSliceAll(self): - for build_plate_number in range(Application.getInstance().getBuildPlateModel().maxBuildPlate + 1): + for build_plate_number in range(Application.getInstance().getMultiBuildPlateModel().maxBuildPlate + 1): if build_plate_number not in self._build_plates_to_be_sliced: self._build_plates_to_be_sliced.append(build_plate_number) @@ -582,7 +582,7 @@ class CuraEngineBackend(QObject, Backend): Logger.log("d", "Slicing took %s seconds", time() - self._slice_start_time ) # See if we need to process the sliced layers job. - active_build_plate = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate if self._layer_view_active and (self._process_layers_job is None or not self._process_layers_job.isRunning()) and active_build_plate == self._start_slice_job_build_plate: self._startProcessSlicedLayersJob(active_build_plate) # self._onActiveViewChanged() @@ -702,7 +702,7 @@ class CuraEngineBackend(QObject, Backend): application = Application.getInstance() view = application.getController().getActiveView() if view: - active_build_plate = application.getBuildPlateModel().activeBuildPlate + active_build_plate = application.getMultiBuildPlateModel().activeBuildPlate if view.getPluginId() == "SimulationView": # If switching to layer view, we should process the layers if that hasn't been done yet. self._layer_view_active = True # There is data and we're not slicing at the moment diff --git a/plugins/CuraEngineBackend/ProcessGCodeJob.py b/plugins/CuraEngineBackend/ProcessGCodeJob.py index ed430f8fa9..817daa9f85 100644 --- a/plugins/CuraEngineBackend/ProcessGCodeJob.py +++ b/plugins/CuraEngineBackend/ProcessGCodeJob.py @@ -12,6 +12,6 @@ class ProcessGCodeLayerJob(Job): self._message = message def run(self): - active_build_plate_id = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate_id = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate gcode_list = self._scene.gcode_dict[active_build_plate_id] gcode_list.append(self._message.data.decode("utf-8", "replace")) diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index f63ba3ca69..c064ffbf10 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -437,7 +437,7 @@ class FlavorParser: scene_node.addDecorator(gcode_list_decorator) # gcode_dict stores gcode_lists for a number of build plates. - active_build_plate_id = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate_id = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate gcode_dict = {active_build_plate_id: gcode_list} Application.getInstance().getController().getScene().gcode_dict = gcode_dict diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index 368942fd08..ede0e2c251 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -60,7 +60,7 @@ class GCodeWriter(MeshWriter): Logger.log("e", "GCodeWriter does not support non-text mode.") return False - active_build_plate = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate scene = Application.getInstance().getController().getScene() gcode_dict = getattr(scene, "gcode_dict") if not gcode_dict: diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py index f491afbec0..566b05abf3 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py @@ -62,7 +62,7 @@ class PostProcessingPlugin(QObject, Extension): return # get gcode list for the active build plate - active_build_plate_id = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate_id = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate gcode_list = gcode_dict[active_build_plate_id] if not gcode_list: return diff --git a/plugins/SimulationView/SimulationPass.py b/plugins/SimulationView/SimulationPass.py index 76d7127534..cd0eda2929 100644 --- a/plugins/SimulationView/SimulationPass.py +++ b/plugins/SimulationView/SimulationPass.py @@ -93,7 +93,7 @@ class SimulationPass(RenderPass): self.bind() tool_handle_batch = RenderBatch(self._tool_handle_shader, type = RenderBatch.RenderType.Overlay, backface_cull = True) - active_build_plate = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate head_position = None # Indicates the current position of the print head nozzle_node = None diff --git a/plugins/SupportEraser/SupportEraser.py b/plugins/SupportEraser/SupportEraser.py index 9e2d41014d..ddc6b96c3a 100644 --- a/plugins/SupportEraser/SupportEraser.py +++ b/plugins/SupportEraser/SupportEraser.py @@ -42,7 +42,7 @@ class SupportEraser(Tool): mesh.addCube(10,10,10) node.setMeshData(mesh.build()) - active_build_plate = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate node.addDecorator(SettingOverrideDecorator()) node.addDecorator(BuildPlateDecorator(active_build_plate)) diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py index 26b445ef90..0b5a0696c6 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py @@ -81,7 +81,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self.writeStarted.emit(self) gcode_dict = getattr(Application.getInstance().getController().getScene(), "gcode_dict", []) - active_build_plate_id = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate_id = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate gcode_list = gcode_dict[active_build_plate_id] if not gcode_list: diff --git a/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py b/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py index 647a7f822c..512671b3b3 100644 --- a/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py @@ -184,7 +184,7 @@ class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): self.writeStarted.emit(self) gcode_dict = getattr(Application.getInstance().getController().getScene(), "gcode_dict", []) - active_build_plate_id = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate_id = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate gcode_list = gcode_dict[active_build_plate_id] if not gcode_list: diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index b53f502d81..6e2b5153db 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -99,7 +99,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): Application.getInstance().getController().setActiveStage("MonitorStage") # find the G-code for the active build plate to print - active_build_plate_id = Application.getInstance().getBuildPlateModel().activeBuildPlate + active_build_plate_id = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate gcode_dict = getattr(Application.getInstance().getController().getScene(), "gcode_dict") gcode_list = gcode_dict[active_build_plate_id] diff --git a/resources/qml/DiscardOrKeepProfileChangesDialog.qml b/resources/qml/DiscardOrKeepProfileChangesDialog.qml index 915a11fde2..afa9fda0bd 100644 --- a/resources/qml/DiscardOrKeepProfileChangesDialog.qml +++ b/resources/qml/DiscardOrKeepProfileChangesDialog.qml @@ -7,7 +7,7 @@ import QtQuick.Dialogs 1.2 import QtQuick.Window 2.1 import UM 1.2 as UM -import Cura 1.1 as Cura +import Cura 1.0 as Cura UM.Dialog { diff --git a/resources/qml/Menus/BuildplateMenu.qml b/resources/qml/Menus/BuildplateMenu.qml index 2679eec1d1..8dfc3ced6c 100644 --- a/resources/qml/Menus/BuildplateMenu.qml +++ b/resources/qml/Menus/BuildplateMenu.qml @@ -14,26 +14,18 @@ Menu Instantiator { - id: buildplateInstantiator - model: UM.InstanceContainersModel - { - filter: - { - "type": "variant", - "hardware_type": "buildplate", - "definition": Cura.MachineManager.activeDefinitionId //Only show variants of this machine - } - } + model: Cura.BuildPlateModel + MenuItem { text: model.name checkable: true - checked: model.id == Cura.MachineManager.globalVariantId + checked: model.name == Cura.MachineManager.globalVariantName // TODO exclusiveGroup: group - onTriggered: - { - Cura.MachineManager.setActiveVariantBuildplate(model.id); + onTriggered: { + Cura.MachineManager.setGlobalVariant(model.container_node); // TODO } } + onObjectAdded: menu.insertItem(index, object) onObjectRemoved: menu.removeItem(object) } diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index b5f51f4d63..a37204d255 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -7,7 +7,7 @@ import QtQuick.Dialogs 1.2 import QtQuick.Window 2.1 import UM 1.2 as UM -import Cura 1.2 as Cura +import Cura 1.0 as Cura Menu { @@ -45,13 +45,13 @@ Menu Instantiator { - model: Cura.BuildPlateModel + model: Cura.MultiBuildPlateModel MenuItem { enabled: UM.Selection.hasSelection - text: Cura.BuildPlateModel.getItem(index).name; - onTriggered: CuraActions.setBuildPlateForSelection(Cura.BuildPlateModel.getItem(index).buildPlateNumber); + text: Cura.MultiBuildPlateModel.getItem(index).name; + onTriggered: CuraActions.setBuildPlateForSelection(Cura.MultiBuildPlateModel.getItem(index).buildPlateNumber); checkable: true - checked: Cura.BuildPlateModel.selectionBuildPlates.indexOf(Cura.BuildPlateModel.getItem(index).buildPlateNumber) != -1; + checked: Cura.MultiBuildPlateModel.selectionBuildPlates.indexOf(Cura.MultiBuildPlateModel.getItem(index).buildPlateNumber) != -1; visible: UM.Preferences.getValue("cura/use_multi_build_plate") } onObjectAdded: base.insertItem(index, object); @@ -62,7 +62,7 @@ Menu enabled: UM.Selection.hasSelection text: "New build plate"; onTriggered: { - CuraActions.setBuildPlateForSelection(Cura.BuildPlateModel.maxBuildPlate + 1); + CuraActions.setBuildPlateForSelection(Cura.MultiBuildPlateModel.maxBuildPlate + 1); checked = false; } checkable: true diff --git a/resources/qml/Menus/ViewMenu.qml b/resources/qml/Menus/ViewMenu.qml index afc80dd314..ff749bec90 100644 --- a/resources/qml/Menus/ViewMenu.qml +++ b/resources/qml/Menus/ViewMenu.qml @@ -5,7 +5,7 @@ import QtQuick 2.2 import QtQuick.Controls 1.1 import UM 1.2 as UM -import Cura 1.2 as Cura +import Cura 1.0 as Cura Menu { @@ -53,12 +53,12 @@ Menu visible: UM.Preferences.getValue("cura/use_multi_build_plate") Instantiator { - model: Cura.BuildPlateModel + model: Cura.MultiBuildPlateModel MenuItem { - text: Cura.BuildPlateModel.getItem(index).name; - onTriggered: Cura.SceneController.setActiveBuildPlate(Cura.BuildPlateModel.getItem(index).buildPlateNumber); + text: Cura.MultiBuildPlateModel.getItem(index).name; + onTriggered: Cura.SceneController.setActiveBuildPlate(Cura.MultiBuildPlateModel.getItem(index).buildPlateNumber); checkable: true; - checked: Cura.BuildPlateModel.getItem(index).buildPlateNumber == Cura.BuildPlateModel.activeBuildPlate; + checked: Cura.MultiBuildPlateModel.getItem(index).buildPlateNumber == Cura.MultiBuildPlateModel.activeBuildPlate; exclusiveGroup: buildPlateGroup; visible: UM.Preferences.getValue("cura/use_multi_build_plate") } diff --git a/resources/qml/ObjectsList.qml b/resources/qml/ObjectsList.qml index b64f08d003..f51e1081e6 100644 --- a/resources/qml/ObjectsList.qml +++ b/resources/qml/ObjectsList.qml @@ -8,7 +8,7 @@ import QtQuick.Layouts 1.1 import QtQuick.Dialogs 1.1 import UM 1.3 as UM -import Cura 1.2 as Cura +import Cura 1.0 as Cura import "Menus" @@ -67,7 +67,7 @@ Rectangle Rectangle { height: childrenRect.height - color: Cura.BuildPlateModel.getItem(index).buildPlateNumber == Cura.BuildPlateModel.activeBuildPlate ? palette.highlight : index % 2 ? palette.base : palette.alternateBase + color: Cura.MultiBuildPlateModel.getItem(index).buildPlateNumber == Cura.MultiBuildPlateModel.activeBuildPlate ? palette.highlight : index % 2 ? palette.base : palette.alternateBase width: parent.width Label { @@ -75,8 +75,8 @@ Rectangle anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width width: parent.width - 2 * UM.Theme.getSize("default_margin").width - 30 - text: Cura.BuildPlateModel.getItem(index) ? Cura.BuildPlateModel.getItem(index).name : ""; - color: Cura.BuildPlateModel.activeBuildPlate == index ? palette.highlightedText : palette.text + text: Cura.MultiBuildPlateModel.getItem(index) ? Cura.MultiBuildPlateModel.getItem(index).name : ""; + color: Cura.MultiBuildPlateModel.activeBuildPlate == index ? palette.highlightedText : palette.text elide: Text.ElideRight } @@ -118,7 +118,7 @@ Rectangle ListView { id: buildPlateListView - model: Cura.BuildPlateModel + model: Cura.MultiBuildPlateModel width: parent.width delegate: buildPlateDelegate } diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index c296a72281..0f9c8b0e55 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -7,7 +7,7 @@ import QtQuick.Controls.Styles 1.4 import QtQuick.Layouts 1.3 import UM 1.2 as UM -import Cura 1.2 as Cura +import Cura 1.0 as Cura Item { |