|
@@ -15,6 +15,7 @@ from .ExtruderStack import ExtruderStack
|
|
|
|
|
|
## Contains helper functions to create new machines.
|
|
## Contains helper functions to create new machines.
|
|
class CuraStackBuilder:
|
|
class CuraStackBuilder:
|
|
|
|
+
|
|
## Create a new instance of a machine.
|
|
## Create a new instance of a machine.
|
|
#
|
|
#
|
|
# \param name The name of the new machine.
|
|
# \param name The name of the new machine.
|
|
@@ -26,7 +27,6 @@ class CuraStackBuilder:
|
|
from cura.CuraApplication import CuraApplication
|
|
from cura.CuraApplication import CuraApplication
|
|
application = CuraApplication.getInstance()
|
|
application = CuraApplication.getInstance()
|
|
variant_manager = application.getVariantManager()
|
|
variant_manager = application.getVariantManager()
|
|
- material_manager = application.getMaterialManager()
|
|
|
|
quality_manager = application.getQualityManager()
|
|
quality_manager = application.getQualityManager()
|
|
registry = application.getContainerRegistry()
|
|
registry = application.getContainerRegistry()
|
|
|
|
|
|
@@ -46,16 +46,6 @@ class CuraStackBuilder:
|
|
if not global_variant_container:
|
|
if not global_variant_container:
|
|
global_variant_container = application.empty_variant_container
|
|
global_variant_container = application.empty_variant_container
|
|
|
|
|
|
- # get variant container for extruders
|
|
|
|
- extruder_variant_container = application.empty_variant_container
|
|
|
|
- extruder_variant_node = variant_manager.getDefaultVariantNode(machine_definition, VariantType.NOZZLE)
|
|
|
|
- extruder_variant_name = None
|
|
|
|
- if extruder_variant_node:
|
|
|
|
- extruder_variant_container = extruder_variant_node.getContainer()
|
|
|
|
- if not extruder_variant_container:
|
|
|
|
- extruder_variant_container = application.empty_variant_container
|
|
|
|
- extruder_variant_name = extruder_variant_container.getName()
|
|
|
|
-
|
|
|
|
generated_name = registry.createUniqueName("machine", "", name, machine_definition.getName())
|
|
generated_name = registry.createUniqueName("machine", "", name, machine_definition.getName())
|
|
# Make sure the new name does not collide with any definition or (quality) profile
|
|
# Make sure the new name does not collide with any definition or (quality) profile
|
|
# createUniqueName() only looks at other stacks, but not at definitions or quality profiles
|
|
# createUniqueName() only looks at other stacks, but not at definitions or quality profiles
|
|
@@ -74,34 +64,8 @@ class CuraStackBuilder:
|
|
|
|
|
|
# Create ExtruderStacks
|
|
# Create ExtruderStacks
|
|
extruder_dict = machine_definition.getMetaDataEntry("machine_extruder_trains")
|
|
extruder_dict = machine_definition.getMetaDataEntry("machine_extruder_trains")
|
|
-
|
|
|
|
- for position, extruder_definition_id in extruder_dict.items():
|
|
|
|
- # Sanity check: make sure that the positions in the extruder definitions are same as in the machine
|
|
|
|
- # definition
|
|
|
|
- extruder_definition = registry.findDefinitionContainers(id = extruder_definition_id)[0]
|
|
|
|
- position_in_extruder_def = extruder_definition.getMetaDataEntry("position")
|
|
|
|
- if position_in_extruder_def != position:
|
|
|
|
- ConfigurationErrorMessage.getInstance().addFaultyContainers(extruder_definition_id)
|
|
|
|
- return None #Don't return any container stack then, not the rest of the extruders either.
|
|
|
|
-
|
|
|
|
- # get material container for extruders
|
|
|
|
- material_container = application.empty_material_container
|
|
|
|
- material_node = material_manager.getDefaultMaterial(new_global_stack, position, extruder_variant_name, extruder_definition = extruder_definition)
|
|
|
|
- if material_node and material_node.getContainer():
|
|
|
|
- material_container = material_node.getContainer()
|
|
|
|
-
|
|
|
|
- new_extruder_id = registry.uniqueName(extruder_definition_id)
|
|
|
|
- new_extruder = cls.createExtruderStack(
|
|
|
|
- new_extruder_id,
|
|
|
|
- extruder_definition = extruder_definition,
|
|
|
|
- machine_definition_id = definition_id,
|
|
|
|
- position = position,
|
|
|
|
- variant_container = extruder_variant_container,
|
|
|
|
- material_container = material_container,
|
|
|
|
- quality_container = application.empty_quality_container
|
|
|
|
- )
|
|
|
|
- new_extruder.setNextStack(new_global_stack)
|
|
|
|
- new_global_stack.addExtruder(new_extruder)
|
|
|
|
|
|
+ for position in extruder_dict:
|
|
|
|
+ cls.createExtruderStackWithDefaultSetup(new_global_stack, position)
|
|
|
|
|
|
for new_extruder in new_global_stack.extruders.values(): #Only register the extruders if we're sure that all of them are correct.
|
|
for new_extruder in new_global_stack.extruders.values(): #Only register the extruders if we're sure that all of them are correct.
|
|
registry.addContainer(new_extruder)
|
|
registry.addContainer(new_extruder)
|
|
@@ -136,19 +100,73 @@ class CuraStackBuilder:
|
|
|
|
|
|
return new_global_stack
|
|
return new_global_stack
|
|
|
|
|
|
|
|
+ ## Create a default Extruder Stack
|
|
|
|
+ #
|
|
|
|
+ # \param global_stack The global stack this extruder refers to.
|
|
|
|
+ # \param extruder_position The position of the current extruder.
|
|
|
|
+ @classmethod
|
|
|
|
+ def createExtruderStackWithDefaultSetup(cls, global_stack: "GlobalStack", extruder_position: int) -> None:
|
|
|
|
+ from cura.CuraApplication import CuraApplication
|
|
|
|
+ application = CuraApplication.getInstance()
|
|
|
|
+ variant_manager = application.getVariantManager()
|
|
|
|
+ material_manager = application.getMaterialManager()
|
|
|
|
+ registry = application.getContainerRegistry()
|
|
|
|
+
|
|
|
|
+ # get variant container for extruders
|
|
|
|
+ extruder_variant_container = application.empty_variant_container
|
|
|
|
+ extruder_variant_node = variant_manager.getDefaultVariantNode(global_stack.definition, VariantType.NOZZLE)
|
|
|
|
+ extruder_variant_name = None
|
|
|
|
+ if extruder_variant_node:
|
|
|
|
+ extruder_variant_container = extruder_variant_node.getContainer()
|
|
|
|
+ if not extruder_variant_container:
|
|
|
|
+ extruder_variant_container = application.empty_variant_container
|
|
|
|
+ extruder_variant_name = extruder_variant_container.getName()
|
|
|
|
+
|
|
|
|
+ extruder_definition_dict = global_stack.getMetaDataEntry("machine_extruder_trains")
|
|
|
|
+ extruder_definition_id = extruder_definition_dict[str(extruder_position)]
|
|
|
|
+ extruder_definition = registry.findDefinitionContainers(id = extruder_definition_id)[0]
|
|
|
|
+
|
|
|
|
+ # get material container for extruders
|
|
|
|
+ material_container = application.empty_material_container
|
|
|
|
+ material_node = material_manager.getDefaultMaterial(global_stack, extruder_position, extruder_variant_name,
|
|
|
|
+ extruder_definition = extruder_definition)
|
|
|
|
+ if material_node and material_node.getContainer():
|
|
|
|
+ material_container = material_node.getContainer()
|
|
|
|
+
|
|
|
|
+ new_extruder_id = registry.uniqueName(extruder_definition_id)
|
|
|
|
+ new_extruder = cls.createExtruderStack(
|
|
|
|
+ new_extruder_id,
|
|
|
|
+ extruder_definition = extruder_definition,
|
|
|
|
+ machine_definition_id = global_stack.definition.getId(),
|
|
|
|
+ position = extruder_position,
|
|
|
|
+ variant_container = extruder_variant_container,
|
|
|
|
+ material_container = material_container,
|
|
|
|
+ quality_container = application.empty_quality_container
|
|
|
|
+ )
|
|
|
|
+ new_extruder.setNextStack(global_stack)
|
|
|
|
+ global_stack.addExtruder(new_extruder)
|
|
|
|
+
|
|
|
|
+ registry.addContainer(new_extruder)
|
|
|
|
+
|
|
## Create a new Extruder stack
|
|
## Create a new Extruder stack
|
|
#
|
|
#
|
|
# \param new_stack_id The ID of the new stack.
|
|
# \param new_stack_id The ID of the new stack.
|
|
- # \param definition The definition to base the new stack on.
|
|
|
|
- # \param machine_definition_id The ID of the machine definition to use for
|
|
|
|
- # the user container.
|
|
|
|
- # \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm"
|
|
|
|
|
|
+ # \param extruder_definition The definition to base the new stack on.
|
|
|
|
+ # \param machine_definition_id The ID of the machine definition to use for the user container.
|
|
|
|
+ # \param position The position the extruder occupies in the machine.
|
|
|
|
+ # \param variant_container The variant selected for the current extruder.
|
|
|
|
+ # \param material_container The material selected for the current extruder.
|
|
|
|
+ # \param quality_container The quality selected for the current extruder.
|
|
#
|
|
#
|
|
- # \return A new Global stack instance with the specified parameters.
|
|
|
|
|
|
+ # \return A new Extruder stack instance with the specified parameters.
|
|
@classmethod
|
|
@classmethod
|
|
- def createExtruderStack(cls, new_stack_id: str, extruder_definition: DefinitionContainerInterface, machine_definition_id: str,
|
|
|
|
|
|
+ def createExtruderStack(cls, new_stack_id: str, extruder_definition: DefinitionContainerInterface,
|
|
|
|
+ machine_definition_id: str,
|
|
position: int,
|
|
position: int,
|
|
- variant_container, material_container, quality_container) -> ExtruderStack:
|
|
|
|
|
|
+ variant_container: "InstanceContainer",
|
|
|
|
+ material_container: "InstanceContainer",
|
|
|
|
+ quality_container: "InstanceContainer") -> ExtruderStack:
|
|
|
|
+
|
|
from cura.CuraApplication import CuraApplication
|
|
from cura.CuraApplication import CuraApplication
|
|
application = CuraApplication.getInstance()
|
|
application = CuraApplication.getInstance()
|
|
registry = application.getContainerRegistry()
|
|
registry = application.getContainerRegistry()
|
|
@@ -157,7 +175,7 @@ class CuraStackBuilder:
|
|
stack.setName(extruder_definition.getName())
|
|
stack.setName(extruder_definition.getName())
|
|
stack.setDefinition(extruder_definition)
|
|
stack.setDefinition(extruder_definition)
|
|
|
|
|
|
- stack.setMetaDataEntry("position", position)
|
|
|
|
|
|
+ stack.setMetaDataEntry("position", str(position))
|
|
|
|
|
|
user_container = cls.createUserChangesContainer(new_stack_id + "_user", machine_definition_id, new_stack_id,
|
|
user_container = cls.createUserChangesContainer(new_stack_id + "_user", machine_definition_id, new_stack_id,
|
|
is_global_stack = False)
|
|
is_global_stack = False)
|
|
@@ -183,9 +201,22 @@ class CuraStackBuilder:
|
|
# \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm"
|
|
# \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm"
|
|
#
|
|
#
|
|
# \return A new Global stack instance with the specified parameters.
|
|
# \return A new Global stack instance with the specified parameters.
|
|
|
|
+
|
|
|
|
+ ## Create a new Global stack
|
|
|
|
+ #
|
|
|
|
+ # \param new_stack_id The ID of the new stack.
|
|
|
|
+ # \param definition The definition to base the new stack on.
|
|
|
|
+ # \param variant_container The variant selected for the current stack.
|
|
|
|
+ # \param material_container The material selected for the current stack.
|
|
|
|
+ # \param quality_container The quality selected for the current stack.
|
|
|
|
+ #
|
|
|
|
+ # \return A new Global stack instance with the specified parameters.
|
|
@classmethod
|
|
@classmethod
|
|
def createGlobalStack(cls, new_stack_id: str, definition: DefinitionContainerInterface,
|
|
def createGlobalStack(cls, new_stack_id: str, definition: DefinitionContainerInterface,
|
|
- variant_container, material_container, quality_container) -> GlobalStack:
|
|
|
|
|
|
+ variant_container: "InstanceContainer",
|
|
|
|
+ material_container: "InstanceContainer",
|
|
|
|
+ quality_container: "InstanceContainer") -> GlobalStack:
|
|
|
|
+
|
|
from cura.CuraApplication import CuraApplication
|
|
from cura.CuraApplication import CuraApplication
|
|
application = CuraApplication.getInstance()
|
|
application = CuraApplication.getInstance()
|
|
registry = application.getContainerRegistry()
|
|
registry = application.getContainerRegistry()
|