mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-30 10:05:42 +08:00
Merge branch '4.4' of github.com:Ultimaker/Cura
This commit is contained in:
commit
c22281ad9c
@ -2,8 +2,8 @@
|
|||||||
#Cura is released under the terms of the LGPLv3 or higher.
|
#Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QTimer
|
from PyQt5.QtCore import Qt, QTimer
|
||||||
import collections
|
|
||||||
from typing import TYPE_CHECKING, Optional, Dict
|
from typing import TYPE_CHECKING, Optional, Dict
|
||||||
|
from cura.Machines.Models.IntentTranslations import intent_translations
|
||||||
|
|
||||||
from cura.Machines.Models.IntentModel import IntentModel
|
from cura.Machines.Models.IntentModel import IntentModel
|
||||||
from cura.Settings.IntentManager import IntentManager
|
from cura.Settings.IntentManager import IntentManager
|
||||||
@ -29,26 +29,6 @@ class IntentCategoryModel(ListModel):
|
|||||||
|
|
||||||
modelUpdated = pyqtSignal()
|
modelUpdated = pyqtSignal()
|
||||||
|
|
||||||
# Translations to user-visible string. Ordered by weight.
|
|
||||||
# TODO: Create a solution for this name and weight to be used dynamically.
|
|
||||||
_translations = collections.OrderedDict() # type: "collections.OrderedDict[str,Dict[str,Optional[str]]]"
|
|
||||||
_translations["default"] = {
|
|
||||||
"name": catalog.i18nc("@label", "Default")
|
|
||||||
}
|
|
||||||
_translations["visual"] = {
|
|
||||||
"name": catalog.i18nc("@label", "Visual"),
|
|
||||||
"description": catalog.i18nc("@text", "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality.")
|
|
||||||
}
|
|
||||||
_translations["engineering"] = {
|
|
||||||
"name": catalog.i18nc("@label", "Engineering"),
|
|
||||||
"description": catalog.i18nc("@text", "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances.")
|
|
||||||
}
|
|
||||||
_translations["quick"] = {
|
|
||||||
"name": catalog.i18nc("@label", "Draft"),
|
|
||||||
"description": catalog.i18nc("@text", "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction.")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
## Creates a new model for a certain intent category.
|
## Creates a new model for a certain intent category.
|
||||||
# \param The category to list the intent profiles for.
|
# \param The category to list the intent profiles for.
|
||||||
def __init__(self, intent_category: str) -> None:
|
def __init__(self, intent_category: str) -> None:
|
||||||
@ -99,15 +79,15 @@ class IntentCategoryModel(ListModel):
|
|||||||
"name": IntentCategoryModel.translation(category, "name", catalog.i18nc("@label", "Unknown")),
|
"name": IntentCategoryModel.translation(category, "name", catalog.i18nc("@label", "Unknown")),
|
||||||
"description": IntentCategoryModel.translation(category, "description", None),
|
"description": IntentCategoryModel.translation(category, "description", None),
|
||||||
"intent_category": category,
|
"intent_category": category,
|
||||||
"weight": list(self._translations.keys()).index(category),
|
"weight": list(intent_translations).index(category),
|
||||||
"qualities": qualities
|
"qualities": qualities
|
||||||
})
|
})
|
||||||
result.sort(key = lambda k: k["weight"])
|
result.sort(key = lambda k: k["weight"])
|
||||||
self.setItems(result)
|
self.setItems(result)
|
||||||
|
|
||||||
## Get a display value for a category. See IntenCategoryModel._translations
|
## Get a display value for a category.
|
||||||
## for categories and keys
|
## for categories and keys
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def translation(category: str, key: str, default: Optional[str] = None):
|
def translation(category: str, key: str, default: Optional[str] = None):
|
||||||
display_strings = IntentCategoryModel._translations.get(category, {})
|
display_strings = intent_translations.get(category, {})
|
||||||
return display_strings.get(key, default)
|
return display_strings.get(key, default)
|
||||||
|
20
cura/Machines/Models/IntentTranslations.py
Normal file
20
cura/Machines/Models/IntentTranslations.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import collections
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
intent_translations = collections.OrderedDict() # type: "collections.OrderedDict[str, Dict[str, Optional[str]]]"
|
||||||
|
intent_translations["default"] = {
|
||||||
|
"name": catalog.i18nc("@label", "Default")
|
||||||
|
}
|
||||||
|
intent_translations["visual"] = {
|
||||||
|
"name": catalog.i18nc("@label", "Visual"),
|
||||||
|
"description": catalog.i18nc("@text", "The visual profile is designed to print visual prototypes and models with the intent of high visual and surface quality.")
|
||||||
|
}
|
||||||
|
intent_translations["engineering"] = {
|
||||||
|
"name": catalog.i18nc("@label", "Engineering"),
|
||||||
|
"description": catalog.i18nc("@text", "The engineering profile is designed to print functional prototypes and end-use parts with the intent of better accuracy and for closer tolerances.")
|
||||||
|
}
|
||||||
|
intent_translations["quick"] = {
|
||||||
|
"name": catalog.i18nc("@label", "Draft"),
|
||||||
|
"description": catalog.i18nc("@text", "The draft profile is designed to print initial prototypes and concept validation with the intent of significant print time reduction.")
|
||||||
|
}
|
@ -14,6 +14,7 @@ from cura.Machines.ContainerTree import ContainerTree
|
|||||||
from cura.Settings.cura_empty_instance_containers import empty_quality_changes_container
|
from cura.Settings.cura_empty_instance_containers import empty_quality_changes_container
|
||||||
from cura.Settings.IntentManager import IntentManager
|
from cura.Settings.IntentManager import IntentManager
|
||||||
from cura.Machines.Models.MachineModelUtils import fetchLayerHeight
|
from cura.Machines.Models.MachineModelUtils import fetchLayerHeight
|
||||||
|
from cura.Machines.Models.IntentTranslations import intent_translations
|
||||||
|
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
catalog = i18nCatalog("cura")
|
catalog = i18nCatalog("cura")
|
||||||
@ -336,10 +337,11 @@ class QualityManagementModel(ListModel):
|
|||||||
"quality_type": quality_type,
|
"quality_type": quality_type,
|
||||||
"quality_changes_group": None,
|
"quality_changes_group": None,
|
||||||
"intent_category": intent_category,
|
"intent_category": intent_category,
|
||||||
"section_name": catalog.i18nc("@label", intent_category.capitalize()),
|
"section_name": catalog.i18nc("@label", intent_translations.get(intent_category, {}).get("name", catalog.i18nc("@label", "Unknown"))),
|
||||||
})
|
})
|
||||||
# Sort by quality_type for each intent category
|
# Sort by quality_type for each intent category
|
||||||
result = sorted(result, key = lambda x: (x["intent_category"], x["quality_type"]))
|
|
||||||
|
result = sorted(result, key = lambda x: (list(intent_translations).index(x["intent_category"]), x["quality_type"]))
|
||||||
item_list += result
|
item_list += result
|
||||||
|
|
||||||
# Create quality_changes group items
|
# Create quality_changes group items
|
||||||
|
@ -85,11 +85,20 @@ class VariantNode(ContainerNode):
|
|||||||
for base_material, material_node in self.materials.items():
|
for base_material, material_node in self.materials.items():
|
||||||
if self.machine.preferred_material == base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
|
if self.machine.preferred_material == base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
|
||||||
return material_node
|
return material_node
|
||||||
# First fallback: Choose any material with matching diameter.
|
|
||||||
|
# First fallback: Check if we should be checking for the 175 variant.
|
||||||
|
if approximate_diameter == 2:
|
||||||
|
preferred_material = self.machine.preferred_material + "_175"
|
||||||
|
for base_material, material_node in self.materials.items():
|
||||||
|
if preferred_material == base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
|
||||||
|
return material_node
|
||||||
|
|
||||||
|
# Second fallback: Choose any material with matching diameter.
|
||||||
for material_node in self.materials.values():
|
for material_node in self.materials.values():
|
||||||
if material_node.getMetaDataEntry("approximate_diameter") and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
|
if material_node.getMetaDataEntry("approximate_diameter") and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")):
|
||||||
Logger.log("w", "Could not find preferred material %s, falling back to whatever works", self.machine.preferred_material)
|
Logger.log("w", "Could not find preferred material %s, falling back to whatever works", self.machine.preferred_material)
|
||||||
return material_node
|
return material_node
|
||||||
|
|
||||||
fallback = next(iter(self.materials.values())) # Should only happen with empty material node.
|
fallback = next(iter(self.materials.values())) # Should only happen with empty material node.
|
||||||
Logger.log("w", "Could not find preferred material {preferred_material} with diameter {diameter} for variant {variant_id}, falling back to {fallback}.".format(
|
Logger.log("w", "Could not find preferred material {preferred_material} with diameter {diameter} for variant {variant_id}, falling back to {fallback}.".format(
|
||||||
preferred_material = self.machine.preferred_material,
|
preferred_material = self.machine.preferred_material,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user