mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-13 09:47:50 -06:00
Merge branch 'master' into CURA-6793_performance
Conflicts: cura/Machines/MaterialManager.py -> File was deleted in Master but I changed things for the lazy loading. cura/Machines/Models/BaseMaterialsModel.py -> I clarified documentation on a line above a place where a timer was added in between. Contributes to issue CURA-6793.
This commit is contained in:
commit
94eb76a844
318 changed files with 881 additions and 2183 deletions
|
@ -73,9 +73,6 @@ from cura.Scene import ZOffsetDecorator
|
|||
|
||||
from cura.Machines.ContainerTree import ContainerTree
|
||||
from cura.Machines.MachineErrorChecker import MachineErrorChecker
|
||||
import cura.Machines.MaterialManager #Imported like this to prevent circular imports.
|
||||
import cura.Machines.QualityManager #Imported like this to prevent circular imports.
|
||||
from cura.Machines.VariantManager import VariantManager
|
||||
|
||||
from cura.Machines.Models.BuildPlateModel import BuildPlateModel
|
||||
from cura.Machines.Models.CustomQualityProfilesDropDownMenuModel import CustomQualityProfilesDropDownMenuModel
|
||||
|
@ -924,20 +921,6 @@ class CuraApplication(QtApplication):
|
|||
self._extruder_manager = ExtruderManager()
|
||||
return self._extruder_manager
|
||||
|
||||
@deprecated("Use the ContainerTree structure instead.", since = "4.3")
|
||||
def getVariantManager(self, *args) -> VariantManager:
|
||||
return VariantManager.getInstance()
|
||||
|
||||
# Can't deprecate this function since the deprecation marker collides with pyqtSlot!
|
||||
@pyqtSlot(result = QObject)
|
||||
def getMaterialManager(self, *args) -> cura.Machines.MaterialManager.MaterialManager:
|
||||
return cura.Machines.MaterialManager.MaterialManager.getInstance()
|
||||
|
||||
# Can't deprecate this function since the deprecation marker collides with pyqtSlot!
|
||||
@pyqtSlot(result = QObject)
|
||||
def getQualityManager(self, *args) -> cura.Machines.QualityManager.QualityManager:
|
||||
return cura.Machines.QualityManager.QualityManager.getInstance()
|
||||
|
||||
def getIntentManager(self, *args) -> IntentManager:
|
||||
return IntentManager.getInstance()
|
||||
|
||||
|
|
|
@ -1,349 +0,0 @@
|
|||
# Copyright (c) 2019 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from collections import defaultdict
|
||||
import copy
|
||||
import uuid
|
||||
from typing import Dict, Optional, TYPE_CHECKING, Any, List, cast
|
||||
|
||||
from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot
|
||||
|
||||
from UM.Decorators import deprecated
|
||||
from UM.Logger import Logger
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
from UM.Util import parseBool
|
||||
import cura.CuraApplication # Imported like this to prevent circular imports.
|
||||
from cura.Machines.ContainerTree import ContainerTree
|
||||
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
|
||||
|
||||
from .MaterialNode import MaterialNode
|
||||
from .MaterialGroup import MaterialGroup
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from UM.Settings.DefinitionContainer import DefinitionContainer
|
||||
from UM.Settings.InstanceContainer import InstanceContainer
|
||||
from cura.Settings.GlobalStack import GlobalStack
|
||||
from cura.Settings.ExtruderStack import ExtruderStack
|
||||
|
||||
|
||||
#
|
||||
# MaterialManager maintains a number of maps and trees for material lookup.
|
||||
# The models GUI and QML use are now only dependent on the MaterialManager. That means as long as the data in
|
||||
# MaterialManager gets updated correctly, the GUI models should be updated correctly too, and the same goes for GUI.
|
||||
#
|
||||
# For now, updating the lookup maps and trees here is very simple: we discard the old data completely and recreate them
|
||||
# again. This means the update is exactly the same as initialization. There are performance concerns about this approach
|
||||
# but so far the creation of the tables and maps is very fast and there is no noticeable slowness, we keep it like this
|
||||
# because it's simple.
|
||||
#
|
||||
class MaterialManager(QObject):
|
||||
__instance = None
|
||||
|
||||
@classmethod
|
||||
@deprecated("Use the ContainerTree structure instead.", since = "4.3")
|
||||
def getInstance(cls) -> "MaterialManager":
|
||||
if cls.__instance is None:
|
||||
cls.__instance = MaterialManager()
|
||||
return cls.__instance
|
||||
|
||||
materialsUpdated = pyqtSignal() # Emitted whenever the material lookup tables are updated.
|
||||
favoritesUpdated = pyqtSignal() # Emitted whenever the favorites are changed
|
||||
|
||||
def __init__(self, parent = None):
|
||||
super().__init__(parent)
|
||||
# Material_type -> generic material metadata
|
||||
self._fallback_materials_map = dict() # type: Dict[str, Dict[str, Any]]
|
||||
|
||||
# Root_material_id -> MaterialGroup
|
||||
self._material_group_map = dict() # type: Dict[str, MaterialGroup]
|
||||
|
||||
# Material id including diameter (generic_pla_175) -> material root id (generic_pla)
|
||||
self._diameter_material_map = dict() # type: Dict[str, str]
|
||||
|
||||
# This is used in Legacy UM3 send material function and the material management page.
|
||||
# GUID -> a list of material_groups
|
||||
self._guid_material_groups_map = defaultdict(list) # type: Dict[str, List[MaterialGroup]]
|
||||
|
||||
self._favorites = set(cura.CuraApplication.CuraApplication.getInstance().getPreferences().getValue("cura/favorite_materials").split(";"))
|
||||
self.materialsUpdated.emit()
|
||||
|
||||
self._update_timer = QTimer(self)
|
||||
self._update_timer.setInterval(300)
|
||||
|
||||
self._update_timer.setSingleShot(True)
|
||||
self._update_timer.timeout.connect(self.materialsUpdated)
|
||||
|
||||
container_registry = ContainerRegistry.getInstance()
|
||||
container_registry.containerMetaDataChanged.connect(self._onContainerMetadataChanged)
|
||||
container_registry.containerAdded.connect(self._onContainerMetadataChanged)
|
||||
container_registry.containerRemoved.connect(self._onContainerMetadataChanged)
|
||||
|
||||
def _onContainerMetadataChanged(self, container):
|
||||
self._onContainerChanged(container)
|
||||
|
||||
def _onContainerChanged(self, container):
|
||||
container_type = container.getMetaDataEntry("type")
|
||||
if container_type != "material":
|
||||
return
|
||||
|
||||
# update the maps
|
||||
|
||||
self._update_timer.start()
|
||||
|
||||
def getMaterialGroup(self, root_material_id: str) -> Optional[MaterialGroup]:
|
||||
return self._material_group_map.get(root_material_id)
|
||||
|
||||
def getRootMaterialIDForDiameter(self, root_material_id: str, approximate_diameter: str) -> str:
|
||||
original_material = CuraContainerRegistry.getInstance().findInstanceContainersMetadata(id=root_material_id)[0]
|
||||
if original_material["approximate_diameter"] == approximate_diameter:
|
||||
return root_material_id
|
||||
|
||||
matching_materials = CuraContainerRegistry.getInstance().findInstanceContainersMetadata(type = "material", brand = original_material["brand"], definition = original_material["definition"], material = original_material["material"], color_name = original_material["color_name"])
|
||||
for material in matching_materials:
|
||||
if material["approximate_diameter"] == approximate_diameter:
|
||||
return material["id"]
|
||||
return root_material_id
|
||||
|
||||
def getRootMaterialIDWithoutDiameter(self, root_material_id: str) -> str:
|
||||
return self._diameter_material_map.get(root_material_id, "")
|
||||
|
||||
def getMaterialGroupListByGUID(self, guid: str) -> Optional[List[MaterialGroup]]:
|
||||
return self._guid_material_groups_map.get(guid)
|
||||
|
||||
# Returns a dict of all material groups organized by root_material_id.
|
||||
def getAllMaterialGroups(self) -> Dict[str, "MaterialGroup"]:
|
||||
return self._material_group_map
|
||||
|
||||
## Gives a dictionary of all root material IDs and their associated
|
||||
# MaterialNodes from the ContainerTree that are available for the given
|
||||
# printer and variant.
|
||||
def getAvailableMaterials(self, definition_id: str, nozzle_name: Optional[str]) -> Dict[str, MaterialNode]:
|
||||
return ContainerTree.getInstance().machines[definition_id].variants[nozzle_name].materials
|
||||
|
||||
#
|
||||
# A convenience function to get available materials for the given machine with the extruder position.
|
||||
#
|
||||
def getAvailableMaterialsForMachineExtruder(self, machine: "GlobalStack",
|
||||
extruder_stack: "ExtruderStack") -> Dict[str, MaterialNode]:
|
||||
nozzle_name = None
|
||||
if extruder_stack.variant.getId() != "empty_variant":
|
||||
nozzle_name = extruder_stack.variant.getName()
|
||||
|
||||
# Fetch the available materials (ContainerNode) for the current active machine and extruder setup.
|
||||
materials = self.getAvailableMaterials(machine.definition.getId(), nozzle_name)
|
||||
compatible_material_diameter = extruder_stack.getApproximateMaterialDiameter()
|
||||
result = {key: material for key, material in materials.items() if material.container and float(material.getMetaDataEntry("approximate_diameter")) == compatible_material_diameter}
|
||||
return result
|
||||
|
||||
#
|
||||
# Gets MaterialNode for the given extruder and machine with the given material name.
|
||||
# Returns None if:
|
||||
# 1. the given machine doesn't have materials;
|
||||
# 2. cannot find any material InstanceContainers with the given settings.
|
||||
#
|
||||
def getMaterialNode(self, machine_definition_id: str, nozzle_name: Optional[str],
|
||||
buildplate_name: Optional[str], diameter: float, root_material_id: str) -> Optional["MaterialNode"]:
|
||||
container_tree = ContainerTree.getInstance()
|
||||
machine_node = container_tree.machines.get(machine_definition_id)
|
||||
if machine_node is None:
|
||||
Logger.log("w", "Could not find machine with definition %s in the container tree", machine_definition_id)
|
||||
return None
|
||||
|
||||
variant_node = machine_node.variants.get(nozzle_name)
|
||||
if variant_node is None:
|
||||
Logger.log("w", "Could not find variant %s for machine with definition %s in the container tree", nozzle_name, machine_definition_id )
|
||||
return None
|
||||
|
||||
material_node = variant_node.materials.get(root_material_id)
|
||||
|
||||
if material_node is None:
|
||||
Logger.log("w", "Could not find material %s for machine with definition %s and variant %s in the container tree", root_material_id, machine_definition_id, nozzle_name)
|
||||
return None
|
||||
|
||||
return material_node
|
||||
|
||||
#
|
||||
# Gets MaterialNode for the given extruder and machine with the given material type.
|
||||
# Returns None if:
|
||||
# 1. the given machine doesn't have materials;
|
||||
# 2. cannot find any material InstanceContainers with the given settings.
|
||||
#
|
||||
def getMaterialNodeByType(self, global_stack: "GlobalStack", position: str, nozzle_name: str,
|
||||
buildplate_name: Optional[str], material_guid: str) -> Optional["MaterialNode"]:
|
||||
machine_definition = global_stack.definition
|
||||
extruder = global_stack.extruderList[int(position)]
|
||||
variant_name = extruder.variant.getName()
|
||||
approximate_diameter = extruder.getApproximateMaterialDiameter()
|
||||
|
||||
return self.getMaterialNode(machine_definition.getId(), variant_name, buildplate_name, approximate_diameter, material_guid)
|
||||
|
||||
# There are 2 ways to get fallback materials;
|
||||
# - A fallback by type (@sa getFallbackMaterialIdByMaterialType), which adds the generic version of this material
|
||||
# - A fallback by GUID; If a material has been duplicated, it should also check if the original materials do have
|
||||
# a GUID. This should only be done if the material itself does not have a quality just yet.
|
||||
def getFallBackMaterialIdsByMaterial(self, material: "InstanceContainer") -> List[str]:
|
||||
results = [] # type: List[str]
|
||||
|
||||
material_groups = self.getMaterialGroupListByGUID(material.getMetaDataEntry("GUID"))
|
||||
for material_group in material_groups: # type: ignore
|
||||
if material_group.name != material.getId():
|
||||
# If the material in the group is read only, put it at the front of the list (since that is the most
|
||||
# likely one to get a result)
|
||||
if material_group.is_read_only:
|
||||
results.insert(0, material_group.name)
|
||||
else:
|
||||
results.append(material_group.name)
|
||||
|
||||
fallback = self.getFallbackMaterialIdByMaterialType(material.getMetaDataEntry("material"))
|
||||
if fallback is not None:
|
||||
results.append(fallback)
|
||||
return results
|
||||
|
||||
#
|
||||
# Built-in quality profiles may be based on generic material IDs such as "generic_pla".
|
||||
# For materials such as ultimaker_pla_orange, no quality profiles may be found, so we should fall back to use
|
||||
# the generic material IDs to search for qualities.
|
||||
#
|
||||
# An example would be, suppose we have machine with preferred material set to "filo3d_pla" (1.75mm), but its
|
||||
# extruders only use 2.85mm materials, then we won't be able to find the preferred material for this machine.
|
||||
# A fallback would be to fetch a generic material of the same type "PLA" as "filo3d_pla", and in this case it will
|
||||
# be "generic_pla". This function is intended to get a generic fallback material for the given material type.
|
||||
#
|
||||
# This function returns the generic root material ID for the given material type, where material types are "PLA",
|
||||
# "ABS", etc.
|
||||
#
|
||||
def getFallbackMaterialIdByMaterialType(self, material_type: str) -> Optional[str]:
|
||||
# For safety
|
||||
if material_type not in self._fallback_materials_map:
|
||||
Logger.log("w", "The material type [%s] does not have a fallback material" % material_type)
|
||||
return None
|
||||
fallback_material = self._fallback_materials_map[material_type]
|
||||
if fallback_material:
|
||||
return self.getRootMaterialIDWithoutDiameter(fallback_material["id"])
|
||||
else:
|
||||
return None
|
||||
|
||||
## Get default material for given global stack, extruder position and extruder nozzle name
|
||||
# you can provide the extruder_definition and then the position is ignored (useful when building up global stack in CuraStackBuilder)
|
||||
def getDefaultMaterial(self, global_stack: "GlobalStack", position: str, nozzle_name: Optional[str],
|
||||
extruder_definition: Optional["DefinitionContainer"] = None) -> "MaterialNode":
|
||||
definition_id = global_stack.definition.getId()
|
||||
machine_node = ContainerTree.getInstance().machines[definition_id]
|
||||
if nozzle_name in machine_node.variants:
|
||||
nozzle_node = machine_node.variants[nozzle_name]
|
||||
else:
|
||||
Logger.log("w", "Could not find variant {nozzle_name} for machine with definition {definition_id} in the container tree".format(nozzle_name = nozzle_name, definition_id = definition_id))
|
||||
nozzle_node = next(iter(machine_node.variants))
|
||||
|
||||
if not parseBool(global_stack.getMetaDataEntry("has_materials", False)):
|
||||
return next(iter(nozzle_node.materials))
|
||||
|
||||
if extruder_definition is not None:
|
||||
material_diameter = extruder_definition.getProperty("material_diameter", "value")
|
||||
else:
|
||||
material_diameter = global_stack.extruders[position].getCompatibleMaterialDiameter()
|
||||
approximate_material_diameter = round(material_diameter)
|
||||
|
||||
return nozzle_node.preferredMaterial(approximate_material_diameter)
|
||||
|
||||
def removeMaterialByRootId(self, root_material_id: str):
|
||||
container_registry = CuraContainerRegistry.getInstance()
|
||||
results = container_registry.findContainers(id = root_material_id)
|
||||
if not results:
|
||||
container_registry.addWrongContainerId(root_material_id)
|
||||
|
||||
for result in results:
|
||||
container_registry.removeContainer(result.getMetaDataEntry("id", ""))
|
||||
|
||||
@pyqtSlot("QVariant", result = bool)
|
||||
def canMaterialBeRemoved(self, material_node: "MaterialNode"):
|
||||
# Check if the material is active in any extruder train. In that case, the material shouldn't be removed!
|
||||
# In the future we might enable this again, but right now, it's causing a ton of issues if we do (since it
|
||||
# corrupts the configuration)
|
||||
root_material_id = material_node.base_file
|
||||
ids_to_remove = {metadata.get("id", "") for metadata in CuraContainerRegistry.getInstance().findInstanceContainersMetadata(base_file = root_material_id)}
|
||||
|
||||
for extruder_stack in CuraContainerRegistry.getInstance().findContainerStacks(type = "extruder_train"):
|
||||
if extruder_stack.material.getId() in ids_to_remove:
|
||||
return False
|
||||
return True
|
||||
|
||||
## Change the user-visible name of a material.
|
||||
# \param material_node The ContainerTree node of the material to rename.
|
||||
# \param name The new name for the material.
|
||||
@pyqtSlot("QVariant", str)
|
||||
def setMaterialName(self, material_node: "MaterialNode", name: str) -> None:
|
||||
return cura.CuraApplication.CuraApplication.getMaterialManagementModel().setMaterialName(material_node, name)
|
||||
|
||||
## Deletes a material from Cura.
|
||||
#
|
||||
# This function does not do any safety checking any more. Please call this
|
||||
# function only if:
|
||||
# - The material is not read-only.
|
||||
# - The material is not used in any stacks.
|
||||
# If the material was not lazy-loaded yet, this will fully load the
|
||||
# container. When removing this material node, all other materials with
|
||||
# the same base fill will also be removed.
|
||||
# \param material_node The material to remove.
|
||||
@pyqtSlot("QVariant")
|
||||
def removeMaterial(self, material_node: "MaterialNode") -> None:
|
||||
return cura.CuraApplication.CuraApplication.getMaterialManagementModel().setMaterialName(material_node)
|
||||
|
||||
def duplicateMaterialByRootId(self, root_material_id: str, new_base_id: Optional[str] = None, new_metadata: Optional[Dict[str, Any]] = None) -> Optional[str]:
|
||||
result = cura.CuraApplication.CuraApplication.getInstance().getMaterialManagementModel().duplicateMaterialByBaseFile(root_material_id, new_base_id, new_metadata)
|
||||
if result is None:
|
||||
return "ERROR"
|
||||
return result
|
||||
|
||||
## Creates a duplicate of a material with the same GUID and base_file
|
||||
# metadata.
|
||||
# \param material_node The node representing the material to duplicate.
|
||||
# \param new_base_id A new material ID for the base material. The IDs of
|
||||
# the submaterials will be based off this one. If not provided, a material
|
||||
# ID will be generated automatically.
|
||||
# \param new_metadata Metadata for the new material. If not provided, this
|
||||
# will be duplicated from the original material.
|
||||
# \return The root material ID of the duplicate material.
|
||||
@pyqtSlot("QVariant", result = str)
|
||||
def duplicateMaterial(self, material_node: MaterialNode, new_base_id: Optional[str] = None, new_metadata: Optional[Dict[str, Any]] = None) -> str:
|
||||
result = cura.CuraApplication.CuraApplication.getInstance().getMaterialManagementModel().duplicateMaterial(material_node, new_base_id, new_metadata)
|
||||
if result is None:
|
||||
return "ERROR"
|
||||
return result
|
||||
|
||||
## Create a new material by cloning the preferred material for the current
|
||||
# material diameter and generate a new GUID.
|
||||
#
|
||||
# The material type is explicitly left to be the one from the preferred
|
||||
# material, since this allows the user to still have SOME profiles to work
|
||||
# with.
|
||||
# \return The ID of the newly created material.
|
||||
@pyqtSlot(result = str)
|
||||
def createMaterial(self) -> str:
|
||||
return cura.CuraApplication.CuraApplication.getMaterialManagementModel().createMaterial()
|
||||
|
||||
@pyqtSlot(str)
|
||||
def addFavorite(self, root_material_id: str) -> None:
|
||||
self._favorites.add(root_material_id)
|
||||
self.materialsUpdated.emit()
|
||||
|
||||
# Ensure all settings are saved.
|
||||
cura.CuraApplication.CuraApplication.getInstance().getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites)))
|
||||
cura.CuraApplication.CuraApplication.getInstance().saveSettings()
|
||||
|
||||
@pyqtSlot(str)
|
||||
def removeFavorite(self, root_material_id: str) -> None:
|
||||
try:
|
||||
self._favorites.remove(root_material_id)
|
||||
except KeyError:
|
||||
Logger.log("w", "Could not delete material %s from favorites as it was already deleted", root_material_id)
|
||||
return
|
||||
self.materialsUpdated.emit()
|
||||
|
||||
# Ensure all settings are saved.
|
||||
cura.CuraApplication.CuraApplication.getInstance().getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites)))
|
||||
cura.CuraApplication.CuraApplication.getInstance().saveSettings()
|
||||
|
||||
@pyqtSlot()
|
||||
def getFavorites(self):
|
||||
return self._favorites
|
|
@ -1,9 +1,9 @@
|
|||
# Copyright (c) 2019 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import Optional, Dict, Set
|
||||
from typing import Dict, Set
|
||||
|
||||
from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty
|
||||
from PyQt5.QtCore import Qt, QTimer, pyqtSignal, pyqtProperty
|
||||
|
||||
from UM.Qt.ListModel import ListModel
|
||||
|
||||
|
@ -38,14 +38,25 @@ class BaseMaterialsModel(ListModel):
|
|||
self._extruder_stack = None
|
||||
self._enabled = True
|
||||
|
||||
# CURA-6904
|
||||
# Updating the material model requires information from material nodes and containers. We use a timer here to
|
||||
# make sure that an update function call will not be directly invoked by an event. Because the triggered event
|
||||
# can be caused in the middle of a XMLMaterial loading, and the material container we try to find may not be
|
||||
# in the system yet. This will cause an infinite recursion of (1) trying to load a material, (2) trying to
|
||||
# update the material model, (3) cannot find the material container, load it, (4) repeat #1.
|
||||
self._update_timer = QTimer()
|
||||
self._update_timer.setInterval(100)
|
||||
self._update_timer.setSingleShot(True)
|
||||
self._update_timer.timeout.connect(self._update)
|
||||
|
||||
# Update the stack and the model data when the machine changes
|
||||
self._machine_manager.globalContainerChanged.connect(self._updateExtruderStack)
|
||||
self._updateExtruderStack()
|
||||
|
||||
# Update this model when switching machines or tabs, when adding materials or changing their metadata.
|
||||
self._machine_manager.activeStackChanged.connect(self._update)
|
||||
self._machine_manager.activeStackChanged.connect(self._onChanged)
|
||||
ContainerTree.getInstance().materialsChanged.connect(self._materialsListChanged)
|
||||
self._application.getMaterialManagementModel().favoritesChanged.connect(self._update)
|
||||
self._application.getMaterialManagementModel().favoritesChanged.connect(self._onChanged)
|
||||
|
||||
self.addRoleName(Qt.UserRole + 1, "root_material_id")
|
||||
self.addRoleName(Qt.UserRole + 2, "id")
|
||||
|
@ -64,14 +75,17 @@ class BaseMaterialsModel(ListModel):
|
|||
self.addRoleName(Qt.UserRole + 15, "container_node")
|
||||
self.addRoleName(Qt.UserRole + 16, "is_favorite")
|
||||
|
||||
def _onChanged(self) -> None:
|
||||
self._update_timer.start()
|
||||
|
||||
def _updateExtruderStack(self):
|
||||
global_stack = self._machine_manager.activeMachine
|
||||
if global_stack is None:
|
||||
return
|
||||
|
||||
if self._extruder_stack is not None:
|
||||
self._extruder_stack.pyqtContainersChanged.disconnect(self._update)
|
||||
self._extruder_stack.approximateMaterialDiameterChanged.disconnect(self._update)
|
||||
self._extruder_stack.pyqtContainersChanged.disconnect(self._onChanged)
|
||||
self._extruder_stack.approximateMaterialDiameterChanged.disconnect(self._onChanged)
|
||||
|
||||
try:
|
||||
self._extruder_stack = global_stack.extruderList[self._extruder_position]
|
||||
|
@ -79,10 +93,10 @@ class BaseMaterialsModel(ListModel):
|
|||
self._extruder_stack = None
|
||||
|
||||
if self._extruder_stack is not None:
|
||||
self._extruder_stack.pyqtContainersChanged.connect(self._update)
|
||||
self._extruder_stack.approximateMaterialDiameterChanged.connect(self._update)
|
||||
self._extruder_stack.pyqtContainersChanged.connect(self._onChanged)
|
||||
self._extruder_stack.approximateMaterialDiameterChanged.connect(self._onChanged)
|
||||
# Force update the model when the extruder stack changes
|
||||
self._update()
|
||||
self._onChanged()
|
||||
|
||||
def setExtruderPosition(self, position: int):
|
||||
if self._extruder_stack is None or self._extruder_position != position:
|
||||
|
@ -99,7 +113,7 @@ class BaseMaterialsModel(ListModel):
|
|||
self._enabled = enabled
|
||||
if self._enabled:
|
||||
# ensure the data is there again.
|
||||
self._update()
|
||||
self._onChanged()
|
||||
self.enabledChanged.emit()
|
||||
|
||||
@pyqtProperty(bool, fset = setEnabled, notify = enabledChanged)
|
||||
|
@ -119,12 +133,12 @@ class BaseMaterialsModel(ListModel):
|
|||
return
|
||||
if material.variant.machine.container_id != global_stack.definition.getId():
|
||||
return
|
||||
self._update()
|
||||
self._onChanged()
|
||||
|
||||
## Triggered when the list of favorite materials is changed.
|
||||
def _favoritesChanged(self, material_base_file: str) -> None:
|
||||
if material_base_file in self._available_materials:
|
||||
self._update()
|
||||
self._onChanged()
|
||||
|
||||
## This is an abstract method that needs to be implemented by the specific
|
||||
# models themselves.
|
||||
|
|
|
@ -9,14 +9,14 @@ class FavoriteMaterialsModel(BaseMaterialsModel):
|
|||
def __init__(self, parent = None):
|
||||
super().__init__(parent)
|
||||
cura.CuraApplication.CuraApplication.getInstance().getPreferences().preferenceChanged.connect(self._onFavoritesChanged)
|
||||
self._update()
|
||||
self._onChanged()
|
||||
|
||||
## Triggered when any preference changes, but only handles it when the list
|
||||
# of favourites is changed.
|
||||
def _onFavoritesChanged(self, preference_key: str) -> None:
|
||||
if preference_key != "cura/favorite_materials":
|
||||
return
|
||||
self._update()
|
||||
self._onChanged()
|
||||
|
||||
def _update(self):
|
||||
if not self._canUpdate():
|
||||
|
|
|
@ -7,7 +7,7 @@ class GenericMaterialsModel(BaseMaterialsModel):
|
|||
|
||||
def __init__(self, parent = None):
|
||||
super().__init__(parent)
|
||||
self._update()
|
||||
self._onChanged()
|
||||
|
||||
def _update(self):
|
||||
if not self._canUpdate():
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
from PyQt5.QtCore import Qt
|
||||
import collections
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import TYPE_CHECKING, Optional, Dict
|
||||
|
||||
from cura.Machines.Models.IntentModel import IntentModel
|
||||
from cura.Settings.IntentManager import IntentManager
|
||||
|
@ -25,16 +25,26 @@ class IntentCategoryModel(ListModel):
|
|||
IntentCategoryRole = Qt.UserRole + 2
|
||||
WeightRole = Qt.UserRole + 3
|
||||
QualitiesRole = Qt.UserRole + 4
|
||||
|
||||
#Translations to user-visible string. Ordered by weight.
|
||||
#TODO: Create a solution for this name and weight to be used dynamically.
|
||||
name_translation = collections.OrderedDict() #type: "collections.OrderedDict[str,str]"
|
||||
name_translation["default"] = catalog.i18nc("@label", "Default")
|
||||
name_translation["engineering"] = catalog.i18nc("@label", "Engineering")
|
||||
name_translation["smooth"] = catalog.i18nc("@label", "Smooth")
|
||||
DescriptionRole = Qt.UserRole + 5
|
||||
|
||||
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["engineering"] = {
|
||||
"name": catalog.i18nc("@label", "Engineering"),
|
||||
"description": catalog.i18nc("@text", "Suitable for engineering work")
|
||||
|
||||
}
|
||||
_translations["smooth"] = {
|
||||
"name": catalog.i18nc("@label", "Smooth"),
|
||||
"description": catalog.i18nc("@text", "Optimized for a smooth surfaces")
|
||||
}
|
||||
|
||||
## Creates a new model for a certain intent category.
|
||||
# \param The category to list the intent profiles for.
|
||||
def __init__(self, intent_category: str) -> None:
|
||||
|
@ -45,6 +55,7 @@ class IntentCategoryModel(ListModel):
|
|||
self.addRoleName(self.IntentCategoryRole, "intent_category")
|
||||
self.addRoleName(self.WeightRole, "weight")
|
||||
self.addRoleName(self.QualitiesRole, "qualities")
|
||||
self.addRoleName(self.DescriptionRole, "description")
|
||||
|
||||
application = cura.CuraApplication.CuraApplication.getInstance()
|
||||
|
||||
|
@ -73,10 +84,18 @@ class IntentCategoryModel(ListModel):
|
|||
qualities = IntentModel()
|
||||
qualities.setIntentCategory(category)
|
||||
result.append({
|
||||
"name": self.name_translation.get(category, catalog.i18nc("@label", "Unknown")),
|
||||
"name": IntentCategoryModel.translation(category, "name", catalog.i18nc("@label", "Unknown")),
|
||||
"description": IntentCategoryModel.translation(category, "description", None),
|
||||
"intent_category": category,
|
||||
"weight": list(self.name_translation.keys()).index(category),
|
||||
"weight": list(self._translations.keys()).index(category),
|
||||
"qualities": qualities
|
||||
})
|
||||
result.sort(key = lambda k: k["weight"])
|
||||
self.setItems(result)
|
||||
|
||||
## Get a display value for a category. See IntenCategoryModel._translations
|
||||
## for categories and keys
|
||||
@staticmethod
|
||||
def translation(category: str, key: str, default: Optional[str] = None):
|
||||
display_strings = IntentCategoryModel._translations.get(category, {})
|
||||
return display_strings.get(key, default)
|
||||
|
|
|
@ -345,11 +345,13 @@ class QualityManagementModel(ListModel):
|
|||
# Create quality_changes group items
|
||||
quality_changes_item_list = []
|
||||
for quality_changes_group in quality_changes_group_list:
|
||||
# CURA-6913 Note that custom qualities can be based on "not supported", so the quality group can be None.
|
||||
quality_group = quality_group_dict.get(quality_changes_group.quality_type)
|
||||
quality_type = quality_changes_group.quality_type
|
||||
item = {"name": quality_changes_group.name,
|
||||
"is_read_only": False,
|
||||
"quality_group": quality_group,
|
||||
"quality_type": quality_group.quality_type,
|
||||
"quality_type": quality_type,
|
||||
"quality_changes_group": quality_changes_group,
|
||||
"intent_category": quality_changes_group.intent_category,
|
||||
"section_name": catalog.i18nc("@label", "Custom profiles"),
|
||||
|
|
|
@ -1,215 +0,0 @@
|
|||
# Copyright (c) 2019 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import Any, Dict, List, Optional, TYPE_CHECKING
|
||||
|
||||
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot
|
||||
|
||||
from UM.Util import parseBool
|
||||
from UM.Settings.InstanceContainer import InstanceContainer
|
||||
from UM.Decorators import deprecated
|
||||
|
||||
import cura.CuraApplication
|
||||
from cura.Settings.ExtruderStack import ExtruderStack
|
||||
|
||||
from cura.Machines.ContainerTree import ContainerTree # The implementation that replaces this manager, to keep the deprecated interface working.
|
||||
from .QualityChangesGroup import QualityChangesGroup
|
||||
from .QualityGroup import QualityGroup
|
||||
from .QualityNode import QualityNode
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from UM.Settings.Interfaces import DefinitionContainerInterface
|
||||
from cura.Settings.GlobalStack import GlobalStack
|
||||
from .QualityChangesGroup import QualityChangesGroup
|
||||
|
||||
|
||||
#
|
||||
# Similar to MaterialManager, QualityManager maintains a number of maps and trees for quality profile lookup.
|
||||
# The models GUI and QML use are now only dependent on the QualityManager. That means as long as the data in
|
||||
# QualityManager gets updated correctly, the GUI models should be updated correctly too, and the same goes for GUI.
|
||||
#
|
||||
# For now, updating the lookup maps and trees here is very simple: we discard the old data completely and recreate them
|
||||
# again. This means the update is exactly the same as initialization. There are performance concerns about this approach
|
||||
# but so far the creation of the tables and maps is very fast and there is no noticeable slowness, we keep it like this
|
||||
# because it's simple.
|
||||
#
|
||||
class QualityManager(QObject):
|
||||
__instance = None
|
||||
|
||||
@classmethod
|
||||
@deprecated("Use the ContainerTree structure instead.", since = "4.3")
|
||||
def getInstance(cls) -> "QualityManager":
|
||||
if cls.__instance is None:
|
||||
cls.__instance = QualityManager()
|
||||
return cls.__instance
|
||||
|
||||
qualitiesUpdated = pyqtSignal()
|
||||
|
||||
def __init__(self, parent = None) -> None:
|
||||
super().__init__(parent)
|
||||
application = cura.CuraApplication.CuraApplication.getInstance()
|
||||
self._container_registry = application.getContainerRegistry()
|
||||
|
||||
self._empty_quality_container = application.empty_quality_container
|
||||
self._empty_quality_changes_container = application.empty_quality_changes_container
|
||||
|
||||
# For quality lookup
|
||||
self._machine_nozzle_buildplate_material_quality_type_to_quality_dict = {} # type: Dict[str, QualityNode]
|
||||
|
||||
# For quality_changes lookup
|
||||
self._machine_quality_type_to_quality_changes_dict = {} # type: Dict[str, QualityNode]
|
||||
|
||||
self._default_machine_definition_id = "fdmprinter"
|
||||
|
||||
self._container_registry.containerMetaDataChanged.connect(self._onContainerMetadataChanged)
|
||||
self._container_registry.containerAdded.connect(self._onContainerMetadataChanged)
|
||||
self._container_registry.containerRemoved.connect(self._onContainerMetadataChanged)
|
||||
|
||||
def _onContainerMetadataChanged(self, container: InstanceContainer) -> None:
|
||||
self._onContainerChanged(container)
|
||||
|
||||
def _onContainerChanged(self, container: InstanceContainer) -> None:
|
||||
container_type = container.getMetaDataEntry("type")
|
||||
if container_type not in ("quality", "quality_changes"):
|
||||
return
|
||||
|
||||
# Returns a dict of "custom profile name" -> QualityChangesGroup
|
||||
def getQualityChangesGroups(self, machine: "GlobalStack") -> List[QualityChangesGroup]:
|
||||
variant_names = [extruder.variant.getName() for extruder in machine.extruderList]
|
||||
material_bases = [extruder.material.getMetaDataEntry("base_file") for extruder in machine.extruderList]
|
||||
extruder_enabled = [extruder.isEnabled for extruder in machine.extruderList]
|
||||
machine_node = ContainerTree.getInstance().machines[machine.definition.getId()]
|
||||
return machine_node.getQualityChangesGroups(variant_names, material_bases, extruder_enabled)
|
||||
|
||||
## Gets the quality groups for the current printer.
|
||||
#
|
||||
# Both available and unavailable quality groups will be included. Whether
|
||||
# a quality group is available can be known via the field
|
||||
# ``QualityGroup.is_available``. For more details, see QualityGroup.
|
||||
# \return A dictionary with quality types as keys and the quality groups
|
||||
# for those types as values.
|
||||
def getQualityGroups(self, global_stack: "GlobalStack") -> Dict[str, QualityGroup]:
|
||||
# Gather up the variant names and material base files for each extruder.
|
||||
variant_names = [extruder.variant.getName() for extruder in global_stack.extruderList]
|
||||
material_bases = [extruder.material.getMetaDataEntry("base_file") for extruder in global_stack.extruderList]
|
||||
extruder_enabled = [extruder.isEnabled for extruder in global_stack.extruderList]
|
||||
definition_id = global_stack.definition.getId()
|
||||
return ContainerTree.getInstance().machines[definition_id].getQualityGroups(variant_names, material_bases, extruder_enabled)
|
||||
|
||||
def getQualityGroupsForMachineDefinition(self, machine: "GlobalStack") -> Dict[str, QualityGroup]:
|
||||
machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
|
||||
|
||||
# To find the quality container for the GlobalStack, check in the following fall-back manner:
|
||||
# (1) the machine-specific node
|
||||
# (2) the generic node
|
||||
machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(machine_definition_id)
|
||||
default_machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(
|
||||
self._default_machine_definition_id)
|
||||
nodes_to_check = [machine_node, default_machine_node]
|
||||
|
||||
# Iterate over all quality_types in the machine node
|
||||
quality_group_dict = dict()
|
||||
for node in nodes_to_check:
|
||||
if node and node.quality_type:
|
||||
quality_group = QualityGroup(node.getMetaDataEntry("name", ""), node.quality_type)
|
||||
quality_group.setGlobalNode(node)
|
||||
quality_group_dict[node.quality_type] = quality_group
|
||||
|
||||
return quality_group_dict
|
||||
|
||||
## Get the quality group for the preferred quality type for a certain
|
||||
# global stack.
|
||||
#
|
||||
# If the preferred quality type is not available, ``None`` will be
|
||||
# returned.
|
||||
# \param machine The global stack of the machine to get the preferred
|
||||
# quality group for.
|
||||
# \return The preferred quality group, or ``None`` if that is not
|
||||
# available.
|
||||
def getDefaultQualityType(self, machine: "GlobalStack") -> Optional[QualityGroup]:
|
||||
machine_node = ContainerTree.getInstance().machines[machine.definition.getId()]
|
||||
quality_groups = self.getQualityGroups(machine)
|
||||
result = quality_groups.get(machine_node.preferred_quality_type)
|
||||
if result is not None and result.is_available:
|
||||
return result
|
||||
return None # If preferred quality type is not available, leave it up for the caller.
|
||||
|
||||
|
||||
#
|
||||
# Methods for GUI
|
||||
#
|
||||
|
||||
## Deletes a custom profile. It will be gone forever.
|
||||
# \param quality_changes_group The quality changes group representing the
|
||||
# profile to delete.
|
||||
@pyqtSlot(QObject)
|
||||
def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup") -> None:
|
||||
return cura.CuraApplication.CuraApplication.getInstance().getQualityManagementModel().removeQualityChangesGroup(quality_changes_group)
|
||||
|
||||
## Rename a custom profile.
|
||||
#
|
||||
# Because the names must be unique, the new name may not actually become
|
||||
# the name that was given. The actual name is returned by this function.
|
||||
# \param quality_changes_group The custom profile that must be renamed.
|
||||
# \param new_name The desired name for the profile.
|
||||
# \return The actual new name of the profile, after making the name
|
||||
# unique.
|
||||
@pyqtSlot(QObject, str, result = str)
|
||||
def renameQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup", new_name: str) -> str:
|
||||
return cura.CuraApplication.CuraApplication.getInstance().getQualityManagementModel().renameQualityChangesGroup(quality_changes_group, new_name)
|
||||
|
||||
## Duplicates a given quality profile OR quality changes profile.
|
||||
# \param new_name The desired name of the new profile. This will be made
|
||||
# unique, so it might end up with a different name.
|
||||
# \param quality_model_item The item of this model to duplicate, as
|
||||
# dictionary. See the descriptions of the roles of this list model.
|
||||
@pyqtSlot(str, "QVariantMap")
|
||||
def duplicateQualityChanges(self, quality_changes_name: str, quality_model_item: Dict[str, Any]) -> None:
|
||||
return cura.CuraApplication.CuraApplication.getInstance().getQualityManagementModel().duplicateQualityChanges(quality_changes_name, quality_model_item)
|
||||
|
||||
## Create quality changes containers from the user containers in the active
|
||||
# stacks.
|
||||
#
|
||||
# This will go through the global and extruder stacks and create
|
||||
# quality_changes containers from the user containers in each stack. These
|
||||
# then replace the quality_changes containers in the stack and clear the
|
||||
# user settings.
|
||||
# \param base_name The new name for the quality changes profile. The final
|
||||
# name of the profile might be different from this, because it needs to be
|
||||
# made unique.
|
||||
@pyqtSlot(str)
|
||||
def createQualityChanges(self, base_name: str) -> None:
|
||||
return cura.CuraApplication.CuraApplication.getInstance().getQualityManagementModel().createQualityChanges(base_name)
|
||||
|
||||
## Create a quality changes container with the given set-up.
|
||||
# \param quality_type The quality type of the new container.
|
||||
# \param new_name The name of the container. This name must be unique.
|
||||
# \param machine The global stack to create the profile for.
|
||||
# \param extruder_stack The extruder stack to create the profile for. If
|
||||
# not provided, only a global container will be created.
|
||||
def _createQualityChanges(self, quality_type: str, new_name: str, machine: "GlobalStack", extruder_stack: Optional["ExtruderStack"]) -> "InstanceContainer":
|
||||
return cura.CuraApplication.CuraApplication.getInstance().getQualityManagementModel()._createQualityChanges(quality_type, new_name, machine, extruder_stack)
|
||||
|
||||
#
|
||||
# Gets the machine definition ID that can be used to search for Quality containers that are suitable for the given
|
||||
# machine. The rule is as follows:
|
||||
# 1. By default, the machine definition ID for quality container search will be "fdmprinter", which is the generic
|
||||
# machine.
|
||||
# 2. If a machine has its own machine quality (with "has_machine_quality = True"), we should use the given machine's
|
||||
# own machine definition ID for quality search.
|
||||
# Example: for an Ultimaker 3, the definition ID should be "ultimaker3".
|
||||
# 3. When condition (2) is met, AND the machine has "quality_definition" defined in its definition file, then the
|
||||
# definition ID specified in "quality_definition" should be used.
|
||||
# Example: for an Ultimaker 3 Extended, it has "quality_definition = ultimaker3". This means Ultimaker 3 Extended
|
||||
# shares the same set of qualities profiles as Ultimaker 3.
|
||||
#
|
||||
def getMachineDefinitionIDForQualitySearch(machine_definition: "DefinitionContainerInterface",
|
||||
default_definition_id: str = "fdmprinter") -> str:
|
||||
machine_definition_id = default_definition_id
|
||||
if parseBool(machine_definition.getMetaDataEntry("has_machine_quality", False)):
|
||||
# Only use the machine's own quality definition ID if this machine has machine quality.
|
||||
machine_definition_id = machine_definition.getMetaDataEntry("quality_definition")
|
||||
if machine_definition_id is None:
|
||||
machine_definition_id = machine_definition.getId()
|
||||
|
||||
return machine_definition_id
|
|
@ -1,98 +0,0 @@
|
|||
# Copyright (c) 2019 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from collections import OrderedDict
|
||||
from typing import Optional, TYPE_CHECKING, Dict
|
||||
|
||||
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
|
||||
from UM.Decorators import deprecated
|
||||
from UM.Logger import Logger
|
||||
from UM.Util import parseBool
|
||||
|
||||
from cura.Machines.ContainerNode import ContainerNode
|
||||
from cura.Machines.VariantType import VariantType, ALL_VARIANT_TYPES
|
||||
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
|
||||
from cura.Settings.GlobalStack import GlobalStack
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from UM.Settings.DefinitionContainer import DefinitionContainer
|
||||
|
||||
|
||||
#
|
||||
# VariantManager is THE place to look for a specific variant. It maintains two variant lookup tables with the following
|
||||
# structure:
|
||||
#
|
||||
# [machine_definition_id] -> [variant_type] -> [variant_name] -> ContainerNode(metadata / container)
|
||||
# Example: "ultimaker3" -> "buildplate" -> "Glass" (if present) -> ContainerNode
|
||||
# -> ...
|
||||
# -> "nozzle" -> "AA 0.4"
|
||||
# -> "BB 0.8"
|
||||
# -> ...
|
||||
#
|
||||
# [machine_definition_id] -> [machine_buildplate_type] -> ContainerNode(metadata / container)
|
||||
# Example: "ultimaker3" -> "glass" (this is different from the variant name) -> ContainerNode
|
||||
#
|
||||
# Note that the "container" field is not loaded in the beginning because it would defeat the purpose of lazy-loading.
|
||||
# A container is loaded when getVariant() is called to load a variant InstanceContainer.
|
||||
#
|
||||
class VariantManager:
|
||||
__instance = None
|
||||
|
||||
@classmethod
|
||||
@deprecated("Use the ContainerTree structure instead.", since = "4.3")
|
||||
def getInstance(cls) -> "VariantManager":
|
||||
if cls.__instance is None:
|
||||
cls.__instance = VariantManager()
|
||||
return cls.__instance
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._machine_to_variant_dict_map = dict() # type: Dict[str, Dict["VariantType", Dict[str, ContainerNode]]]
|
||||
|
||||
self._exclude_variant_id_list = ["empty_variant"]
|
||||
|
||||
#
|
||||
# Gets the variant InstanceContainer with the given information.
|
||||
# Almost the same as getVariantMetadata() except that this returns an InstanceContainer if present.
|
||||
#
|
||||
def getVariantNode(self, machine_definition_id: str, variant_name: str,
|
||||
variant_type: Optional["VariantType"] = None) -> Optional["ContainerNode"]:
|
||||
if variant_type is None:
|
||||
variant_node = None
|
||||
variant_type_dict = self._machine_to_variant_dict_map.get("machine_definition_id", {})
|
||||
for variant_dict in variant_type_dict.values():
|
||||
if variant_name in variant_dict:
|
||||
variant_node = variant_dict[variant_name]
|
||||
break
|
||||
return variant_node
|
||||
|
||||
return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {}).get(variant_name)
|
||||
|
||||
def getVariantNodes(self, machine: "GlobalStack", variant_type: "VariantType") -> Dict[str, ContainerNode]:
|
||||
machine_definition_id = machine.definition.getId()
|
||||
return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {})
|
||||
|
||||
#
|
||||
# Gets the default variant for the given machine definition.
|
||||
# If the optional GlobalStack is given, the metadata information will be fetched from the GlobalStack instead of
|
||||
# the DefinitionContainer. Because for machines such as UM2, you can enable Olsson Block, which will set
|
||||
# "has_variants" to True in the GlobalStack. In those cases, we need to fetch metadata from the GlobalStack or
|
||||
# it may not be correct.
|
||||
#
|
||||
def getDefaultVariantNode(self, machine_definition: "DefinitionContainer",
|
||||
variant_type: "VariantType",
|
||||
global_stack: Optional["GlobalStack"] = None) -> Optional["ContainerNode"]:
|
||||
machine_definition_id = machine_definition.getId()
|
||||
container_for_metadata_fetching = global_stack if global_stack is not None else machine_definition
|
||||
|
||||
preferred_variant_name = None
|
||||
if variant_type == VariantType.BUILD_PLATE:
|
||||
if parseBool(container_for_metadata_fetching.getMetaDataEntry("has_variant_buildplates", False)):
|
||||
preferred_variant_name = container_for_metadata_fetching.getMetaDataEntry("preferred_variant_buildplate_name")
|
||||
else:
|
||||
if parseBool(container_for_metadata_fetching.getMetaDataEntry("has_variants", False)):
|
||||
preferred_variant_name = container_for_metadata_fetching.getMetaDataEntry("preferred_variant_name")
|
||||
|
||||
node = None
|
||||
if preferred_variant_name:
|
||||
node = self.getVariantNode(machine_definition_id, preferred_variant_name, variant_type)
|
||||
return node
|
|
@ -122,8 +122,8 @@ class VariantNode(ContainerNode):
|
|||
if base_file not in self.materials: # Completely new base file. Always better than not having a file as long as it matches our set-up.
|
||||
if material_definition != "fdmprinter" and material_definition != self.machine.container_id:
|
||||
return
|
||||
material_variant = container.getMetaDataEntry("variant_name", empty_variant_container.getName())
|
||||
if material_variant != self.variant_name:
|
||||
material_variant = container.getMetaDataEntry("variant_name")
|
||||
if material_variant is not None and material_variant != self.variant_name:
|
||||
return
|
||||
else: # We already have this base profile. Replace the base profile if the new one is more specific.
|
||||
new_definition = container.getMetaDataEntry("definition")
|
||||
|
|
|
@ -1586,7 +1586,8 @@ class MachineManager(QObject):
|
|||
|
||||
intent_category = self.activeIntentCategory
|
||||
if intent_category != "default":
|
||||
intent_display_name = IntentCategoryModel.name_translation.get(intent_category,
|
||||
intent_display_name = IntentCategoryModel.translation(intent_category,
|
||||
"name",
|
||||
catalog.i18nc("@label", "Unknown"))
|
||||
display_name = "{intent_name} - {the_rest}".format(intent_name = intent_display_name,
|
||||
the_rest = display_name)
|
||||
|
|
|
@ -106,6 +106,11 @@ class StartSliceJob(Job):
|
|||
if stack is None:
|
||||
return False
|
||||
|
||||
# if there are no per-object settings we don't need to check the other settings here
|
||||
stack_top = stack.getTop()
|
||||
if stack_top is None or not stack_top.getAllKeys():
|
||||
return False
|
||||
|
||||
for key in stack.getAllKeys():
|
||||
validation_state = stack.getProperty(key, "validationState")
|
||||
if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError, ValidatorState.Invalid):
|
||||
|
|
|
@ -11,12 +11,30 @@ import Cura 1.0 as Cura
|
|||
|
||||
Item
|
||||
{
|
||||
|
||||
// Subtract the actionPanel from the safe area. This way the view won't draw interface elements under/over it
|
||||
Item {
|
||||
id: safeArea
|
||||
visible: false
|
||||
anchors.left: parent.left
|
||||
anchors.right: actionPanelWidget.left
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: actionPanelWidget.top
|
||||
}
|
||||
|
||||
Loader
|
||||
{
|
||||
id: previewMain
|
||||
anchors.fill: parent
|
||||
|
||||
source: UM.Controller.activeView != null && UM.Controller.activeView.mainComponent != null ? UM.Controller.activeView.mainComponent : ""
|
||||
|
||||
Binding
|
||||
{
|
||||
target: previewMain.item
|
||||
property: "safeArea"
|
||||
value:safeArea
|
||||
}
|
||||
}
|
||||
|
||||
Cura.ActionPanelWidget
|
||||
|
|
|
@ -176,6 +176,11 @@ Item
|
|||
}
|
||||
}
|
||||
|
||||
onHeightChanged : {
|
||||
// After a height change, the pixel-position of the lower handle is out of sync with the property value
|
||||
setLowerValue(lowerValue)
|
||||
}
|
||||
|
||||
// Upper handle
|
||||
Rectangle
|
||||
{
|
||||
|
@ -333,7 +338,6 @@ Item
|
|||
// set the slider position based on the lower value
|
||||
function setValue(value)
|
||||
{
|
||||
|
||||
// Normalize values between range, since using arrow keys will create out-of-the-range values
|
||||
value = sliderRoot.normalizeValue(value)
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ if TYPE_CHECKING:
|
|||
catalog = i18nCatalog("cura")
|
||||
|
||||
|
||||
## View used to display g-code paths.
|
||||
## The preview layer view. It is used to display g-code paths.
|
||||
class SimulationView(CuraView):
|
||||
# Must match SimulationViewMenuComponent.qml
|
||||
LAYER_VIEW_TYPE_MATERIAL_TYPE = 0
|
||||
|
|
|
@ -11,9 +11,18 @@ import Cura 1.0 as Cura
|
|||
|
||||
Item
|
||||
{
|
||||
property bool is_simulation_playing: false
|
||||
// An Item whose bounds are guaranteed to be safe for overlays to be placed.
|
||||
// Defaults to parent, ie. the entire available area
|
||||
// eg. the layer slider will not be placed in this area.
|
||||
property var safeArea: parent
|
||||
|
||||
|
||||
property bool isSimulationPlaying: false
|
||||
readonly property var layerSliderSafeYMax: safeArea.y + safeArea.height
|
||||
|
||||
visible: UM.SimulationView.layerActivity && CuraApplication.platformActivity
|
||||
|
||||
// A slider which lets users trace a single layer (XY movements)
|
||||
PathSlider
|
||||
{
|
||||
id: pathSlider
|
||||
|
@ -58,7 +67,7 @@ Item
|
|||
UM.SimpleButton
|
||||
{
|
||||
id: playButton
|
||||
iconSource: !is_simulation_playing ? "./resources/simulation_resume.svg": "./resources/simulation_pause.svg"
|
||||
iconSource: !isSimulationPlaying ? "./resources/simulation_resume.svg": "./resources/simulation_pause.svg"
|
||||
width: UM.Theme.getSize("small_button").width
|
||||
height: UM.Theme.getSize("small_button").height
|
||||
hoverColor: UM.Theme.getColor("slider_handle_active")
|
||||
|
@ -88,7 +97,7 @@ Item
|
|||
|
||||
onClicked:
|
||||
{
|
||||
if(is_simulation_playing)
|
||||
if(isSimulationPlaying)
|
||||
{
|
||||
pauseSimulation()
|
||||
}
|
||||
|
@ -102,7 +111,7 @@ Item
|
|||
{
|
||||
UM.SimulationView.setSimulationRunning(false)
|
||||
simulationTimer.stop()
|
||||
is_simulation_playing = false
|
||||
isSimulationPlaying = false
|
||||
layerSlider.manuallyChanged = true
|
||||
pathSlider.manuallyChanged = true
|
||||
}
|
||||
|
@ -131,7 +140,7 @@ Item
|
|||
|
||||
// When the user plays the simulation, if the path slider is at the end of this layer, we start
|
||||
// the simulation at the beginning of the current layer.
|
||||
if (!is_simulation_playing)
|
||||
if (!isSimulationPlaying)
|
||||
{
|
||||
if (currentPath >= numPaths)
|
||||
{
|
||||
|
@ -166,22 +175,28 @@ Item
|
|||
}
|
||||
// The status must be set here instead of in the resumeSimulation function otherwise it won't work
|
||||
// correctly, because part of the logic is in this trigger function.
|
||||
is_simulation_playing = true
|
||||
isSimulationPlaying = true
|
||||
}
|
||||
}
|
||||
|
||||
// Scrolls trough Z layers
|
||||
LayerSlider
|
||||
{
|
||||
property var preferredHeight: UM.Theme.getSize("slider_layerview_size").height
|
||||
property double heightMargin: UM.Theme.getSize("default_margin").height
|
||||
id: layerSlider
|
||||
|
||||
width: UM.Theme.getSize("slider_handle").width
|
||||
height: UM.Theme.getSize("slider_layerview_size").height
|
||||
height: preferredHeight + heightMargin * 2 < layerSliderSafeYMax ? preferredHeight : layerSliderSafeYMax - heightMargin * 2
|
||||
|
||||
anchors
|
||||
{
|
||||
right: parent.right
|
||||
verticalCenter: parent.verticalCenter
|
||||
verticalCenterOffset: -(parent.height - layerSliderSafeYMax) / 2 // center between parent top and layerSliderSafeYMax
|
||||
rightMargin: UM.Theme.getSize("default_margin").width
|
||||
bottomMargin: heightMargin
|
||||
topMargin: heightMargin
|
||||
}
|
||||
|
||||
// Custom properties
|
||||
|
|
|
@ -36,9 +36,15 @@ class ZeroConfClient:
|
|||
def start(self) -> None:
|
||||
self._service_changed_request_queue = Queue()
|
||||
self._service_changed_request_event = Event()
|
||||
self._service_changed_request_thread = Thread(target=self._handleOnServiceChangedRequests, daemon=True)
|
||||
self._service_changed_request_thread.start()
|
||||
try:
|
||||
self._zero_conf = Zeroconf()
|
||||
# CURA-6855 catch WinErrors
|
||||
except OSError:
|
||||
Logger.logException("e", "Failed to create zeroconf instance.")
|
||||
return
|
||||
|
||||
self._service_changed_request_thread = Thread(target = self._handleOnServiceChangedRequests, daemon = True)
|
||||
self._service_changed_request_thread.start()
|
||||
self._zero_conf_browser = ServiceBrowser(self._zero_conf, self.ZERO_CONF_NAME, [self._queueService])
|
||||
|
||||
# Cleanup ZeroConf resources.
|
||||
|
|
|
@ -2,6 +2,7 @@ import configparser
|
|||
from typing import Tuple, List
|
||||
import io
|
||||
from UM.VersionUpgrade import VersionUpgrade
|
||||
from UM.Util import parseBool # To parse whether the Alternate Skin Rotations function is activated.
|
||||
|
||||
_renamed_container_id_map = {
|
||||
"ultimaker2_0.25": "ultimaker2_olsson_0.25",
|
||||
|
@ -61,6 +62,11 @@ class VersionUpgrade43to44(VersionUpgrade):
|
|||
if parser["metadata"].get("type", "") == "quality_changes":
|
||||
parser["metadata"]["intent_category"] = "default"
|
||||
|
||||
if "values" in parser:
|
||||
# Alternate skin rotation should be translated to top/bottom line directions.
|
||||
if "skin_alternate_rotation" in parser["values"] and parseBool(parser["values"]["skin_alternate_rotation"]):
|
||||
parser["values"]["skin_angles"] = "[45, 135, 0, 90]"
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
||||
|
|
|
@ -76,7 +76,9 @@ class XmlMaterialProfile(InstanceContainer):
|
|||
new_setting_values_dict[self.__material_properties_setting_map[k]] = v
|
||||
|
||||
if not apply_to_all: # Historical: If you only want to modify THIS container. We only used that to prevent recursion but with the below code that's no longer necessary.
|
||||
container_query = registry.findContainers(id = self.getId())
|
||||
# CURA-6920: This is an optimization, but it also fixes the problem that you can only set metadata for a
|
||||
# material container that can be found in the container registry.
|
||||
container_query = [self]
|
||||
else:
|
||||
container_query = registry.findContainers(base_file = self.getMetaDataEntry("base_file"))
|
||||
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
},
|
||||
"speed_print": { "default_value": 14 },
|
||||
"speed_travel": { "value": "speed_print" },
|
||||
"speed_infill": { "default_value": 14 },
|
||||
"speed_wall": { "value": "speed_print * 0.7" },
|
||||
"speed_topbottom": { "value": "speed_print * 0.7" },
|
||||
"speed_layer_0": { "value": "speed_print * 0.7" },
|
||||
|
|
|
@ -17,15 +17,10 @@
|
|||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "3Dator" },
|
||||
"speed_travel": { "default_value": 120 },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"infill_sparse_density": { "default_value": 20 },
|
||||
"speed_wall_x": { "default_value": 45 },
|
||||
"speed_wall_0": { "default_value": 40 },
|
||||
"speed_topbottom": { "default_value": 35 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 50 },
|
||||
"speed_infill": { "default_value": 60 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 260 },
|
||||
|
@ -33,8 +28,6 @@
|
|||
"machine_depth": { "default_value": 170 },
|
||||
"machine_width": { "default_value": 180 },
|
||||
"retraction_speed": {"default_value":100},
|
||||
"cool_fan_speed_min": {"default_value": 20},
|
||||
"cool_fan_speed_max": {"default_value": 70},
|
||||
"adhesion_type": { "default_value": "none" },
|
||||
"machine_head_with_fans_polygon": {
|
||||
"default_value": [
|
||||
|
|
|
@ -79,9 +79,6 @@
|
|||
"line_width": {
|
||||
"value": "round(machine_nozzle_size * 0.875, 2)"
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"speed_support": {
|
||||
"value": "speed_wall_0"
|
||||
},
|
||||
|
@ -107,22 +104,18 @@
|
|||
"default_value": 25
|
||||
},
|
||||
"switch_extruder_retraction_amount": {
|
||||
"default_value": 0,
|
||||
"value": "retraction_amount",
|
||||
"enabled": false
|
||||
},
|
||||
"switch_extruder_retraction_speeds": {
|
||||
"default_value": 25,
|
||||
"value": "retraction_speed",
|
||||
"enabled": false
|
||||
},
|
||||
"switch_extruder_retraction_speed": {
|
||||
"default_value": 25,
|
||||
"value": "retraction_retract_speed",
|
||||
"enabled": false
|
||||
},
|
||||
"switch_extruder_prime_speed": {
|
||||
"default_value": 25,
|
||||
"value": "retraction_prime_speed",
|
||||
"enabled": false
|
||||
},
|
||||
|
@ -142,11 +135,9 @@
|
|||
"default_value": "RepRap (Marlin/Sprinter)"
|
||||
},
|
||||
"machine_start_gcode" : {
|
||||
"default_value": "",
|
||||
"value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nM200 D0 T0 ;reset filament diameter\\nM200 D0 T1\\nG28 Z0; home all\\nG28 X0 Y0\\nG0 Z20 F2400 ;move the platform to 20mm\\nG92 E0\\nM190 S{material_bed_temperature_layer_0}\\nM109 T0 S{material_standby_temperature, 0}\\nM109 T1 S{material_print_temperature_layer_0, 1}\\nM104 T0 S{material_print_temperature_layer_0, 0}\\nT1 ; move to the 2th head\\nG0 Z20 F2400\\nG92 E-7.0 ;prime distance\\nG1 E0 F45 ;purge nozzle\\nG1 E-5.1 F1500 ; retract\\nG1 X90 Z0.01 F5000 ; move away from the prime poop\\nG1 X50 F9000\\nG0 Z20 F2400\\nT0 ; move to the first head\\nM104 T1 S{material_standby_temperature, 1}\\nG0 Z20 F2400\\nM104 T{initial_extruder_nr} S{material_print_temperature_layer_0, initial_extruder_nr}\\nG92 E-7.0\\nG1 E0 F45 ;purge nozzle\\nG1 X60 Z0.01 F5000 ; move away from the prime poop\\nG1 X20 F9000\\nM400 ;finish all moves\\nG92 E0\\n;end of startup sequence\\n\""
|
||||
},
|
||||
"machine_end_gcode" : {
|
||||
"default_value": "",
|
||||
"value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G90 ;absolute positioning\\nM104 S0 T0 ;extruder heater off\\nM104 S0 T1\\nM140 S0 ;turn off bed\\nT0 ; move to the first head\\nM107 ;fan off\""
|
||||
},
|
||||
"machine_extruder_count": {
|
||||
|
@ -158,12 +149,10 @@
|
|||
},
|
||||
"acceleration_print":
|
||||
{
|
||||
"default_value": 2000,
|
||||
"value": "2000"
|
||||
},
|
||||
"acceleration_travel":
|
||||
{
|
||||
"default_value": 3000,
|
||||
"value": "acceleration_print if magic_spiralize else 3000"
|
||||
},
|
||||
"acceleration_layer_0": { "value": "acceleration_topbottom" },
|
||||
|
@ -183,7 +172,6 @@
|
|||
},
|
||||
"jerk_travel":
|
||||
{
|
||||
"default_value": 20,
|
||||
"value": "jerk_print if magic_spiralize else 20"
|
||||
},
|
||||
"jerk_layer_0": { "value": "jerk_topbottom" },
|
||||
|
|
|
@ -49,33 +49,9 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 200
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 0
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 70
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 25
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 15
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 150
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 30
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
}
|
||||
|
|
|
@ -49,33 +49,9 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 200
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 0
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 70
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 25
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 15
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 150
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 30
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
}
|
||||
|
|
|
@ -49,33 +49,9 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 200
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 0
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 70
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 25
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 15
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 150
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 30
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
}
|
||||
|
|
|
@ -47,12 +47,6 @@
|
|||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 210
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 50
|
||||
},
|
||||
"layer_height_0": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
|
@ -62,21 +56,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 120
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
},
|
||||
|
|
|
@ -22,16 +22,9 @@
|
|||
"default_value": "; -- END GCODE --\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F80 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ;turn the fan off; -- end of END GCODE --"
|
||||
},
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"material_print_temperature": { "default_value": 210 },
|
||||
"material_bed_temperature": { "default_value": 50 },
|
||||
"layer_height_0": { "default_value": 0.2 },
|
||||
"wall_thickness": { "default_value": 1.2 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
"speed_infill": { "default_value": 50 },
|
||||
"speed_wall": { "default_value": 35 },
|
||||
"speed_topbottom": { "default_value": 35 },
|
||||
"speed_travel": { "default_value": 120 },
|
||||
"speed_layer_0": { "default_value": 20 },
|
||||
"support_enable": { "default_value": true },
|
||||
"retraction_enable": { "default_value": true },
|
||||
"retraction_amount": { "default_value": 5 },
|
||||
|
|
|
@ -15,26 +15,19 @@
|
|||
},
|
||||
|
||||
"overrides": {
|
||||
"speed_topbottom": { "default_value": 40 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
"machine_name": { "default_value": "BFB_Test" },
|
||||
"machine_heated_bed": { "default_value": false },
|
||||
"speed_layer_0": { "default_value": 25 },
|
||||
"machine_width": { "default_value": 275 },
|
||||
"machine_gcode_flavor": { "default_value": "BFB" },
|
||||
"machine_depth": { "default_value": 265 },
|
||||
"speed_infill": { "default_value": 30 },
|
||||
"machine_center_is_zero": { "default_value": true },
|
||||
"machine_height": { "default_value": 240 },
|
||||
"layer_height": { "default_value": 0.25 },
|
||||
"material_print_temperature": { "default_value": 200 },
|
||||
"retraction_amount": { "default_value": 0.05 },
|
||||
"speed_wall_0": { "default_value": 25 },
|
||||
"speed_travel": { "default_value": 50 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"layer_height_0": { "default_value": 0.5 },
|
||||
"speed_wall_x": { "default_value": 20 }
|
||||
"layer_height_0": { "default_value": 0.5 }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "BIBO2 dual",
|
||||
"version": 2,
|
||||
"name": "BIBO2 dual",
|
||||
"inherits": "fdmprinter",
|
||||
|
|
|
@ -54,33 +54,9 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 220
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 0
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 120
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
}
|
||||
|
|
|
@ -24,26 +24,14 @@
|
|||
"machine_height": { "default_value": 220 },
|
||||
"machine_heated_bed": { "default_value": false },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"material_print_temperature": { "default_value": 210 },
|
||||
"material_bed_temperature": { "default_value": 0 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"layer_height_0": { "default_value": 0.2 },
|
||||
"wall_line_count": { "default_value": 3 },
|
||||
"wall_thickness": { "default_value": 1.2 },
|
||||
"top_bottom_thickness": { "default_value": 1.2 },
|
||||
"infill_sparse_density": { "default_value": 20 },
|
||||
"infill_overlap": { "default_value": 15 },
|
||||
"speed_print": { "default_value": 60 },
|
||||
"speed_travel": { "default_value": 160 },
|
||||
"speed_layer_0": { "default_value": 30 },
|
||||
"speed_wall_x": { "default_value": 35 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"speed_infill": { "default_value": 80 },
|
||||
"speed_topbottom": { "default_value": 35 },
|
||||
"skirt_brim_speed": { "default_value": 35 },
|
||||
"skirt_line_count": { "default_value": 4 },
|
||||
"skirt_brim_minimal_length": { "default_value": 30 },
|
||||
"skirt_gap": { "default_value": 6 },
|
||||
"cool_fan_full_at_height": { "default_value": 0.4 }
|
||||
"skirt_gap": { "default_value": 6 }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,33 +53,9 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 220
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 0
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 120
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
}
|
||||
|
|
|
@ -54,33 +54,9 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 220
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 0
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 120
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
}
|
||||
|
|
|
@ -41,21 +41,12 @@
|
|||
"machine_gcode_flavor": {
|
||||
"default_value": "RepRap (Marlin/Sprinter)"
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 210
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 0
|
||||
},
|
||||
"layer_height": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
"layer_height_0": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
"wall_line_count": {
|
||||
"default_value": 3
|
||||
},
|
||||
"wall_thickness": {
|
||||
"default_value": 1.2
|
||||
},
|
||||
|
@ -65,33 +56,9 @@
|
|||
"infill_sparse_density": {
|
||||
"default_value": 20
|
||||
},
|
||||
"infill_overlap": {
|
||||
"default_value": 15
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 160
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 30
|
||||
},
|
||||
"speed_wall_x": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_wall_0": {
|
||||
"default_value": 30
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 80
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 35
|
||||
},
|
||||
"skirt_brim_speed": {
|
||||
"default_value": 35
|
||||
},
|
||||
"skirt_line_count": {
|
||||
"default_value": 4
|
||||
},
|
||||
|
@ -101,9 +68,6 @@
|
|||
"skirt_gap": {
|
||||
"default_value": 6
|
||||
},
|
||||
"cool_fan_full_at_height": {
|
||||
"default_value": 0.4
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": false
|
||||
}
|
||||
|
|
|
@ -35,8 +35,6 @@
|
|||
"material_standby_temperature": { "value": "material_print_temperature" },
|
||||
|
||||
"switch_extruder_retraction_speeds": {"default_value": 15 },
|
||||
"switch_extruder_retraction_speed": {"default_value": 15 },
|
||||
"switch_extruder_prime_speed": {"default_value": 15 },
|
||||
"switch_extruder_retraction_amount": {"value": 1 },
|
||||
|
||||
"speed_travel": { "value": "100" },
|
||||
|
@ -85,8 +83,6 @@
|
|||
|
||||
"retraction_amount": { "default_value": 3 },
|
||||
"retraction_speed": { "default_value": 15 },
|
||||
"retraction_retract_speed": { "default_value": 15 },
|
||||
"retraction_prime_speed": { "default_value": 15 },
|
||||
"travel_retract_before_outer_wall": { "default_value": true },
|
||||
"skin_overlap": { "value": "15" },
|
||||
"adhesion_type": { "default_value": "skirt" },
|
||||
|
|
|
@ -35,8 +35,6 @@
|
|||
"material_standby_temperature": { "value": "material_print_temperature" },
|
||||
|
||||
"switch_extruder_retraction_speeds": {"default_value": 15 },
|
||||
"switch_extruder_retraction_speed": {"default_value": 15 },
|
||||
"switch_extruder_prime_speed": {"default_value": 15 },
|
||||
"switch_extruder_retraction_amount": {"value": 1 },
|
||||
|
||||
"speed_travel": { "value": "100" },
|
||||
|
@ -85,8 +83,6 @@
|
|||
|
||||
"retraction_amount": { "default_value": 3 },
|
||||
"retraction_speed": { "default_value": 15 },
|
||||
"retraction_retract_speed": { "default_value": 15 },
|
||||
"retraction_prime_speed": { "default_value": 15 },
|
||||
"travel_retract_before_outer_wall": { "default_value": true },
|
||||
"skin_overlap": { "value": "15" },
|
||||
"adhesion_type": { "default_value": "skirt" },
|
||||
|
|
|
@ -34,8 +34,6 @@
|
|||
"material_standby_temperature": { "value": "material_print_temperature" },
|
||||
|
||||
"switch_extruder_retraction_speeds": {"default_value": 15 },
|
||||
"switch_extruder_retraction_speed": {"default_value": 15 },
|
||||
"switch_extruder_prime_speed": {"default_value": 15 },
|
||||
"switch_extruder_retraction_amount": {"value": 1 },
|
||||
|
||||
"speed_travel": { "value": "100" },
|
||||
|
@ -84,8 +82,6 @@
|
|||
|
||||
"retraction_amount": { "default_value": 3 },
|
||||
"retraction_speed": { "default_value": 15 },
|
||||
"retraction_retract_speed": { "default_value": 15 },
|
||||
"retraction_prime_speed": { "default_value": 15 },
|
||||
"travel_retract_before_outer_wall": { "default_value": true },
|
||||
"skin_overlap": { "value": "15" },
|
||||
"adhesion_type": { "default_value": "skirt" },
|
||||
|
|
|
@ -47,9 +47,6 @@
|
|||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 220
|
||||
},
|
||||
"layer_height": {
|
||||
"default_value": 0.10
|
||||
},
|
||||
|
@ -65,21 +62,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 70
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
},
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "CR-X",
|
||||
"version": 2,
|
||||
"name": "Creality CR-X",
|
||||
"inherits": "fdmprinter",
|
||||
|
@ -32,7 +31,6 @@
|
|||
"adhesion_type": { "default_value": "skirt" },
|
||||
"gantry_height": { "value": "30" },
|
||||
"speed_print": { "default_value": 60 },
|
||||
"speed_travel": { "default_value": 120 },
|
||||
"machine_max_acceleration_x": { "default_value": 500 },
|
||||
"machine_max_acceleration_y": { "default_value": 500 },
|
||||
"machine_max_acceleration_z": { "default_value": 100 },
|
||||
|
@ -43,9 +41,7 @@
|
|||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": { "default_value": "G21 ;metric values\nG28 ;home all\nG90 ;absolute positioning\nM107 ;start with the fan off\nG1 F2400 Z15.0 ;raise the nozzle 15mm\nM109 S{material_print_temperature} ;Set Extruder Temperature and Wait\nM190 S{material_bed_temperature}; Wait for bed temperature to reach target temp\nT0 ;Switch to Extruder 1\nG1 F3000 X5 Y10 Z0.2 ;move to prime start position\nG92 E0 ;reset extrusion distance\nG1 F600 X160 E15 ;prime nozzle in a line\nG1 F5000 X180 ;quick wipe\nG92 E0 ;reset extrusion distance" },
|
||||
"machine_end_gcode": { "default_value": "M104 S0 ;hotend off\nM140 S0 ;bed off\nG92 E0\nG1 F2000 E-100 ;retract filament 100mm\nG92 E0\nG1 F3000 X0 Y270 ;move bed for easy part removal\nM84 ;disable steppers" },
|
||||
"material_print_temperature": { "default_value": 200 },
|
||||
"wall_thickness": { "default_value": 1 },
|
||||
"top_bottom_thickness": { "default_value": 1 },
|
||||
"bottom_thickness": { "default_value": 1 }
|
||||
"top_bottom_thickness": { "default_value": 1 }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,14 +27,12 @@
|
|||
"machine_max_feedrate_z": { "default_value": 300 },
|
||||
"gantry_height": {"value": "43"},
|
||||
"layer_height": { "default_value": 0.1 },
|
||||
"relative_extrusion": { "default_value": false },
|
||||
"relative_extrusion": { "value": "False" },
|
||||
"retraction_combing": { "default_value": "off" },
|
||||
"retraction_hop_enabled": { "default_value": true },
|
||||
"retraction_hop_only_when_collides": { "default_value": false },
|
||||
"retraction_retract_speed": { "default_value": 100 },
|
||||
"retraction_speed": { "default_value": 100 },
|
||||
"retraction_amount": { "default_value": 4.5 },
|
||||
"retraction_prime_speed": { "default_value": 45 },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G21\nG90\nM82\nM106 S255\nG28\nG92 E0\nG1 Z100 F5000\nM190 S50\nM109 S200\nG1 X-135\nG1 Z0.3\nG92 E-32\nG1 E0 F1000\nG1 E50 F200\nG1 F1000\nG1 X-125\nG92 E0"
|
||||
},
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "3DP-110F",
|
||||
"version": 2,
|
||||
"name": "Cubicon Single",
|
||||
"inherits": "cubicon_common",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "3DP-210F",
|
||||
"version": 2,
|
||||
"name": "Cubicon Style",
|
||||
"inherits": "cubicon_common",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "3DP-310F",
|
||||
"version": 2,
|
||||
"name": "Cubicon Single Plus",
|
||||
"inherits": "cubicon_common",
|
||||
|
|
|
@ -23,77 +23,34 @@
|
|||
"travel_compensate_overlapping_walls_enabled": {
|
||||
"default_value": false
|
||||
},
|
||||
"travel_compensate_overlapping_walls_0_enabled": {
|
||||
"default_value": false
|
||||
},
|
||||
"travel_compensate_overlapping_walls_x_enabled": {
|
||||
"default_value": false
|
||||
},
|
||||
"layer_height": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
"layer_height_0": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
"infill_line_width": {
|
||||
"default_value": 0.6
|
||||
},
|
||||
"adhesion_type": {
|
||||
"default_value": "raft"
|
||||
},
|
||||
"roofing_pattern": { "default_value": "lines" },
|
||||
"top_bottom_pattern": { "default_value": "lines" },
|
||||
"top_bottom_pattern_0": {
|
||||
"default_value": "zigzag"
|
||||
},
|
||||
"fill_perimeter_gaps": { "default_value": "everywhere" },
|
||||
"infill_pattern": {
|
||||
"default_value": "zigzag"
|
||||
},
|
||||
"infill_sparse_density": { "default_value": 20 },
|
||||
"infill_overlap": {
|
||||
"default_value": 15
|
||||
},
|
||||
"infill_before_walls": { "default_value": false },
|
||||
"infill_sparse_thickness": { "default_value": 0.2 },
|
||||
"top_bottom_thickness": {
|
||||
"default_value": 1.0
|
||||
},
|
||||
"top_thickness": {
|
||||
"default_value": 1.0
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 0.6,
|
||||
"value": "top_bottom_thickness * 0.6"
|
||||
},
|
||||
"roofing_layer_count": {
|
||||
"default_value": 1
|
||||
},
|
||||
"skin_preshrink": { "default_value": true },
|
||||
"material_flow_layer_0": { "default_value": 100 },
|
||||
"top_skin_preshrink": { "default_value": 1.2 },
|
||||
"bottom_skin_preshrink": { "default_value": 1.2 },
|
||||
"max_skin_angle_for_expansion": { "default_value": 90 },
|
||||
"min_skin_width_for_expansion": { "default_value": 2.7475 },
|
||||
"skin_angles": { "default_value": "[135,45]" },
|
||||
"roofing_angles": { "default_value": "[135,45]" },
|
||||
"coasting_volume": { "default_value": 0.032 },
|
||||
"wall_thickness": { "default_value": 1.2 },
|
||||
"wall_line_count": { "default_value": 3 },
|
||||
"speed_wall_0": { "default_value": 25 },
|
||||
"skin_overlap": { "default_value": 5 },
|
||||
"cool_min_layer_time_fan_speed_max": { "default_value": 15 },
|
||||
"cool_min_layer_time": { "default_value": 15 },
|
||||
"support_roof_pattern": { "default_value": "zigzag" },
|
||||
"support_bottom_pattern": { "default_value": "zigzag" },
|
||||
"support_interface_pattern": { "default_value": "zigzag" },
|
||||
"support_pattern": { "default_value": "zigzag" },
|
||||
"retraction_amount": { "default_value": 1.5 },
|
||||
"top_layers": {
|
||||
"default_value": 5
|
||||
},
|
||||
"bottom_layers": {
|
||||
"default_value": 3
|
||||
}
|
||||
"retraction_amount": { "default_value": 1.5 }
|
||||
}
|
||||
}
|
|
@ -52,9 +52,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 100
|
||||
},
|
||||
"retraction_amount": {
|
||||
"default_value": 3.5
|
||||
},
|
||||
|
|
|
@ -55,9 +55,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 120
|
||||
},
|
||||
"retraction_amount": {
|
||||
"default_value": 3.8
|
||||
},
|
||||
|
|
|
@ -55,9 +55,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 120
|
||||
},
|
||||
"retraction_amount": {
|
||||
"default_value": 3.8
|
||||
},
|
||||
|
|
|
@ -16,12 +16,8 @@
|
|||
"overrides": {
|
||||
"machine_name": { "default_value": "Delta Go" },
|
||||
"default_material_print_temperature": { "default_value": 210 },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"prime_tower_size": { "default_value": 8.66 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"speed_wall_x": { "default_value": 30 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"speed_topbottom": { "default_value": 20 },
|
||||
"layer_height": { "default_value": 0.15 },
|
||||
"speed_print": { "default_value": 30 },
|
||||
"machine_heated_bed": { "default_value": false },
|
||||
|
|
|
@ -15,15 +15,10 @@
|
|||
},
|
||||
|
||||
"overrides": {
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"speed_wall_x": { "default_value": 30 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"speed_topbottom": { "default_value": 30 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 30 },
|
||||
"speed_infill": { "default_value": 30 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": true },
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
"retraction_amount" : { "default_value": 3.5 },
|
||||
"retraction_speed" : { "default_value": 30 },
|
||||
"retraction_combing" : { "default_value": "noskin" },
|
||||
"travel_avoid_distance": { "default_value": 1, "value": "1" },
|
||||
"travel_avoid_distance": { "value": "1" },
|
||||
"speed_print" : { "default_value": 80 },
|
||||
"speed_infill": { "value": "round(speed_print * 1.05, 0)" },
|
||||
"speed_topbottom": { "value": "round(speed_print * 0.95, 0)" },
|
||||
|
@ -45,7 +45,7 @@
|
|||
"speed_wall_0": { "value": "30" },
|
||||
"speed_wall_x": { "value": "speed_wall" },
|
||||
"speed_layer_0": { "value": "min(round(speed_print * 0.75, 0), 45.0)" },
|
||||
"speed_travel": { "default_value": 150, "value": 150 },
|
||||
"speed_travel": { "value": 150 },
|
||||
"speed_travel_layer_0": { "value": "round(speed_travel * 0.7, 0)" },
|
||||
"skirt_brim_speed": { "value": "speed_layer_0" },
|
||||
"skirt_line_count": { "default_value": 3 },
|
||||
|
@ -57,10 +57,10 @@
|
|||
"support_z_distance": { "value": "layer_height * 2" },
|
||||
"support_bottom_distance": { "value": "layer_height" },
|
||||
"support_use_towers" : { "default_value": false },
|
||||
"jerk_enabled": { "default_value": 1, "value": "1" },
|
||||
"jerk_infill" : { "default_value": 5, "value": "5" },
|
||||
"jerk_support" : { "default_value": 5, "value": "5" },
|
||||
"acceleration_enabled": { "default_value": 1, "value": "1" },
|
||||
"jerk_enabled": { "value": "True" },
|
||||
"jerk_infill" : { "value": "5" },
|
||||
"jerk_support" : { "value": "5" },
|
||||
"acceleration_enabled": { "value": "1" },
|
||||
"acceleration_travel" : { "value": 5000 },
|
||||
"machine_max_feedrate_z" : { "default_value": 300 }
|
||||
}
|
||||
|
|
|
@ -49,27 +49,9 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 1
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 75
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 100
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 25
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 15
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 150
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 30
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
}
|
||||
|
|
|
@ -56,57 +56,17 @@
|
|||
|
||||
"ironing_pattern": { "default_value": "concentric" },
|
||||
"ironing_flow": { "default_value": 7.0 },
|
||||
"roofing_pattern": { "default_value": "concentric" },
|
||||
|
||||
"infill_sparse_density": { "default_value": 20 },
|
||||
"infill_line_distance": { "default_value": 4 },
|
||||
|
||||
"default_material_print_temperature": { "default_value": 220 },
|
||||
"material_print_temperature": { "default_value": 220 },
|
||||
"material_print_temperature_layer_0": { "default_value": 220 },
|
||||
"material_initial_print_temperature": { "default_value": 220 },
|
||||
"material_final_print_temperature": { "default_value": 220 },
|
||||
"retraction_amount": { "default_value": 6.5 },
|
||||
|
||||
"speed_print": { "default_value": 40 },
|
||||
"speed_infill": { "default_value": 60 },
|
||||
"speed_wall": { "default_value": 20 },
|
||||
"speed_wall_0": { "default_value": 20 },
|
||||
"speed_wall_x": { "default_value": 40 },
|
||||
"speed_roofing": { "default_value": 20 },
|
||||
"speed_topbottom": { "default_value": 20 },
|
||||
"speed_support": { "default_value": 40 },
|
||||
"speed_support_infill": { "default_value": 40 },
|
||||
"speed_support_interface": { "default_value": 25 },
|
||||
"speed_support_roof": { "default_value": 25 },
|
||||
"speed_support_bottom": { "default_value": 25 },
|
||||
"speed_prime_tower": { "default_value": 40 },
|
||||
"speed_travel": { "default_value": 100 },
|
||||
"speed_layer_0": { "default_value": 20 },
|
||||
"speed_print_layer_0": { "default_value": 20 },
|
||||
"speed_travel_layer_0": { "default_value": 80 },
|
||||
"skirt_brim_speed": { "default_value": 20 },
|
||||
"speed_equalize_flow_enabled": { "default_value": true },
|
||||
"speed_equalize_flow_max": { "default_value": 100 },
|
||||
|
||||
"acceleration_print": { "default_value": 1000 },
|
||||
"acceleration_infill": { "default_value": 3000 },
|
||||
"acceleration_wall": { "default_value": 1000 },
|
||||
"acceleration_wall_0": { "default_value": 1000 },
|
||||
"acceleration_wall_x": { "default_value": 1000 },
|
||||
"acceleration_roofing": { "default_value": 1000 },
|
||||
"acceleration_topbottom": { "default_value": 1000 },
|
||||
"acceleration_support": { "default_value": 1000 },
|
||||
"acceleration_support_infill": { "default_value": 1000 },
|
||||
"acceleration_support_interface": { "default_value": 1000 },
|
||||
"acceleration_support_roof": { "default_value": 1000 },
|
||||
"acceleration_support_bottom": { "default_value": 1000 },
|
||||
"acceleration_prime_tower": { "default_value": 1000 },
|
||||
"acceleration_travel": { "default_value": 1500 },
|
||||
"acceleration_layer_0": { "default_value": 1000 },
|
||||
"acceleration_print_layer_0": { "default_value": 1000 },
|
||||
"acceleration_travel_layer_0": { "default_value": 1000 },
|
||||
"acceleration_skirt_brim": { "default_value": 1000 },
|
||||
|
||||
"jerk_print": { "default_value": 10 },
|
||||
|
||||
|
|
|
@ -50,8 +50,8 @@
|
|||
"retraction_hop_enabled": { "default_value": false },
|
||||
"material_final_print_temperature": { "value": "material_print_temperature - 5" },
|
||||
"material_initial_print_temperature": { "value": "material_print_temperature" },
|
||||
"travel_avoid_distance": { "default_value": 1, "value": 1 },
|
||||
"speed_travel": { "default_value": 200, "value": 200 },
|
||||
"travel_avoid_distance": { "value": 1 },
|
||||
"speed_travel": { "value": 200 },
|
||||
"speed_infill": { "value": "round(speed_print * 1.05, 0)" },
|
||||
"speed_topbottom": { "value": "round(speed_print * 0.95, 0)" },
|
||||
"speed_wall": { "value": "speed_print" },
|
||||
|
|
|
@ -1190,6 +1190,18 @@
|
|||
"value": "999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
|
||||
"limit_to_extruder": "top_bottom_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"initial_bottom_layers":
|
||||
{
|
||||
"label": "Initial Bottom Layers",
|
||||
"description": "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number.",
|
||||
"minimum_value": "0",
|
||||
"minimum_value_warning": "2",
|
||||
"default_value": 6,
|
||||
"type": "int",
|
||||
"value": "bottom_layers",
|
||||
"limit_to_extruder": "top_bottom_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4071,7 +4083,7 @@
|
|||
"description": "The extruder train to use for printing the support. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"value": "defaultExtruderPosition()",
|
||||
"value": "int(defaultExtruderPosition())",
|
||||
"enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
|
@ -5038,7 +5050,7 @@
|
|||
"description": "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"value": "defaultExtruderPosition()",
|
||||
"value": "int(defaultExtruderPosition())",
|
||||
"enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enable'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
|
@ -5833,6 +5845,18 @@
|
|||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"meshfix_maximum_resolution":
|
||||
{
|
||||
"label": "Maximum Resolution",
|
||||
"description": "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway.",
|
||||
"type": "float",
|
||||
"unit": "mm",
|
||||
"default_value": 0.5,
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "0.01",
|
||||
"maximum_value_warning": "3",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"meshfix_maximum_travel_resolution":
|
||||
{
|
||||
"label": "Maximum Travel Resolution",
|
||||
|
@ -6217,6 +6241,7 @@
|
|||
"label": "Infill Travel Optimization",
|
||||
"description": "When enabled, the order in which the infill lines are printed is optimized to reduce the distance travelled. The reduction in travel time achieved very much depends on the model being sliced, infill pattern, density, etc. Note that, for some models that have many small areas of infill, the time to slice the model may be greatly increased.",
|
||||
"type": "bool",
|
||||
"enabled": "resolveOrValue('retraction_combing') != 'off'",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
|
@ -6254,18 +6279,6 @@
|
|||
"settable_per_mesh": true,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"meshfix_maximum_resolution":
|
||||
{
|
||||
"label": "Maximum Resolution",
|
||||
"description": "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway.",
|
||||
"type": "float",
|
||||
"unit": "mm",
|
||||
"default_value": 0.5,
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "0.01",
|
||||
"maximum_value_warning": "3",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"support_skip_some_zags":
|
||||
{
|
||||
"label": "Break Up Support In Chunks",
|
||||
|
@ -6428,16 +6441,6 @@
|
|||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"skin_alternate_rotation":
|
||||
{
|
||||
"label": "Alternate Skin Rotation",
|
||||
"description": "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
|
||||
"limit_to_extruder": "top_bottom_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"cross_infill_pocket_size":
|
||||
{
|
||||
"label": "Cross 3D Pocket Size",
|
||||
|
@ -6594,7 +6597,7 @@
|
|||
"minimum_value_warning": "machine_nozzle_size * 3",
|
||||
"maximum_value_warning": "100.0",
|
||||
"type": "float",
|
||||
"enabled": "support_conical_enabled and support_enable",
|
||||
"enabled": "support_conical_enabled and support_enable and support_conical_angle > 0",
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
|
||||
"layer_height": { "default_value": 0.15 },
|
||||
"layer_height_0": { "default_value": 0.2 },
|
||||
"speed_layer_0": { "default_value": 20},
|
||||
|
||||
"infill_sparse_density": { "default_value": 20 },
|
||||
"wall_thickness": { "default_value": 1 },
|
||||
|
@ -53,7 +52,6 @@
|
|||
"machine_center_is_zero": { "default_value": false },
|
||||
|
||||
"speed_print": { "default_value": 80 },
|
||||
"speed_travel": { "default_value": 200 },
|
||||
|
||||
"retraction_amount": { "default_value": 1 },
|
||||
"retraction_speed": { "default_value": 50},
|
||||
|
|
|
@ -39,7 +39,6 @@
|
|||
"machine_center_is_zero": { "default_value": false },
|
||||
|
||||
"speed_print": { "default_value": 60 },
|
||||
"speed_travel": { "default_value": 200 },
|
||||
|
||||
"retraction_amount": { "default_value": 1 },
|
||||
"retraction_speed": { "default_value": 50},
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "flsun_qq_s",
|
||||
"version": 2,
|
||||
"name": "FLSUN QQ-S",
|
||||
"inherits": "fdmprinter",
|
||||
|
@ -33,14 +32,8 @@
|
|||
"z_seam_type": {
|
||||
"default_value": "back"
|
||||
},
|
||||
"top_thickness": {
|
||||
"default_value": 5
|
||||
},
|
||||
"bottom_layers": {
|
||||
"default_value": 4
|
||||
},
|
||||
"gantry_height": {
|
||||
"default_value": 0
|
||||
"value": "0"
|
||||
},
|
||||
"machine_nozzle_size": {
|
||||
"default_value": 0.4
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "geeetech_a30",
|
||||
"version": 2,
|
||||
"name": "Geeetech A30",
|
||||
"inherits": "fdmprinter",
|
||||
|
@ -42,9 +41,6 @@
|
|||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 60
|
||||
},
|
||||
"machine_nozzle_size": {
|
||||
"default_value": 0.4
|
||||
},
|
||||
|
@ -60,12 +56,6 @@
|
|||
"retraction_speed": {
|
||||
"default_value": 25
|
||||
},
|
||||
"retraction_retract_speed": {
|
||||
"default_value": 25
|
||||
},
|
||||
"retraction_prime_speed": {
|
||||
"default_value": 25
|
||||
},
|
||||
"adhesion_type": {
|
||||
"default_value": "skirt"
|
||||
},
|
||||
|
@ -86,7 +76,7 @@
|
|||
]
|
||||
},
|
||||
"gantry_height": {
|
||||
"default_value": 55
|
||||
"value": "55"
|
||||
},
|
||||
"machine_max_feedrate_x": {
|
||||
"default_value": 300
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "gmax15plus",
|
||||
"version": 2,
|
||||
"name": "gMax 1.5 Plus",
|
||||
"inherits": "fdmprinter",
|
||||
|
@ -39,7 +38,6 @@
|
|||
"adhesion_type": { "default_value": "skirt" },
|
||||
"gantry_height": { "value": "50" },
|
||||
"speed_print": { "default_value": 50 },
|
||||
"speed_travel": { "default_value": 70 },
|
||||
"machine_max_acceleration_x": { "default_value": 600 },
|
||||
"machine_max_acceleration_y": { "default_value": 600 },
|
||||
"machine_max_acceleration_z": { "default_value": 30 },
|
||||
|
@ -50,9 +48,7 @@
|
|||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home X/Y/Z\nM104 S{material_print_temperature} ; Preheat\nM109 S{material_print_temperature} ; Preheat\nG91 ;relative positioning\nG90 ;absolute positioning\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." },
|
||||
"machine_end_gcode": { "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" },
|
||||
"material_print_temperature": { "default_value": 202 },
|
||||
"wall_thickness": { "default_value": 1 },
|
||||
"top_bottom_thickness": { "default_value": 1 },
|
||||
"bottom_thickness": { "default_value": 1 }
|
||||
"top_bottom_thickness": { "default_value": 1 }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "gmax15plus_dual",
|
||||
"version": 2,
|
||||
"name": "gMax 1.5 Plus Dual Extruder",
|
||||
"inherits": "fdmprinter",
|
||||
|
@ -37,7 +36,6 @@
|
|||
"adhesion_type": { "default_value": "skirt" },
|
||||
"gantry_height": { "value": "50" },
|
||||
"speed_print": { "default_value": 50 },
|
||||
"speed_travel": { "default_value": 70 },
|
||||
"machine_max_acceleration_x": { "default_value": 600 },
|
||||
"machine_max_acceleration_y": { "default_value": 600 },
|
||||
"machine_max_acceleration_z": { "default_value": 30 },
|
||||
|
@ -48,9 +46,7 @@
|
|||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home X/Y/Z\nM104 S{material_print_temperature} T0 ; Preheat Left Extruder\nM104 S{material_print_temperature} T1 ; Preheat Right Extruder\nM109 S{material_print_temperature} T0 ; Preheat Left Extruder\nM109 S{material_print_temperature} T1 ; Preheat Right Extruder\nG91 ;relative positioning\nG90 ;absolute positioning\nM218 T1 X34.3 Y0; Set 2nd extruder offset. This can be changed later if needed\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." },
|
||||
"machine_end_gcode": { "default_value": "M104 S0 T0;Left extruder off\nM104 S0 T1; Right extruder off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" },
|
||||
"material_print_temperature": { "default_value": 202 },
|
||||
"wall_thickness": { "default_value": 1 },
|
||||
"top_bottom_thickness": { "default_value": 1 },
|
||||
"bottom_thickness": { "default_value": 1 }
|
||||
"top_bottom_thickness": { "default_value": 1 }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,28 +26,15 @@
|
|||
"machine_height": { "default_value": 190 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"material_print_temperature": { "default_value": 200 },
|
||||
"material_bed_temperature": { "default_value": 60 },
|
||||
"line_width": { "default_value": 0.48 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"layer_height_0": { "default_value": 0.2 },
|
||||
"wall_line_count": { "default_value": 3 },
|
||||
"wall_thickness": { "default_value": 1.2 },
|
||||
"top_bottom_thickness": { "default_value": 1.2 },
|
||||
"infill_sparse_density": { "default_value": 20 },
|
||||
"infill_overlap": { "default_value": 15 },
|
||||
"speed_print": { "default_value": 60 },
|
||||
"speed_travel": { "default_value": 160 },
|
||||
"speed_layer_0": { "default_value": 30 },
|
||||
"speed_wall_x": { "default_value": 35 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"speed_infill": { "default_value": 60 },
|
||||
"speed_topbottom": { "default_value": 20 },
|
||||
"skirt_brim_speed": { "default_value": 35 },
|
||||
"skirt_line_count": { "default_value": 4 },
|
||||
"skirt_brim_minimal_length": { "default_value": 30 },
|
||||
"skirt_gap": { "default_value": 6 },
|
||||
"cool_fan_full_at_height": { "default_value": 0.4 },
|
||||
"retraction_speed": { "default_value": 15.0},
|
||||
"retraction_amount": { "default_value": 1.5}
|
||||
}
|
||||
|
|
|
@ -61,36 +61,10 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 1.2
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 205
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 50
|
||||
},
|
||||
"speed_wall_0": {
|
||||
"default_value": 25
|
||||
},
|
||||
"speed_wall_x": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 80
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 30
|
||||
},
|
||||
"speed_support_interface":
|
||||
{
|
||||
"default_value": 20
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 150
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 30.0,
|
||||
"minimum_value": 0.1
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,12 +47,6 @@
|
|||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 215
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 67
|
||||
},
|
||||
"layer_height_0": {
|
||||
"default_value": 0.12
|
||||
},
|
||||
|
@ -62,21 +56,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 120
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 12
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
},
|
||||
|
|
|
@ -47,12 +47,6 @@
|
|||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 210
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 65
|
||||
},
|
||||
"layer_height_0": {
|
||||
"default_value": 0.12
|
||||
},
|
||||
|
@ -62,21 +56,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 30
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 20
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 100
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 12
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
},
|
||||
|
|
|
@ -49,12 +49,6 @@
|
|||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 215
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 67
|
||||
},
|
||||
"layer_height_0": {
|
||||
"default_value": 0.12
|
||||
},
|
||||
|
@ -64,21 +58,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 40
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 35
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 120
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 12
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
},
|
||||
|
|
|
@ -47,12 +47,6 @@
|
|||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 200
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 60
|
||||
},
|
||||
"layer_height_0": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
|
@ -62,21 +56,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 30
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 45
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 125
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 30
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
},
|
||||
|
|
|
@ -47,12 +47,6 @@
|
|||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 210
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 55
|
||||
},
|
||||
"layer_height_0": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
|
@ -62,21 +56,6 @@
|
|||
"speed_print": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 30
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 45
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 125
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"support_enable": {
|
||||
"default_value": true
|
||||
},
|
||||
|
|
|
@ -21,25 +21,14 @@
|
|||
"machine_end_gcode": {
|
||||
"default_value": " M104 S0 ;extruder heater off\n M140 S0 ;heated bed heater off (if you have it)\n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning\n"
|
||||
},
|
||||
"material_bed_temperature": { "default_value": 100 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"support_angle": { "default_value": 30 },
|
||||
"infill_overlap": { "default_value": 30 },
|
||||
"layer_height_0": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 80 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"brim_line_count": { "default_value": 15 },
|
||||
"skin_overlap": { "default_value": 30 },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"bottom_thickness": { "default_value": 0.8 },
|
||||
"retraction_amount": { "default_value": 3 },
|
||||
"speed_topbottom": { "default_value": 80 },
|
||||
"material_print_temperature": { "default_value": 230 },
|
||||
"support_pattern": { "default_value": "grid" },
|
||||
"speed_infill": { "default_value": 80 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"top_thickness": { "default_value": 0.8 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"retraction_combing": { "default_value": "off" },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
|
|
65
resources/definitions/key3d_tyro.def.json
Normal file
65
resources/definitions/key3d_tyro.def.json
Normal file
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"name": "Tyro",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "DragonJe",
|
||||
"manufacturer": "Key3D",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [0, 0, 0],
|
||||
"has_materials": true,
|
||||
"has_variants": false,
|
||||
"preferred_quality_type": "normal",
|
||||
"has_machine_quality": true,
|
||||
"preferred_material": "generic_pla",
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
"0": "key3d_tyro_extruder_0"
|
||||
}
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": {
|
||||
"default_value": "Tyro"
|
||||
},
|
||||
"machine_width": {
|
||||
"default_value": 150
|
||||
},
|
||||
"machine_height": {
|
||||
"default_value": 150
|
||||
},
|
||||
"machine_depth": {
|
||||
"default_value": 150
|
||||
},
|
||||
"machine_head_polygon": {
|
||||
"default_value": [
|
||||
[-30, 34],
|
||||
[-30, -32],
|
||||
[30, -32],
|
||||
[30, 34]
|
||||
]
|
||||
},
|
||||
"gantry_height": {
|
||||
"value": "30"
|
||||
},
|
||||
"machine_heated_bed": {
|
||||
"default_value": false
|
||||
},
|
||||
"machine_heated_build_volume": {
|
||||
"default_value": false
|
||||
},
|
||||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
},
|
||||
"machine_gcode_flavor": {
|
||||
"default_value": "RepRap (Marlin/Sprinter)"
|
||||
},
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28 ; Home\nG1 Z15.0 F6000 ; Move Z axis up 15mm\n ; Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0\nM140 S0\n ; Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -77,27 +77,12 @@
|
|||
"retraction_amount": {
|
||||
"default_value": 6
|
||||
},
|
||||
"retraction_min_travel": {
|
||||
"default_value": 1.5
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 150
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 60
|
||||
},
|
||||
"wall_thickness": {
|
||||
"default_value": 1.2
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"speed_print_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"cool_min_layer_time_fan_speed_max": {
|
||||
"default_value": 5
|
||||
},
|
||||
|
|
|
@ -77,27 +77,12 @@
|
|||
"retraction_amount": {
|
||||
"default_value": 6
|
||||
},
|
||||
"retraction_min_travel": {
|
||||
"default_value": 1.5
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 150
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 60
|
||||
},
|
||||
"wall_thickness": {
|
||||
"default_value": 1.2
|
||||
},
|
||||
"bottom_thickness": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"speed_print_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"cool_min_layer_time_fan_speed_max": {
|
||||
"default_value": 5
|
||||
},
|
||||
|
|
|
@ -53,57 +53,15 @@
|
|||
"layer_height_0": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
"wall_line_count": {
|
||||
"default_value": 2
|
||||
},
|
||||
"top_layers": {
|
||||
"default_value": 4
|
||||
},
|
||||
"bottom_layers": {
|
||||
"default_value": 4
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 50
|
||||
},
|
||||
"speed_wall": {
|
||||
"default_value": 30
|
||||
},
|
||||
"speed_wall_0": {
|
||||
"default_value": 30
|
||||
},
|
||||
"speed_wall_x": {
|
||||
"default_value": 30
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 50
|
||||
},
|
||||
"speed_support": {
|
||||
"default_value": 50
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 120
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 20
|
||||
},
|
||||
"skirt_brim_speed": {
|
||||
"default_value": 15
|
||||
},
|
||||
"speed_slowdown_layers": {
|
||||
"default_value": 4
|
||||
},
|
||||
"infill_sparse_density": {
|
||||
"default_value": 20
|
||||
},
|
||||
"cool_fan_speed_min": {
|
||||
"default_value": 50
|
||||
},
|
||||
"cool_fan_speed_max": {
|
||||
"default_value": 100
|
||||
},
|
||||
"cool_fan_full_layer": {
|
||||
"default_value": 4
|
||||
},
|
||||
"cool_min_layer_time": {
|
||||
"default_value": 5
|
||||
},
|
||||
|
@ -122,12 +80,6 @@
|
|||
"support_z_distance": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
"support_top_distance": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
"support_bottom_distance": {
|
||||
"default_value": 0.24
|
||||
},
|
||||
"support_pattern": {
|
||||
"default_value": "ZigZag"
|
||||
},
|
||||
|
@ -140,24 +92,6 @@
|
|||
"skirt_brim_minimal_length": {
|
||||
"default_value": 100
|
||||
},
|
||||
"raft_base_line_spacing": {
|
||||
"default_value": 2
|
||||
},
|
||||
"raft_base_thickness": {
|
||||
"default_value": 0.3
|
||||
},
|
||||
"raft_base_line_width": {
|
||||
"default_value": 2
|
||||
},
|
||||
"raft_base_speed": {
|
||||
"default_value": 15
|
||||
},
|
||||
"raft_interface_thickness": {
|
||||
"default_value": 0.24
|
||||
},
|
||||
"raft_interface_line_width": {
|
||||
"default_value": 0.6
|
||||
},
|
||||
"raft_airgap": {
|
||||
"default_value": 0.2
|
||||
},
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"overrides": {
|
||||
"prime_tower_size": { "default_value": 10.0 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"layer_height": { "default_value": 0.15 },
|
||||
"material_print_temperature": { "default_value": 220 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "malyan_m180",
|
||||
"version": 2,
|
||||
"name": "Malyan M180",
|
||||
"inherits": "fdmprinter",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "malyan_m200",
|
||||
"version": 2,
|
||||
"name": "Malyan M200",
|
||||
"inherits": "fdmprinter",
|
||||
|
@ -30,8 +29,6 @@
|
|||
"speed_wall_x": { "value": "speed_print" },
|
||||
"speed_support": { "value": "speed_wall_0" },
|
||||
"speed_layer_0": { "value": "round(speed_print / 2.0, 2)" },
|
||||
"speed_travel": { "default_value": 50 },
|
||||
"speed_travel_layer_0": { "default_value": 40 },
|
||||
"speed_infill": { "value": "speed_print" },
|
||||
"speed_topbottom": {"value": "speed_print / 2"},
|
||||
|
||||
|
|
|
@ -41,23 +41,15 @@
|
|||
"layer_height": { "default_value": 0.2 },
|
||||
"wall_thickness": { "default_value": 0.8 },
|
||||
"top_bottom_thickness": { "default_value": 0.3 },
|
||||
"material_print_temperature": { "default_value": 195 },
|
||||
"material_bed_temperature": { "default_value": 60 },
|
||||
"retraction_enable": { "default_value": true },
|
||||
"retraction_speed": { "default_value": 50 },
|
||||
"retraction_amount": { "default_value": 0.8 },
|
||||
"retraction_hop": { "default_value": 0.075 },
|
||||
"speed_print": { "default_value": 60 },
|
||||
"speed_infill": { "default_value": 100 },
|
||||
"speed_topbottom": { "default_value": 15 },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"speed_layer_0": {
|
||||
"minimum_value": "0.1",
|
||||
"default_value": 15.0
|
||||
"minimum_value": "0.1"
|
||||
},
|
||||
"infill_overlap": { "default_value": 10 },
|
||||
"cool_fan_enabled": { "default_value": false },
|
||||
"cool_fan_speed": { "default_value": 0 },
|
||||
"skirt_line_count": { "default_value": 3 },
|
||||
"skirt_gap": { "default_value": 4 },
|
||||
"skirt_brim_minimal_length": { "default_value": 200 }
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "monoprice_select_mini_v1",
|
||||
"version": 2,
|
||||
"name": "Monoprice Select Mini V1",
|
||||
"inherits": "malyan_m200",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "monoprice_select_mini_v2",
|
||||
"version": 2,
|
||||
"name": "Monoprice Select Mini V2 (E3D)",
|
||||
"inherits": "malyan_m200",
|
||||
|
|
|
@ -19,12 +19,9 @@
|
|||
},
|
||||
|
||||
"overrides": {
|
||||
"material_bed_temperature": { "default_value": 60 },
|
||||
"prime_tower_size": { "default_value": 7.0710678118654755 },
|
||||
"infill_sparse_density": { "default_value": 15 },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"layer_height": { "default_value": 0.3 },
|
||||
"material_print_temperature": { "default_value": 240 },
|
||||
"machine_extruder_count": { "default_value": 5 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
"machine_head_with_fans_polygon": { "default_value": [[-32,999],[37,999],[37,-32],[-32,-32]] },
|
||||
"gantry_height": { "value": "55" },
|
||||
"speed_print": { "default_value": 50 },
|
||||
"speed_travel": { "default_value": 55 },
|
||||
"machine_max_feedrate_x": {"default_value": 125},
|
||||
"machine_max_feedrate_y": {"default_value": 125},
|
||||
"machine_max_feedrate_z": { "default_value": 5 },
|
||||
|
|
|
@ -22,13 +22,10 @@
|
|||
"machine_height": { "default_value": 200 },
|
||||
"machine_depth": { "default_value": 210 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"material_bed_temperature": { "default_value": 55 },
|
||||
"layer_height": { "default_value": 0.1 },
|
||||
"layer_height_0": { "default_value": 0.15 },
|
||||
"retraction_amount": { "default_value": 0.8 },
|
||||
"retraction_speed": { "default_value": 35 },
|
||||
"retraction_retract_speed": { "default_value": 35 },
|
||||
"retraction_prime_speed": { "default_value": 35 },
|
||||
"adhesion_type": { "default_value": "skirt" },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[-31,31],[34,31],[34,-40],[-31,-40]] },
|
||||
"gantry_height": { "value": "28" },
|
||||
|
|
53
resources/definitions/prusa_i3_mk3.def.json
Normal file
53
resources/definitions/prusa_i3_mk3.def.json
Normal file
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"version": 2,
|
||||
"name": "Prusa i3 Mk3/Mk3s",
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Prusa Research",
|
||||
"manufacturer": "Prusa3D",
|
||||
"file_formats": "text/x-gcode",
|
||||
"icon": "icon_ultimaker2",
|
||||
"platform": "Original_Prusa_i3_MK3S_MK3_platform.stl",
|
||||
"has_materials": true,
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
"0": "prusa_i3_mk3_extruder_0"
|
||||
}
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "Prusa i3 Mk3/Mk3s" },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_width": { "default_value": 250 },
|
||||
"machine_height": { "default_value": 210 },
|
||||
"machine_depth": { "default_value": 210 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"material_bed_temperature": { "default_value": 60 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"layer_height": { "default_value": 0.15 },
|
||||
"layer_height_0": { "default_value": 0.2 },
|
||||
"retraction_amount": { "default_value": 0.8 },
|
||||
"retraction_speed": { "default_value": 35 },
|
||||
"retraction_retract_speed": { "default_value": 35 },
|
||||
"retraction_prime_speed": { "default_value": 35 },
|
||||
"adhesion_type": { "default_value": "skirt" },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[-31,31],[34,31],[34,-40],[-31,-40]] },
|
||||
"gantry_height": { "default_value": 28 },
|
||||
"machine_max_feedrate_z": { "default_value": 12 },
|
||||
"machine_max_feedrate_e": { "default_value": 120 },
|
||||
"machine_max_acceleration_z": { "default_value": 500 },
|
||||
"machine_acceleration": { "default_value": 1000 },
|
||||
"machine_max_jerk_xy": { "default_value": 10 },
|
||||
"machine_max_jerk_z": { "default_value": 0.2 },
|
||||
"machine_max_jerk_e": { "default_value": 2.5 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G21 ; set units to millimeters\nG90 ; use absolute positioning\nM82 ; absolute extrusion mode\nM104 S{material_print_temperature_layer_0} ; set extruder temp\nM140 S{material_bed_temperature_layer_0} ; set bed temp\nM190 S{material_bed_temperature_layer_0} ; wait for bed temp\nM109 S{material_print_temperature_layer_0} ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG92 E0.0 ; reset extruder distance position\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E21.5 F1000.0 ; intro line\nG92 E0.0 ; reset extruder distance position"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y210; home X axis and push Y forward\nM84 ; disable motors"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -17,15 +17,9 @@
|
|||
|
||||
"overrides": {
|
||||
"machine_head_polygon": { "default_value": [[ 0, 0], [ 0, 0], [ 0, 0], [ 0, 0]] },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"speed_wall_x": { "default_value": 40 },
|
||||
"speed_wall_0": { "default_value": 40 },
|
||||
"speed_topbottom": { "default_value": 40 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"material_print_temperature": { "default_value": 195 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
"speed_infill": { "default_value": 40 },
|
||||
"machine_extruder_count": { "default_value": 2 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
|
|
|
@ -25,23 +25,13 @@
|
|||
"skirt_gap": { "default_value": 5.0 },
|
||||
"cool_min_layer_time": { "default_value": 10 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
"speed_wall_x": { "default_value": 40 },
|
||||
"speed_travel": { "default_value": 100 },
|
||||
"bottom_thickness": { "default_value": 0.75 },
|
||||
"layer_height_0": { "default_value": 0.25 },
|
||||
"support_angle": { "default_value": 45 },
|
||||
"material_bed_temperature": { "default_value": 100 },
|
||||
"top_thickness": { "default_value": 0.75 },
|
||||
"material_print_temperature": { "default_value": 235 },
|
||||
"retraction_speed": { "default_value": 60.0 },
|
||||
"wall_thickness": { "default_value": 0.8 },
|
||||
"retraction_min_travel": { "default_value": 2 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"retraction_amount": { "default_value": 1 },
|
||||
"speed_topbottom": { "default_value": 30 },
|
||||
"layer_height": { "default_value": 0.25 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
"speed_infill": { "default_value": 40 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
|
|
|
@ -25,20 +25,12 @@
|
|||
"cool_min_layer_time": { "default_value": 10 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
"speed_travel": { "default_value": 120 },
|
||||
"bottom_thickness": { "default_value": 0.75 },
|
||||
"layer_height_0": { "default_value": 0.25 },
|
||||
"support_angle": { "default_value": 45 },
|
||||
"material_bed_temperature": { "default_value": 100 },
|
||||
"retraction_min_travel": { "default_value": 2 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"retraction_speed": { "default_value": 60.0 },
|
||||
"wall_thickness": { "default_value": 0.8 },
|
||||
"material_print_temperature": { "default_value": 235 },
|
||||
"retraction_amount": { "default_value": 1 },
|
||||
"speed_topbottom": { "default_value": 25 },
|
||||
"layer_height": { "default_value": 0.25 },
|
||||
"top_thickness": { "default_value": 0.75 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
|
|
|
@ -17,25 +17,17 @@
|
|||
"overrides": {
|
||||
"machine_head_polygon": { "default_value": [[ 16, 30], [ 16, 45], [ 16, 45], [ 16, 30]] },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"speed_travel": { "default_value": 40 },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
"cool_min_layer_time": { "default_value": 15 },
|
||||
"support_pattern": { "default_value": "grid" },
|
||||
"layer_height_0": { "default_value": 0.25 },
|
||||
"speed_wall_x": { "default_value": 30 },
|
||||
"skirt_line_count": { "default_value": 2 },
|
||||
"support_angle": { "default_value": 45 },
|
||||
"speed_topbottom": { "default_value": 20 },
|
||||
"material_print_temperature": { "default_value": 205 },
|
||||
"retraction_speed": { "default_value": 80 },
|
||||
"wall_thickness": { "default_value": 0.8 },
|
||||
"retraction_min_travel": { "default_value": 2 },
|
||||
"speed_wall_0": { "default_value": 20 },
|
||||
"retraction_amount": { "default_value": 2 },
|
||||
"speed_layer_0": { "default_value": 15 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 30 },
|
||||
"speed_infill": { "default_value": 30 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": false },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
|
|
|
@ -76,14 +76,9 @@
|
|||
"default_value": true
|
||||
},
|
||||
"cool_fan_speed": {
|
||||
"default_value": 100,
|
||||
"value": "100"
|
||||
},
|
||||
"cool_fan_speed_min": {
|
||||
"default_value": 0
|
||||
},
|
||||
"cool_fan_full_at_height": {
|
||||
"default_value": 0.5,
|
||||
"value": "0.5"
|
||||
},
|
||||
"support_z_distance": {
|
||||
|
|
|
@ -24,21 +24,11 @@
|
|||
"machine_head_polygon": { "default_value": [[ 40, 15], [ 40, 60], [ 30, 60], [ 30, 15]] },
|
||||
"support_pattern": { "default_value": "grid" },
|
||||
"cool_min_layer_time": { "default_value": 10 },
|
||||
"speed_travel": { "default_value": 80 },
|
||||
"support_angle": { "default_value": 45 },
|
||||
"retraction_min_travel": { "default_value": 2 },
|
||||
"speed_wall_0": { "default_value": 20 },
|
||||
"speed_layer_0": { "default_value": 15 },
|
||||
"speed_infill": { "default_value": 30 },
|
||||
"speed_topbottom": { "default_value": 30 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
"skirt_line_count": { "default_value": 2 },
|
||||
"speed_wall_x": { "default_value": 30 },
|
||||
"bottom_thickness": { "default_value": 0.75 },
|
||||
"layer_height_0": { "default_value": 0.25 },
|
||||
"top_thickness": { "default_value": 0.75 },
|
||||
"wall_thickness": { "default_value": 0.8 },
|
||||
"material_print_temperature": { "default_value": 195 },
|
||||
"retraction_amount": { "default_value": 1.5 },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
"layer_height": { "default_value": 0.25 },
|
||||
|
|
|
@ -44,9 +44,6 @@
|
|||
"material_print_temperature": {
|
||||
"value": 235
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 100
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 40
|
||||
},
|
||||
|
@ -90,14 +87,9 @@
|
|||
"default_value": false
|
||||
},
|
||||
"cool_fan_speed": {
|
||||
"default_value": 50,
|
||||
"value": 50
|
||||
},
|
||||
"cool_fan_speed_min": {
|
||||
"default_value": 0
|
||||
},
|
||||
"cool_fan_full_at_height": {
|
||||
"default_value": 1.0,
|
||||
"value": 1.0
|
||||
},
|
||||
"support_z_distance": {
|
||||
|
|
|
@ -49,37 +49,15 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 0.3
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 195
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 100
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 15
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 150
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 15,
|
||||
"minimum_value": "0.1"
|
||||
},
|
||||
"infill_overlap": {
|
||||
"default_value": 10
|
||||
},
|
||||
"cool_fan_enabled": {
|
||||
"default_value": false
|
||||
},
|
||||
"cool_fan_speed": {
|
||||
"default_value": 0
|
||||
},
|
||||
"skirt_line_count": {
|
||||
"default_value": 3
|
||||
},
|
||||
|
|
|
@ -49,37 +49,15 @@
|
|||
"top_bottom_thickness": {
|
||||
"default_value": 0.3
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"default_value": 195
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_print": {
|
||||
"default_value": 60
|
||||
},
|
||||
"speed_infill": {
|
||||
"default_value": 100
|
||||
},
|
||||
"speed_topbottom": {
|
||||
"default_value": 15
|
||||
},
|
||||
"speed_travel": {
|
||||
"default_value": 150
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 15,
|
||||
"minimum_value": "0.1"
|
||||
},
|
||||
"infill_overlap": {
|
||||
"default_value": 10
|
||||
},
|
||||
"cool_fan_enabled": {
|
||||
"default_value": false
|
||||
},
|
||||
"cool_fan_speed": {
|
||||
"default_value": 0
|
||||
},
|
||||
"skirt_line_count": {
|
||||
"default_value": 3
|
||||
},
|
||||
|
|
|
@ -22,28 +22,16 @@
|
|||
"default_value": " M104 S0 ;extruder heater off\n M140 S0 ;heated bed heater off (if you have it)\n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning\n"
|
||||
},
|
||||
"cool_min_layer_time": { "default_value": 7 },
|
||||
"speed_topbottom": { "default_value": 40 },
|
||||
"retraction_speed": { "default_value": 50 },
|
||||
"layer_0_z_overlap": { "default_value": 0.2 },
|
||||
"cool_min_speed": { "default_value": 19 },
|
||||
"material_bed_temperature": { "default_value": 60 },
|
||||
"support_angle": { "default_value": 50 },
|
||||
"speed_layer_0": { "default_value": 30 },
|
||||
"line_width": { "default_value": 0.4 },
|
||||
"speed_infill": { "default_value": 60 },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"support_enable": { "default_value": true },
|
||||
"cool_fan_full_at_height": { "default_value": 0.1 },
|
||||
"bottom_thickness": { "default_value": 1.2 },
|
||||
"raft_airgap": { "default_value": 0.2 },
|
||||
"layer_height_0": { "default_value": 0.15 },
|
||||
"top_thickness": { "default_value": 1.2 },
|
||||
"speed_wall_0": { "default_value": 40 },
|
||||
"retraction_min_travel": { "default_value": 5 },
|
||||
"material_flow": { "default_value": 100 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"wall_thickness": { "default_value": 1.2 },
|
||||
"material_print_temperature": { "default_value": 190 },
|
||||
"retraction_amount": { "default_value": 3 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
|
|
|
@ -27,13 +27,11 @@
|
|||
"machine_name": { "default_value": "Artemis" },
|
||||
"machine_shape": { "default_value": "elliptic" },
|
||||
"machine_width": { "default_value": 290 },
|
||||
"relative_extrusion": { "default_value": false },
|
||||
"relative_extrusion": { "value": "False" },
|
||||
"retraction_amount": { "default_value": 3.2 },
|
||||
"retraction_combing": { "default_value": "off" },
|
||||
"retraction_hop_enabled": { "default_value": true },
|
||||
"retraction_hop_only_when_collides": { "default_value": false },
|
||||
"retraction_prime_speed": { "default_value": 45 },
|
||||
"retraction_retract_speed": { "default_value": 45 },
|
||||
"retraction_speed": { "default_value": 45 },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28\nG1 Z15.0 F10000\nG92 E0"
|
||||
|
|
|
@ -27,13 +27,11 @@
|
|||
"machine_name": { "default_value": "Rostock Max V3.2" },
|
||||
"machine_shape": { "default_value": "elliptic" },
|
||||
"machine_width": { "default_value": 265 },
|
||||
"relative_extrusion": { "default_value": false },
|
||||
"relative_extrusion": { "value": "False" },
|
||||
"retraction_amount": { "default_value": 3.2 },
|
||||
"retraction_combing": { "default_value": "off" },
|
||||
"retraction_hop_enabled": { "default_value": true },
|
||||
"retraction_hop_only_when_collides": { "default_value": false },
|
||||
"retraction_prime_speed": { "default_value": 45 },
|
||||
"retraction_retract_speed": { "default_value": 45 },
|
||||
"retraction_speed": { "default_value": 45 },
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28\nG1 Z15.0 F10000\nG92 E0"
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_head_with_fans_polygon": { "default_value": [ [ -76, -51.8 ] , [ 25, -51.8 ] , [ 25, 38.2 ] , [ -76, 38.2 ] ] },
|
||||
"gantry_height": { "default_value": 40 },
|
||||
"gantry_height": { "value": "40" },
|
||||
"machine_extruder_count": { "default_value": 2 },
|
||||
"machine_gcode_flavor": { "default_value": "Marlin" },
|
||||
"machine_start_gcode": { "default_value": "G28 \nG90 G1 X300 Y210 Z15 F6000 \nG92 E0" },
|
||||
|
|
|
@ -55,9 +55,6 @@
|
|||
"line_width": {
|
||||
"value": "round(machine_nozzle_size * 0.875, 2)"
|
||||
},
|
||||
"speed_layer_0": {
|
||||
"default_value": 10
|
||||
},
|
||||
"speed_support": {
|
||||
"value": "speed_wall_0"
|
||||
},
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
"machine_center_is_zero": { "default_value": false },
|
||||
|
||||
"speed_print": { "default_value": 60 },
|
||||
"speed_travel": { "default_value": 200 },
|
||||
|
||||
"retraction_amount": { "default_value": 0.4 },
|
||||
"retraction_speed": { "default_value": 35},
|
||||
|
|
|
@ -50,13 +50,8 @@
|
|||
"fill_outline_gaps": { "default_value": true},
|
||||
"infill_sparse_density": { "default_value": 15},
|
||||
"retraction_amount": { "default_value": 2.5},
|
||||
"retraction_min_travel": { "default_value": 2},
|
||||
"retraction_speed": { "default_value": 30},
|
||||
"speed_print": { "default_value": 60},
|
||||
"speed_topbottom": { "default_value": 50},
|
||||
"speed_wall_0": { "default_value": 40},
|
||||
"top_layers": { "default_value": 4},
|
||||
"wall_line_count": { "default_value": 2},
|
||||
"cool_min_layer_time": { "default_value": 11},
|
||||
"layer_height": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" },
|
||||
"layer_height_0": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" },
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"id": "ubuild-3d_mr_bot_280",
|
||||
"version": 2,
|
||||
"name": "uBuild-3D Mr Bot 280",
|
||||
"inherits": "fdmprinter",
|
||||
|
@ -24,12 +23,9 @@
|
|||
"machine_height": { "default_value": 275 },
|
||||
"machine_depth": { "default_value": 275 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"material_bed_temperature": { "default_value": 70 },
|
||||
"layer_height_0": { "default_value": 0.1 },
|
||||
"retraction_amount": { "default_value": 2 },
|
||||
"retraction_speed": { "default_value": 50 },
|
||||
"retraction_retract_speed": { "default_value": 50 },
|
||||
"retraction_prime_speed": { "default_value": 30 },
|
||||
"adhesion_type": { "default_value": "skirt" },
|
||||
"machine_nozzle_heat_up_speed": { "default_value": 2 },
|
||||
"machine_nozzle_cool_down_speed": { "default_value": 2 },
|
||||
|
|
|
@ -88,9 +88,6 @@
|
|||
},
|
||||
"machine_acceleration": {
|
||||
"default_value": 3000
|
||||
},
|
||||
"machine_nozzle_temp_enabled": {
|
||||
"default_value": false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue