mirror of
https://github.com/Ultimaker/Cura.git
synced 2026-01-18 05:45:40 -07:00
Create new material from preferred material instead of generic_pla
This commit is contained in:
parent
13aa59920a
commit
6cdd2e7e01
2 changed files with 49 additions and 11 deletions
|
|
@ -17,8 +17,8 @@ from . import BlackBeltDecorator
|
|||
from . import BlackBeltSingleton
|
||||
from . import BuildVolumePatches
|
||||
from . import CuraEngineBackendPatches
|
||||
from . import MaterialManagerPatches
|
||||
from . import PrintInformationPatches
|
||||
from . import PatchedMaterialManager
|
||||
|
||||
from PyQt5.QtQml import qmlRegisterSingletonType
|
||||
|
||||
|
|
@ -88,9 +88,12 @@ class BlackBeltPlugin(Extension):
|
|||
# Apply patches
|
||||
self._build_volume_patches = BuildVolumePatches.BuildVolumePatches(self._application.getBuildVolume())
|
||||
self._cura_engine_backend_patches = CuraEngineBackendPatches.CuraEngineBackendPatches(self._application.getBackend())
|
||||
self._material_manager_patches = MaterialManagerPatches.MaterialManagerPatches(self._application.getMaterialManager())
|
||||
self._print_information_patches = PrintInformationPatches.PrintInformationPatches(self._application.getPrintInformation())
|
||||
|
||||
container_registry = ContainerRegistry.getInstance()
|
||||
self._application._material_manager = PatchedMaterialManager.PatchedMaterialManager(container_registry, self._application)
|
||||
self._application._material_manager.initialize()
|
||||
|
||||
self._application.getBackend().slicingStarted.connect(self._onSlicingStarted)
|
||||
|
||||
self._fixVisibilityPreferences(forced = self._force_visibility_update)
|
||||
|
|
|
|||
|
|
@ -1,15 +1,14 @@
|
|||
from cura.Machines.MaterialManager import MaterialManager
|
||||
from UM.Logger import Logger
|
||||
import uuid
|
||||
|
||||
from PyQt5.Qt import pyqtSlot
|
||||
|
||||
from typing import Optional, TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
from UM.Settings.DefinitionContainer import DefinitionContainer
|
||||
|
||||
class MaterialManagerPatches():
|
||||
def __init__(self, material_manager):
|
||||
self._material_manager = material_manager
|
||||
|
||||
self._material_manager.getAvailableMaterials = self.getAvailableMaterials
|
||||
|
||||
class PatchedMaterialManager(MaterialManager):
|
||||
#
|
||||
# Return a dict with all root material IDs (k) and ContainerNodes (v) that's suitable for the given setup.
|
||||
#
|
||||
|
|
@ -19,16 +18,16 @@ class MaterialManagerPatches():
|
|||
diameter: float) -> dict:
|
||||
# round the diameter to get the approximate diameter
|
||||
rounded_diameter = str(round(diameter))
|
||||
if rounded_diameter not in self._material_manager._diameter_machine_variant_material_map:
|
||||
if rounded_diameter not in self._diameter_machine_variant_material_map:
|
||||
Logger.log("i", "Cannot find materials with diameter [%s] (rounded to [%s])", diameter, rounded_diameter)
|
||||
return dict()
|
||||
|
||||
machine_definition_id = machine_definition.getId()
|
||||
|
||||
# If there are variant materials, get the variant material
|
||||
machine_variant_material_map = self._material_manager._diameter_machine_variant_material_map[rounded_diameter]
|
||||
machine_variant_material_map = self._diameter_machine_variant_material_map[rounded_diameter]
|
||||
machine_node = machine_variant_material_map.get(machine_definition_id)
|
||||
default_machine_node = machine_variant_material_map.get(self._material_manager._default_machine_definition_id)
|
||||
default_machine_node = machine_variant_material_map.get(self._default_machine_definition_id)
|
||||
variant_node = None
|
||||
if extruder_variant_name is not None and machine_node is not None:
|
||||
variant_node = machine_node.getChildNode(extruder_variant_name)
|
||||
|
|
@ -67,3 +66,39 @@ class MaterialManagerPatches():
|
|||
material_id_metadata_dict[material_id] = node
|
||||
|
||||
return material_id_metadata_dict
|
||||
|
||||
#
|
||||
# Create a new material by cloning Generic PLA for the current material diameter and generate a new GUID.
|
||||
#
|
||||
# Copied verbatim from MaterialManager.createMaterial, with a minor patch to use the preferred material
|
||||
# as the template (instead of generic_pla)
|
||||
@pyqtSlot(result = str)
|
||||
def createMaterial(self) -> str:
|
||||
from UM.i18n import i18nCatalog
|
||||
catalog = i18nCatalog("cura")
|
||||
# Ensure all settings are saved.
|
||||
self._application.saveSettings()
|
||||
|
||||
machine_manager = self._application.getMachineManager()
|
||||
extruder_stack = machine_manager.activeStack
|
||||
### START PATCH
|
||||
machine_definition = self._application.getGlobalContainerStack().definition
|
||||
preferred_material = machine_definition.getMetaDataEntry("preferred_material")
|
||||
|
||||
approximate_diameter = str(extruder_stack.approximateMaterialDiameter)
|
||||
root_material_id = preferred_material if preferred_material else "generic_pla"
|
||||
### END PATCH
|
||||
root_material_id = self.getRootMaterialIDForDiameter(root_material_id, approximate_diameter)
|
||||
material_group = self.getMaterialGroup(root_material_id)
|
||||
|
||||
# Create a new ID & container to hold the data.
|
||||
new_id = self._container_registry.uniqueName("custom_material")
|
||||
new_metadata = {"name": catalog.i18nc("@label", "Custom Material"),
|
||||
"brand": catalog.i18nc("@label", "Custom"),
|
||||
"GUID": str(uuid.uuid4()),
|
||||
}
|
||||
|
||||
self.duplicateMaterial(material_group.root_material_node,
|
||||
new_base_id = new_id,
|
||||
new_metadata = new_metadata)
|
||||
return new_id
|
||||
Loading…
Add table
Add a link
Reference in a new issue