Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLipu Fei <lipu.fei815@gmail.com>2018-02-18 00:23:49 +0300
committerLipu Fei <lipu.fei815@gmail.com>2018-02-18 00:24:05 +0300
commit495fc8bbd705f5145fe8312207b3f048a7dcc106 (patch)
tree6969e6cfe2523a181b7f7f980988e7d990b77da3
parent1c8f63e47fe7840905d5c844aba0ce475b011e5d (diff)
WIP: Refactor BuildPlateModel and split MultiBuildPlateModel
-rwxr-xr-xcura/CuraApplication.py32
-rw-r--r--cura/Machines/Models/BuildPlateModel.py40
-rw-r--r--cura/Machines/Models/Other/MultiBuildPlateModel.py (renamed from cura/BuildPlateModel.py)23
-rw-r--r--cura/Machines/Models/Other/__init__.py0
-rw-r--r--cura/PrintInformation.py19
-rw-r--r--cura/Scene/ConvexHullNode.py2
-rw-r--r--cura/Scene/CuraSceneController.py16
-rw-r--r--cura/Scene/CuraSceneNode.py4
-rwxr-xr-xcura/Settings/MachineManager.py59
-rwxr-xr-xplugins/3MFReader/ThreeMFReader.py2
-rw-r--r--plugins/3MFWriter/ThreeMFWriter.py2
-rwxr-xr-xplugins/CuraEngineBackend/CuraEngineBackend.py10
-rw-r--r--plugins/CuraEngineBackend/ProcessGCodeJob.py2
-rw-r--r--plugins/GCodeReader/FlavorParser.py2
-rw-r--r--plugins/GCodeWriter/GCodeWriter.py2
-rw-r--r--plugins/PostProcessingPlugin/PostProcessingPlugin.py2
-rw-r--r--plugins/SimulationView/SimulationPass.py2
-rw-r--r--plugins/SupportEraser/SupportEraser.py2
-rw-r--r--plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py2
-rw-r--r--plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py2
-rw-r--r--plugins/USBPrinting/USBPrinterOutputDevice.py2
-rw-r--r--resources/qml/DiscardOrKeepProfileChangesDialog.qml2
-rw-r--r--resources/qml/Menus/BuildplateMenu.qml20
-rw-r--r--resources/qml/Menus/ContextMenu.qml12
-rw-r--r--resources/qml/Menus/ViewMenu.qml10
-rw-r--r--resources/qml/ObjectsList.qml10
-rw-r--r--resources/qml/SidebarSimple.qml2
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
{