mirror of
https://github.com/Ultimaker/Cura.git
synced 2026-01-18 05:45:40 -07:00
Set variant id from multiple variant terms
This commit is contained in:
parent
9f0020c168
commit
92e39c7a71
3 changed files with 58 additions and 10 deletions
|
|
@ -12,12 +12,13 @@ i18n_catalog = i18nCatalog("BlackBeltPlugin")
|
|||
from . import BuildVolumePatches
|
||||
from . import CuraEngineBackendPatches
|
||||
|
||||
from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject
|
||||
from PyQt5.QtCore import pyqtSignal, pyqtSlot, pyqtProperty, QObject
|
||||
from PyQt5.QtQml import qmlRegisterSingletonType
|
||||
|
||||
import math
|
||||
import os.path
|
||||
import json
|
||||
import re
|
||||
|
||||
class BlackBeltPlugin(Extension):
|
||||
def __init__(self):
|
||||
|
|
@ -98,23 +99,62 @@ class BlackBeltPlugin(Extension):
|
|||
preferences.setValue("cura/categories_expanded", expanded_settings)
|
||||
self._application.expandedCategoriesChanged.emit()
|
||||
|
||||
## QML-accessible singleton for access to extended data on definition and variants
|
||||
class BlackBeltSingleton(QObject):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged)
|
||||
|
||||
def _onGlobalContainerStackChanged(self):
|
||||
self.activeMachineChanged.emit()
|
||||
self._application = Application.getInstance()
|
||||
self._machine_manager = self._application.getMachineManager()
|
||||
self._global_container_stack = None
|
||||
|
||||
self._variants_terms_pattern = ""
|
||||
self._variants_terms = []
|
||||
|
||||
self._application.globalContainerStackChanged.connect(self._onGlobalContainerStackChanged)
|
||||
self._onGlobalContainerStackChanged(emit = False)
|
||||
self._machine_manager.activeVariantChanged.connect(self._onActiveVariantChanged)
|
||||
self._onActiveVariantChanged(emit = False)
|
||||
|
||||
def _onGlobalContainerStackChanged(self, emit = True):
|
||||
self._global_container_stack = self._application.getGlobalContainerStack()
|
||||
|
||||
self._variants_terms_pattern = self._global_container_stack.getMetaDataEntry("variants_id_pattern", "")
|
||||
self._variants_terms_pattern = self._variants_terms_pattern.replace("{definition_id}", self._global_container_stack.getBottom().getId())
|
||||
self._variants_terms_pattern = self._variants_terms_pattern.replace("{term}", "(.*?)")
|
||||
|
||||
if emit:
|
||||
self.activeMachineChanged.emit()
|
||||
|
||||
def _onActiveVariantChanged(self, emit = True):
|
||||
active_variant_id = self._machine_manager.activeVariantId
|
||||
|
||||
result = re.match("^%s$" % self._variants_terms_pattern, active_variant_id)
|
||||
if result:
|
||||
self._variants_terms = list(result.groups())
|
||||
else:
|
||||
self._variants_terms = []
|
||||
|
||||
if emit:
|
||||
self.activeVariantChanged.emit()
|
||||
|
||||
activeMachineChanged = pyqtSignal()
|
||||
activeVariantChanged = pyqtSignal()
|
||||
|
||||
@pyqtProperty(str, notify = activeMachineChanged)
|
||||
def variantsTerms(self):
|
||||
return json.dumps(Application.getInstance().getGlobalContainerStack().getMetaDataEntry("variants_terms", []))
|
||||
return json.dumps(self._global_container_stack.getMetaDataEntry("variants_terms", []))
|
||||
|
||||
@pyqtProperty("QVariantList", notify = activeVariantChanged)
|
||||
def activeVariantTerms(self):
|
||||
return self._variants_terms
|
||||
|
||||
@pyqtSlot(int, str)
|
||||
def setActiveVariantTerm(self, index, term):
|
||||
self._variants_terms[index] = term
|
||||
variant_id = self._variants_terms_pattern.replace("(.*?)", "%s") % tuple(self._variants_terms)
|
||||
self._machine_manager.setActiveVariant(variant_id)
|
||||
|
||||
@pyqtProperty(str, notify = activeMachineChanged)
|
||||
def variantsPattern(self):
|
||||
return Application.getInstance().getGlobalContainerStack().getMetaDataEntry("variants_pattern", "")
|
||||
|
||||
## Get the singleton instance for this class.
|
||||
@classmethod
|
||||
|
|
@ -126,6 +166,7 @@ class BlackBeltSingleton(QObject):
|
|||
|
||||
__instance = None # type: "BlackBeltSingleton"
|
||||
|
||||
|
||||
## Decorator for easy access to gantry angle and transform matrix.
|
||||
class BlackBeltDecorator(SceneNodeDecorator):
|
||||
def __init__(self):
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
"preferred_variant": "*45_04*",
|
||||
"preferred_quality": "*Normal*",
|
||||
"preferred_material": "*ngen*",
|
||||
"variants_id_pattern": "{definition_id}_{term_0}_{term_1}",
|
||||
"variants_id_pattern": "{definition_id}_{term}_{term}",
|
||||
"variants_name": "Configuration",
|
||||
"variants_terms":
|
||||
[
|
||||
|
|
|
|||
|
|
@ -280,8 +280,10 @@ Column
|
|||
ToolButton
|
||||
{
|
||||
id: termSelectionButton
|
||||
text: "%1: %2".arg(model.modelData.name).arg(model.modelData.values[Object.keys(model.modelData.values)[0]])
|
||||
text: "%1: %2".arg(model.modelData.name).arg(model.modelData.values[activeVariantTerm])
|
||||
property var values: model.modelData.values
|
||||
property string activeVariantTerm: Cura.BlackBeltPlugin && Cura.BlackBeltPlugin.activeVariantTerms.length > index ? Cura.BlackBeltPlugin.activeVariantTerms[index] : ""
|
||||
property int termIndex: index
|
||||
|
||||
width: (variantTermsSelection.width - (variantTermsRepeater.count-1) * UM.Theme.getSize("default_margin").width) / variantTermsRepeater.count
|
||||
height: UM.Theme.getSize("setting_control").height
|
||||
|
|
@ -297,13 +299,18 @@ Column
|
|||
MenuItem
|
||||
{
|
||||
text: termSelectionButton.values[model.modelData]
|
||||
checkable: true
|
||||
checked: activeVariantTerm == model.modelData
|
||||
exclusiveGroup: variantTermGroup
|
||||
onTriggered:
|
||||
{
|
||||
Cura.BlackBeltPlugin.setActiveVariantTerm(termSelectionButton.termIndex, model.modelData)
|
||||
}
|
||||
}
|
||||
onObjectAdded: variantTermMenu.insertItem(index, object)
|
||||
onObjectRemoved: variantTermMenu.removeItem(object)
|
||||
}
|
||||
ExclusiveGroup { id: variantTermGroup }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue