mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-29 23:34:32 +08:00
Merge branch 'main' into PP-441-Generic-PEKK-profile
This commit is contained in:
commit
26d181c695
@ -4,7 +4,7 @@ requirements:
|
||||
- "curaengine/(latest)@ultimaker/testing"
|
||||
- "cura_binary_data/(latest)@ultimaker/testing"
|
||||
- "fdm_materials/(latest)@ultimaker/testing"
|
||||
- "curaengine_plugin_gradual_flow/0.1.0-beta.2"
|
||||
- "curaengine_plugin_gradual_flow/0.1.0-beta.3"
|
||||
- "dulcificum/latest@ultimaker/testing"
|
||||
- "pysavitar/5.3.0"
|
||||
- "pynest2d/5.3.0"
|
||||
|
@ -1,6 +1,5 @@
|
||||
# Copyright (c) 2023 UltiMaker
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import List, cast
|
||||
|
||||
from PyQt6.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty
|
||||
@ -33,7 +32,6 @@ from cura.Operations.SetBuildPlateNumberOperation import SetBuildPlateNumberOper
|
||||
from UM.Logger import Logger
|
||||
from UM.Scene.SceneNode import SceneNode
|
||||
|
||||
|
||||
class CuraActions(QObject):
|
||||
def __init__(self, parent: QObject = None) -> None:
|
||||
super().__init__(parent)
|
||||
|
@ -601,9 +601,7 @@ class CuraApplication(QtApplication):
|
||||
preferences.addPreference("mesh/scale_to_fit", False)
|
||||
preferences.addPreference("mesh/scale_tiny_meshes", True)
|
||||
preferences.addPreference("cura/dialog_on_project_save", True)
|
||||
preferences.addPreference("cura/dialog_on_ucp_project_save", True)
|
||||
preferences.addPreference("cura/asked_dialog_on_project_save", False)
|
||||
preferences.addPreference("cura/asked_dialog_on_ucp_project_save", False)
|
||||
preferences.addPreference("cura/choice_on_profile_override", "always_ask")
|
||||
preferences.addPreference("cura/choice_on_open_project", "always_ask")
|
||||
preferences.addPreference("cura/use_multi_build_plate", False)
|
||||
@ -1979,6 +1977,17 @@ class CuraApplication(QtApplication):
|
||||
|
||||
openProjectFile = pyqtSignal(QUrl, bool, arguments = ["project_file", "add_to_recent_files"]) # Emitted when a project file is about to open.
|
||||
|
||||
@pyqtSlot(QUrl, bool)
|
||||
def readLocalUcpFile(self, file: QUrl, add_to_recent_files: bool = True):
|
||||
|
||||
file_name = QUrl(file).toLocalFile()
|
||||
workspace_reader = self.getWorkspaceFileHandler()
|
||||
if workspace_reader is None:
|
||||
Logger.warning(f"Workspace reader not found, cannot read file {file_name}.")
|
||||
return
|
||||
|
||||
workspace_reader.readLocalFile(file, add_to_recent_files)
|
||||
|
||||
@pyqtSlot(QUrl, str, bool)
|
||||
@pyqtSlot(QUrl, str)
|
||||
@pyqtSlot(QUrl)
|
||||
@ -2184,6 +2193,12 @@ class CuraApplication(QtApplication):
|
||||
def addNonSliceableExtension(self, extension):
|
||||
self._non_sliceable_extensions.append(extension)
|
||||
|
||||
@pyqtSlot(str, result = bool)
|
||||
def isProjectUcp(self, file_url) -> bool:
|
||||
file_path = QUrl(file_url).toLocalFile()
|
||||
workspace_reader = self.getWorkspaceFileHandler().getReaderForFile(file_path)
|
||||
return workspace_reader.getIsProjectUcp()
|
||||
|
||||
@pyqtSlot(str, result=bool)
|
||||
def checkIsValidProjectFile(self, file_url):
|
||||
"""Checks if the given file URL is a valid project file. """
|
||||
@ -2193,6 +2208,8 @@ class CuraApplication(QtApplication):
|
||||
if workspace_reader is None:
|
||||
return False # non-project files won't get a reader
|
||||
try:
|
||||
if workspace_reader.getPluginId() == "3MFReader":
|
||||
workspace_reader.clearOpenAsUcp()
|
||||
result = workspace_reader.preRead(file_path, show_dialog=False)
|
||||
return result == WorkspaceReader.PreReadResult.accepted
|
||||
except:
|
||||
|
@ -5,7 +5,7 @@
|
||||
# online cloud connected printers are represented within this ListModel. Additional information such as the number of
|
||||
# connected printers for each printer type is gathered.
|
||||
|
||||
from typing import Optional, List, cast
|
||||
from typing import Optional, List, cast, Dict, Any
|
||||
|
||||
from PyQt6.QtCore import Qt, QTimer, QObject, pyqtSlot, pyqtProperty, pyqtSignal
|
||||
|
||||
@ -30,10 +30,10 @@ class MachineListModel(ListModel):
|
||||
ComponentTypeRole = Qt.ItemDataRole.UserRole + 8
|
||||
IsNetworkedMachineRole = Qt.ItemDataRole.UserRole + 9
|
||||
|
||||
def __init__(self, parent: Optional[QObject] = None, machines_filter: List[GlobalStack] = None, listenToChanges: bool = True) -> None:
|
||||
def __init__(self, parent: Optional[QObject] = None, machines_filter: List[GlobalStack] = None, listenToChanges: bool = True, showCloudPrinters: bool = False) -> None:
|
||||
super().__init__(parent)
|
||||
|
||||
self._show_cloud_printers = False
|
||||
self._show_cloud_printers = showCloudPrinters
|
||||
self._machines_filter = machines_filter
|
||||
|
||||
self._catalog = i18nCatalog("cura")
|
||||
@ -159,3 +159,8 @@ class MachineListModel(ListModel):
|
||||
"machineCount": machine_count,
|
||||
"catergory": "connected" if is_online else "other",
|
||||
})
|
||||
|
||||
def getItems(self) -> Dict[str, Any]:
|
||||
if self.count > 0:
|
||||
return self.items
|
||||
return {}
|
@ -3,6 +3,7 @@
|
||||
|
||||
from PyQt6.QtCore import Qt
|
||||
|
||||
from UM.Logger import Logger
|
||||
from UM.Settings.SettingDefinition import SettingDefinition
|
||||
from UM.Qt.ListModel import ListModel
|
||||
|
||||
@ -19,6 +20,8 @@ class SpecificSettingsModel(ListModel):
|
||||
self.addRoleName(self.ValueRole, "value")
|
||||
|
||||
self._i18n_catalog = None
|
||||
self._update()
|
||||
|
||||
|
||||
def addSettingsFromStack(self, stack, category, settings):
|
||||
for setting, value in settings.items():
|
||||
@ -27,7 +30,7 @@ class SpecificSettingsModel(ListModel):
|
||||
setting_type = stack.getProperty(setting, "type")
|
||||
if setting_type is not None:
|
||||
# This is not very good looking, but will do for now
|
||||
value = SettingDefinition.settingValueToString(setting_type, value) + " " + unit
|
||||
value = str(SettingDefinition.settingValueToString(setting_type, value)) + " " + str(unit)
|
||||
else:
|
||||
value = str(value)
|
||||
|
||||
@ -36,3 +39,8 @@ class SpecificSettingsModel(ListModel):
|
||||
"label": stack.getProperty(setting, "label"),
|
||||
"value": value
|
||||
})
|
||||
|
||||
def _update(self):
|
||||
Logger.debug(f"Updating {self.__class__.__name__}")
|
||||
self.setItems([])
|
||||
return
|
||||
|
@ -117,6 +117,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
self._supported_extensions = [".3mf"]
|
||||
self._dialog = WorkspaceDialog()
|
||||
self._3mf_mesh_reader = None
|
||||
self._is_ucp = None
|
||||
self._container_registry = ContainerRegistry.getInstance()
|
||||
|
||||
# suffixes registered with the MimeTypes don't start with a dot '.'
|
||||
@ -143,16 +144,17 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
self._old_new_materials: Dict[str, str] = {}
|
||||
self._machine_info = None
|
||||
|
||||
self._load_profile = False
|
||||
self._user_settings: Dict[str, Dict[str, Any]] = {}
|
||||
|
||||
def _clearState(self):
|
||||
self._id_mapping = {}
|
||||
self._old_new_materials = {}
|
||||
self._machine_info = None
|
||||
self._load_profile = False
|
||||
self._user_settings = {}
|
||||
|
||||
def clearOpenAsUcp(self):
|
||||
self._is_ucp = None
|
||||
|
||||
def getNewId(self, old_id: str):
|
||||
"""Get a unique name based on the old_id. This is different from directly calling the registry in that it caches results.
|
||||
|
||||
@ -207,6 +209,16 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
|
||||
return global_stack_file_list[0], extruder_stack_file_list
|
||||
|
||||
def _isProjectUcp(self, file_name) -> bool:
|
||||
if self._is_ucp == None:
|
||||
archive = zipfile.ZipFile(file_name, "r")
|
||||
cura_file_names = [name for name in archive.namelist() if name.startswith("Cura/")]
|
||||
self._is_ucp =True if USER_SETTINGS_PATH in cura_file_names else False
|
||||
|
||||
def getIsProjectUcp(self) -> bool:
|
||||
return self._is_ucp
|
||||
|
||||
|
||||
def preRead(self, file_name, show_dialog=True, *args, **kwargs):
|
||||
"""Read some info so we can make decisions
|
||||
|
||||
@ -215,7 +227,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
we don't want to show a dialog.
|
||||
"""
|
||||
self._clearState()
|
||||
|
||||
self._isProjectUcp(file_name)
|
||||
self._3mf_mesh_reader = Application.getInstance().getMeshFileHandler().getReaderForFile(file_name)
|
||||
if self._3mf_mesh_reader and self._3mf_mesh_reader.preRead(file_name) == WorkspaceReader.PreReadResult.accepted:
|
||||
pass
|
||||
@ -242,7 +254,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
# Read definition containers
|
||||
#
|
||||
machine_definition_id = None
|
||||
updatable_machines = None if is_ucp else []
|
||||
updatable_machines = None if self._is_ucp else []
|
||||
machine_definition_container_count = 0
|
||||
extruder_definition_container_count = 0
|
||||
definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)]
|
||||
@ -609,11 +621,13 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
|
||||
# Load the user specifically exported settings
|
||||
self._dialog.exportedSettingModel.clear()
|
||||
if is_ucp:
|
||||
self._dialog.setCurrentMachineName("")
|
||||
if self._is_ucp:
|
||||
try:
|
||||
self._user_settings = json.loads(archive.open("Cura/user-settings.json").read().decode("utf-8"))
|
||||
any_extruder_stack = ExtruderManager.getInstance().getExtruderStack(0)
|
||||
actual_global_stack = CuraApplication.getInstance().getGlobalContainerStack()
|
||||
self._dialog.setCurrentMachineName(actual_global_stack.id)
|
||||
|
||||
for stack_name, settings in self._user_settings.items():
|
||||
if stack_name == 'global':
|
||||
@ -658,15 +672,15 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
self._dialog.setVariantType(variant_type_name)
|
||||
self._dialog.setHasObjectsOnPlate(Application.getInstance().platformActivity)
|
||||
self._dialog.setMissingPackagesMetadata(missing_package_metadata)
|
||||
self._dialog.setHasVisibleSelectSameProfileChanged(is_ucp)
|
||||
self._dialog.setAllowCreatemachine(not is_ucp)
|
||||
self._dialog.setAllowCreatemachine(not self._is_ucp)
|
||||
self._dialog.setIsUcp(self._is_ucp)
|
||||
self._dialog.show()
|
||||
|
||||
|
||||
# Choosing the initially selected printer in MachineSelector
|
||||
is_networked_machine = False
|
||||
is_abstract_machine = False
|
||||
if global_stack and isinstance(global_stack, GlobalStack):
|
||||
if global_stack and isinstance(global_stack, GlobalStack) and not self._is_ucp:
|
||||
# The machine included in the project file exists locally already, no need to change selected printers.
|
||||
is_networked_machine = global_stack.hasNetworkedConnection()
|
||||
is_abstract_machine = parseBool(existing_global_stack.getMetaDataEntry("is_abstract_machine", False))
|
||||
@ -675,7 +689,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
elif self._dialog.updatableMachinesModel.count > 0:
|
||||
# The machine included in the project file does not exist. There is another machine of the same type.
|
||||
# This will always default to an abstract machine first.
|
||||
machine = self._dialog.updatableMachinesModel.getItem(0)
|
||||
machine = self._dialog.updatableMachinesModel.getItem(self._dialog.currentMachinePositionIndex)
|
||||
machine_name = machine["name"]
|
||||
is_networked_machine = machine["isNetworked"]
|
||||
is_abstract_machine = machine["isAbstractMachine"]
|
||||
@ -693,7 +707,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
self._dialog.setIsAbstractMachine(is_abstract_machine)
|
||||
self._dialog.setMachineName(machine_name)
|
||||
self._dialog.updateCompatibleMachine()
|
||||
self._dialog.setSelectSameProfileChecked(self._dialog.isCompatibleMachine)
|
||||
|
||||
# Block until the dialog is closed.
|
||||
self._dialog.waitForClose()
|
||||
@ -701,8 +714,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
if self._dialog.getResult() == {}:
|
||||
return WorkspaceReader.PreReadResult.cancelled
|
||||
|
||||
self._load_profile = not is_ucp or (self._dialog.selectSameProfileChecked and self._dialog.isCompatibleMachine)
|
||||
|
||||
self._resolve_strategies = self._dialog.getResult()
|
||||
#
|
||||
# There can be 3 resolve strategies coming from the dialog:
|
||||
@ -717,7 +728,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
if key not in containers_found_dict or strategy is not None:
|
||||
continue
|
||||
self._resolve_strategies[key] = "override" if containers_found_dict[key] else "new"
|
||||
|
||||
return WorkspaceReader.PreReadResult.accepted
|
||||
|
||||
@call_on_qt_thread
|
||||
@ -825,7 +835,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
for stack in extruder_stacks:
|
||||
stack.setNextStack(global_stack, connect_signals = False)
|
||||
|
||||
if self._load_profile:
|
||||
if not self._is_ucp:
|
||||
Logger.log("d", "Workspace loading is checking definitions...")
|
||||
# Get all the definition files & check if they exist. If not, add them.
|
||||
definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)]
|
||||
@ -899,7 +909,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
QCoreApplication.processEvents() # Ensure that the GUI does not freeze.
|
||||
|
||||
if global_stack:
|
||||
if self._load_profile:
|
||||
if not self._is_ucp:
|
||||
# Handle quality changes if any
|
||||
self._processQualityChanges(global_stack)
|
||||
|
||||
@ -907,7 +917,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
self._applyChangesToMachine(global_stack, extruder_stack_dict)
|
||||
else:
|
||||
# Just clear the settings now, so that we can change the active machine without conflicts
|
||||
self._clearMachineSettings(global_stack, extruder_stack_dict)
|
||||
self._clearMachineSettings(global_stack, {})
|
||||
|
||||
|
||||
Logger.log("d", "Workspace loading is notifying rest of the code of changes...")
|
||||
# Actually change the active machine.
|
||||
@ -917,9 +928,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
# function is running on the main thread (Qt thread), although those "changed" signals have been emitted, but
|
||||
# they won't take effect until this function is done.
|
||||
# To solve this, we schedule _updateActiveMachine() for later so it will have the latest data.
|
||||
|
||||
self._updateActiveMachine(global_stack)
|
||||
|
||||
if not self._load_profile:
|
||||
if self._is_ucp:
|
||||
# Now we have switched, apply the user settings
|
||||
self._applyUserSettings(global_stack, extruder_stack_dict, self._user_settings)
|
||||
|
||||
@ -931,6 +943,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
base_file_name = os.path.basename(file_name)
|
||||
self.setWorkspaceName(base_file_name)
|
||||
|
||||
self._is_ucp = None
|
||||
return nodes, self._loadMetadata(file_name)
|
||||
|
||||
@staticmethod
|
||||
@ -1309,39 +1322,40 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
machine_manager.setActiveMachine(global_stack.getId())
|
||||
|
||||
# Set metadata fields that are missing from the global stack
|
||||
for key, value in self._machine_info.metadata_dict.items():
|
||||
if key not in global_stack.getMetaData() and key not in _ignored_machine_network_metadata:
|
||||
global_stack.setMetaDataEntry(key, value)
|
||||
if not self._is_ucp:
|
||||
for key, value in self._machine_info.metadata_dict.items():
|
||||
if key not in global_stack.getMetaData() and key not in _ignored_machine_network_metadata:
|
||||
global_stack.setMetaDataEntry(key, value)
|
||||
|
||||
if self._quality_changes_to_apply:
|
||||
quality_changes_group_list = container_tree.getCurrentQualityChangesGroups()
|
||||
quality_changes_group = next((qcg for qcg in quality_changes_group_list if qcg.name == self._quality_changes_to_apply), None)
|
||||
if not quality_changes_group:
|
||||
Logger.log("e", "Could not find quality_changes [%s]", self._quality_changes_to_apply)
|
||||
return
|
||||
machine_manager.setQualityChangesGroup(quality_changes_group, no_dialog = True)
|
||||
else:
|
||||
self._quality_type_to_apply = self._quality_type_to_apply.lower() if self._quality_type_to_apply else None
|
||||
quality_group_dict = container_tree.getCurrentQualityGroups()
|
||||
if self._quality_type_to_apply in quality_group_dict:
|
||||
quality_group = quality_group_dict[self._quality_type_to_apply]
|
||||
if self._quality_changes_to_apply !=None:
|
||||
quality_changes_group_list = container_tree.getCurrentQualityChangesGroups()
|
||||
quality_changes_group = next((qcg for qcg in quality_changes_group_list if qcg.name == self._quality_changes_to_apply), None)
|
||||
if not quality_changes_group:
|
||||
Logger.log("e", "Could not find quality_changes [%s]", self._quality_changes_to_apply)
|
||||
return
|
||||
machine_manager.setQualityChangesGroup(quality_changes_group, no_dialog = True)
|
||||
else:
|
||||
Logger.log("i", "Could not find quality type [%s], switch to default", self._quality_type_to_apply)
|
||||
preferred_quality_type = global_stack.getMetaDataEntry("preferred_quality_type")
|
||||
quality_group = quality_group_dict.get(preferred_quality_type)
|
||||
if quality_group is None:
|
||||
Logger.log("e", "Could not get preferred quality type [%s]", preferred_quality_type)
|
||||
|
||||
if quality_group is not None:
|
||||
machine_manager.setQualityGroup(quality_group, no_dialog = True)
|
||||
|
||||
# Also apply intent if available
|
||||
available_intent_category_list = IntentManager.getInstance().currentAvailableIntentCategories()
|
||||
if self._intent_category_to_apply is not None and self._intent_category_to_apply in available_intent_category_list:
|
||||
machine_manager.setIntentByCategory(self._intent_category_to_apply)
|
||||
self._quality_type_to_apply = self._quality_type_to_apply.lower() if self._quality_type_to_apply else None
|
||||
quality_group_dict = container_tree.getCurrentQualityGroups()
|
||||
if self._quality_type_to_apply in quality_group_dict:
|
||||
quality_group = quality_group_dict[self._quality_type_to_apply]
|
||||
else:
|
||||
# if no intent is provided, reset to the default (balanced) intent
|
||||
machine_manager.resetIntents()
|
||||
Logger.log("i", "Could not find quality type [%s], switch to default", self._quality_type_to_apply)
|
||||
preferred_quality_type = global_stack.getMetaDataEntry("preferred_quality_type")
|
||||
quality_group = quality_group_dict.get(preferred_quality_type)
|
||||
if quality_group is None:
|
||||
Logger.log("e", "Could not get preferred quality type [%s]", preferred_quality_type)
|
||||
|
||||
if quality_group is not None:
|
||||
machine_manager.setQualityGroup(quality_group, no_dialog = True)
|
||||
|
||||
# Also apply intent if available
|
||||
available_intent_category_list = IntentManager.getInstance().currentAvailableIntentCategories()
|
||||
if self._intent_category_to_apply is not None and self._intent_category_to_apply in available_intent_category_list:
|
||||
machine_manager.setIntentByCategory(self._intent_category_to_apply)
|
||||
else:
|
||||
# if no intent is provided, reset to the default (balanced) intent
|
||||
machine_manager.resetIntents()
|
||||
# Notify everything/one that is to notify about changes.
|
||||
global_stack.containersChanged.emit(global_stack.getTop())
|
||||
|
||||
|
@ -63,21 +63,22 @@ class WorkspaceDialog(QObject):
|
||||
self._machine_name = ""
|
||||
self._machine_type = ""
|
||||
self._variant_type = ""
|
||||
self._current_machine_name = ""
|
||||
self._material_labels = []
|
||||
self._extruders = []
|
||||
self._objects_on_plate = False
|
||||
self._is_printer_group = False
|
||||
self._updatable_machines_model = MachineListModel(self, listenToChanges=False)
|
||||
self._updatable_machines_model = MachineListModel(self, listenToChanges = False, showCloudPrinters = True)
|
||||
self._missing_package_metadata: List[Dict[str, str]] = []
|
||||
self._plugin_registry: PluginRegistry = CuraApplication.getInstance().getPluginRegistry()
|
||||
self._install_missing_package_dialog: Optional[QObject] = None
|
||||
self._is_abstract_machine = False
|
||||
self._is_networked_machine = False
|
||||
self._is_compatible_machine = False
|
||||
self._has_visible_select_same_profile = False
|
||||
self._select_same_profile_checked = True
|
||||
self._allow_create_machine = True
|
||||
self._exported_settings_model = SpecificSettingsModel()
|
||||
self._current_machine_pos_index = 0
|
||||
self._is_ucp = False
|
||||
|
||||
machineConflictChanged = pyqtSignal()
|
||||
qualityChangesConflictChanged = pyqtSignal()
|
||||
@ -102,8 +103,7 @@ class WorkspaceDialog(QObject):
|
||||
isPrinterGroupChanged = pyqtSignal()
|
||||
missingPackagesChanged = pyqtSignal()
|
||||
isCompatibleMachineChanged = pyqtSignal()
|
||||
hasVisibleSelectSameProfileChanged = pyqtSignal()
|
||||
selectSameProfileCheckedChanged = pyqtSignal()
|
||||
isUcpChanged = pyqtSignal()
|
||||
|
||||
@pyqtProperty(bool, notify = isPrinterGroupChanged)
|
||||
def isPrinterGroup(self) -> bool:
|
||||
@ -176,8 +176,30 @@ class WorkspaceDialog(QObject):
|
||||
self._machine_name = machine_name
|
||||
self.machineNameChanged.emit()
|
||||
|
||||
def setCurrentMachineName(self, machine: str) -> None:
|
||||
self._current_machine_name = machine
|
||||
|
||||
@pyqtProperty(str, notify = machineNameChanged)
|
||||
def currentMachineName(self) -> str:
|
||||
return self._current_machine_name
|
||||
|
||||
@staticmethod
|
||||
def getIndexOfCurrentMachine(list_of_dicts, key, value, defaultIndex):
|
||||
for i, d in enumerate(list_of_dicts):
|
||||
if d.get(key) == value: # found the dictionary
|
||||
return i
|
||||
return defaultIndex
|
||||
|
||||
@pyqtProperty(int, notify = machineNameChanged)
|
||||
def currentMachinePositionIndex(self):
|
||||
return self._current_machine_pos_index
|
||||
|
||||
@pyqtProperty(QObject, notify = updatableMachinesChanged)
|
||||
def updatableMachinesModel(self) -> MachineListModel:
|
||||
if self._current_machine_name != "":
|
||||
self._current_machine_pos_index = self.getIndexOfCurrentMachine(self._updatable_machines_model.getItems(), "id", self._current_machine_name, defaultIndex = 0)
|
||||
else:
|
||||
self._current_machine_pos_index = 0
|
||||
return cast(MachineListModel, self._updatable_machines_model)
|
||||
|
||||
def setUpdatableMachines(self, updatable_machines: List[GlobalStack]) -> None:
|
||||
@ -318,23 +340,14 @@ class WorkspaceDialog(QObject):
|
||||
def isCompatibleMachine(self) -> bool:
|
||||
return self._is_compatible_machine
|
||||
|
||||
def setHasVisibleSelectSameProfileChanged(self, has_visible_select_same_profile):
|
||||
if has_visible_select_same_profile != self._has_visible_select_same_profile:
|
||||
self._has_visible_select_same_profile = has_visible_select_same_profile
|
||||
self.hasVisibleSelectSameProfileChanged.emit()
|
||||
def setIsUcp(self, isUcp: bool) -> None:
|
||||
if isUcp != self._is_ucp:
|
||||
self._is_ucp = isUcp
|
||||
self.isUcpChanged.emit()
|
||||
|
||||
@pyqtProperty(bool, notify = hasVisibleSelectSameProfileChanged)
|
||||
def hasVisibleSelectSameProfile(self):
|
||||
return self._has_visible_select_same_profile
|
||||
|
||||
def setSelectSameProfileChecked(self, select_same_profile_checked):
|
||||
if select_same_profile_checked != self._select_same_profile_checked:
|
||||
self._select_same_profile_checked = select_same_profile_checked
|
||||
self.selectSameProfileCheckedChanged.emit()
|
||||
|
||||
@pyqtProperty(bool, notify = selectSameProfileCheckedChanged, fset = setSelectSameProfileChecked)
|
||||
def selectSameProfileChecked(self):
|
||||
return self._select_same_profile_checked
|
||||
@pyqtProperty(bool, notify=isUcpChanged)
|
||||
def isUcp(self):
|
||||
return self._is_ucp
|
||||
|
||||
def setAllowCreatemachine(self, allow_create_machine):
|
||||
self._allow_create_machine = allow_create_machine
|
||||
@ -343,7 +356,7 @@ class WorkspaceDialog(QObject):
|
||||
def allowCreateMachine(self):
|
||||
return self._allow_create_machine
|
||||
|
||||
@pyqtProperty(QObject, constant = True)
|
||||
@pyqtProperty(QObject)
|
||||
def exportedSettingModel(self):
|
||||
return self._exported_settings_model
|
||||
|
||||
|
@ -12,7 +12,7 @@ import Cura 1.1 as Cura
|
||||
UM.Dialog
|
||||
{
|
||||
id: workspaceDialog
|
||||
title: catalog.i18nc("@title:window", "Open Project")
|
||||
title: manager.isUcp? catalog.i18nc("@title:window", "Open Universal Cura Project (UCP)"): catalog.i18nc("@title:window", "Open Project")
|
||||
|
||||
margin: UM.Theme.getSize("default_margin").width
|
||||
minimumWidth: UM.Theme.getSize("modal_window_minimum").width
|
||||
@ -28,7 +28,7 @@ UM.Dialog
|
||||
UM.Label
|
||||
{
|
||||
id: titleLabel
|
||||
text: catalog.i18nc("@action:title", "Summary - Cura Project")
|
||||
text: manager.isUcp? catalog.i18nc("@action:title", "Summary - Open Universal Cura Project (UCP)"): catalog.i18nc("@action:title", "Summary - Cura Project")
|
||||
font: UM.Theme.getFont("large")
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
@ -96,7 +96,7 @@ UM.Dialog
|
||||
WorkspaceRow
|
||||
{
|
||||
leftLabelText: catalog.i18nc("@action:label", manager.isPrinterGroup ? "Printer Group" : "Printer Name")
|
||||
rightLabelText: manager.machineName == catalog.i18nc("@button", "Create new") ? "" : manager.machineName
|
||||
rightLabelText: manager.isUcp? manager.machineType: manager.machineName == catalog.i18nc("@button", "Create new") ? "" : manager.machineName
|
||||
}
|
||||
}
|
||||
|
||||
@ -159,7 +159,7 @@ UM.Dialog
|
||||
WorkspaceSection
|
||||
{
|
||||
id: profileSection
|
||||
title: catalog.i18nc("@action:label", "Profile settings")
|
||||
title: manager.isUcp? catalog.i18nc("@action:label", "Suggested Profile settings"):catalog.i18nc("@action:label", "Profile settings")
|
||||
iconSource: UM.Theme.getIcon("Sliders")
|
||||
content: Column
|
||||
{
|
||||
@ -185,32 +185,44 @@ UM.Dialog
|
||||
{
|
||||
leftLabelText: catalog.i18nc("@action:label", "Not in profile")
|
||||
rightLabelText: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings)
|
||||
visible: manager.numUserSettings != 0 && manager.selectSameProfileChecked && manager.isCompatibleMachine
|
||||
visible: manager.numUserSettings != 0 && manager.isCompatibleMachine
|
||||
}
|
||||
|
||||
WorkspaceRow
|
||||
{
|
||||
leftLabelText: catalog.i18nc("@action:label", "Derivative from")
|
||||
rightLabelText: catalog.i18ncp("@action:label", "%1, %2 override", "%1, %2 overrides", manager.numSettingsOverridenByQualityChanges).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges)
|
||||
visible: manager.numSettingsOverridenByQualityChanges != 0 && manager.selectSameProfileChecked && manager.isCompatibleMachine
|
||||
visible: manager.numSettingsOverridenByQualityChanges != 0 && manager.isCompatibleMachine
|
||||
}
|
||||
}
|
||||
}
|
||||
WorkspaceSection
|
||||
{
|
||||
id: ucpProfileSection
|
||||
visible: manager.isUcp
|
||||
title: catalog.i18nc("@action:label", "Settings Loaded from UCP file")
|
||||
iconSource: UM.Theme.getIcon("Settings")
|
||||
|
||||
content: Column
|
||||
{
|
||||
id: ucpProfileSettingsValuesTable
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
|
||||
|
||||
WorkspaceRow
|
||||
{
|
||||
leftLabelText: catalog.i18nc("@action:label", "Specific settings")
|
||||
leftLabelText: catalog.i18nc("@action:label", "Settings Loaded from UCP file")
|
||||
rightLabelText: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.exportedSettingModel.rowCount()).arg(manager.exportedSettingModel.rowCount())
|
||||
buttonText: tableViewSpecificSettings.shouldBeVisible ? catalog.i18nc("@action:button", "Hide settings") : catalog.i18nc("@action:button", "Show settings")
|
||||
visible: !manager.selectSameProfileChecked || !manager.isCompatibleMachine
|
||||
onButtonClicked: tableViewSpecificSettings.shouldBeVisible = !tableViewSpecificSettings.shouldBeVisible
|
||||
}
|
||||
|
||||
Cura.TableView
|
||||
{
|
||||
id: tableViewSpecificSettings
|
||||
width: parent.width - parent.leftPadding - UM.Theme.getSize("default_margin").width
|
||||
height: UM.Theme.getSize("card").height
|
||||
visible: shouldBeVisible && (!manager.selectSameProfileChecked || !manager.isCompatibleMachine)
|
||||
property bool shouldBeVisible: false
|
||||
visible: shouldBeVisible && manager.isUcp
|
||||
property bool shouldBeVisible: true
|
||||
|
||||
columnHeaders:
|
||||
[
|
||||
@ -227,15 +239,11 @@ UM.Dialog
|
||||
}
|
||||
}
|
||||
|
||||
UM.CheckBox
|
||||
property var modelRows: manager.exportedSettingModel.items
|
||||
onModelRowsChanged:
|
||||
{
|
||||
text: catalog.i18nc("@action:checkbox", "Select the same profile")
|
||||
onEnabledChanged: manager.selectSameProfileChecked = enabled
|
||||
tooltip: enabled ? "" : catalog.i18nc("@tooltip", "You can use the same profile only if you have the same printer as the project was published with")
|
||||
visible: manager.hasVisibleSelectSameProfile && manager.isCompatibleMachine
|
||||
|
||||
checked: manager.selectSameProfileChecked
|
||||
onCheckedChanged: manager.selectSameProfileChecked = checked
|
||||
tableModel.clear()
|
||||
tableModel.rows = modelRows
|
||||
}
|
||||
}
|
||||
|
||||
@ -245,7 +253,7 @@ UM.Dialog
|
||||
id: qualityChangesResolveComboBox
|
||||
model: resolveStrategiesModel
|
||||
textRole: "label"
|
||||
visible: manager.qualityChangesConflict
|
||||
visible: manager.qualityChangesConflict && !manager.isUcp
|
||||
contentLeftPadding: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width
|
||||
textFont: UM.Theme.getFont("medium")
|
||||
|
||||
@ -274,7 +282,7 @@ UM.Dialog
|
||||
WorkspaceSection
|
||||
{
|
||||
id: materialSection
|
||||
title: catalog.i18nc("@action:label", "Material settings")
|
||||
title: manager.isUcp? catalog.i18nc("@action:label", "Suggested Material settings"): catalog.i18nc("@action:label", "Material settings")
|
||||
iconSource: UM.Theme.getIcon("Spool")
|
||||
content: Column
|
||||
{
|
||||
@ -299,7 +307,7 @@ UM.Dialog
|
||||
id: materialResolveComboBox
|
||||
model: resolveStrategiesModel
|
||||
textRole: "label"
|
||||
visible: manager.materialConflict
|
||||
visible: manager.materialConflict && !manager.isUcp
|
||||
contentLeftPadding: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width
|
||||
textFont: UM.Theme.getFont("medium")
|
||||
|
||||
@ -330,6 +338,7 @@ UM.Dialog
|
||||
id: visibilitySection
|
||||
title: catalog.i18nc("@action:label", "Setting visibility")
|
||||
iconSource: UM.Theme.getIcon("Eye")
|
||||
visible : !manager.isUcp
|
||||
content: Column
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
@ -467,12 +476,13 @@ UM.Dialog
|
||||
{
|
||||
if (visible)
|
||||
{
|
||||
// Force relead the comboboxes
|
||||
// Force reload the comboboxes
|
||||
// Since this dialog is only created once the first time you open it, these comboxes need to be reloaded
|
||||
// each time it is shown after the first time so that the indexes will update correctly.
|
||||
materialSection.reloadValues()
|
||||
profileSection.reloadValues()
|
||||
printerSection.reloadValues()
|
||||
ucpProfileSection.reloadValues()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -84,7 +84,8 @@ Item
|
||||
{
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: comboboxLabel.verticalCenter
|
||||
|
||||
color: UM.Theme.getColor("small_button_text")
|
||||
icon: UM.Theme.getIcon("Information")
|
||||
text: comboboxTooltipText
|
||||
visible: comboboxTooltipText != ""
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ RowLayout
|
||||
Layout.preferredWidth: UM.Theme.getSize("setting").width
|
||||
checked: modelData.selected
|
||||
onClicked: modelData.selected = checked
|
||||
enabled: modelData.selectable
|
||||
tooltip: modelData.selectable ? "" :catalog.i18nc("@tooltip", "This setting may not perform well while exporting to UCP. Users are asked to add it at their own risk.")
|
||||
}
|
||||
|
||||
UM.Label
|
||||
@ -30,9 +30,10 @@ RowLayout
|
||||
UM.HelpIcon
|
||||
{
|
||||
UM.I18nCatalog { id: catalog; name: "cura" }
|
||||
|
||||
text: catalog.i18nc("@tooltip",
|
||||
"This setting can't be exported because it depends on the used printer capacities")
|
||||
"This setting may not perform well while exporting to UCP, Users are asked to add it at their own risk.")
|
||||
visible: !modelData.selectable
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -61,43 +61,47 @@ class SettingsExportModel(QObject):
|
||||
'top_skin_preshrink',
|
||||
'interlocking_enable'}
|
||||
|
||||
def __init__(self, parent = None):
|
||||
PER_MODEL_EXPORTABLE_SETTINGS_KEYS = {"anti_overhang_mesh",
|
||||
"infill_mesh",
|
||||
"cutting_mesh",
|
||||
"support_mesh"}
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self._settings_groups = []
|
||||
|
||||
application = CuraApplication.getInstance()
|
||||
|
||||
# Display global settings
|
||||
global_stack = application.getGlobalContainerStack()
|
||||
self._settings_groups.append(SettingsExportGroup(global_stack,
|
||||
"Global settings",
|
||||
SettingsExportGroup.Category.Global,
|
||||
self._exportSettings(global_stack)))
|
||||
self._appendGlobalSettings(application)
|
||||
self._appendExtruderSettings(application)
|
||||
self._appendModelSettings(application)
|
||||
|
||||
# Display per-extruder settings
|
||||
def _appendGlobalSettings(self, application):
|
||||
global_stack = application.getGlobalContainerStack()
|
||||
self._settings_groups.append(SettingsExportGroup(
|
||||
global_stack, "Global settings", SettingsExportGroup.Category.Global, self._exportSettings(global_stack)))
|
||||
|
||||
def _appendExtruderSettings(self, application):
|
||||
extruders_stacks = ExtruderManager.getInstance().getUsedExtruderStacks()
|
||||
for extruder_stack in extruders_stacks:
|
||||
color = ""
|
||||
if extruder_stack.material:
|
||||
color = extruder_stack.material.getMetaDataEntry("color_code")
|
||||
color = extruder_stack.material.getMetaDataEntry("color_code") if extruder_stack.material else ""
|
||||
self._settings_groups.append(SettingsExportGroup(
|
||||
extruder_stack, "Extruder settings", SettingsExportGroup.Category.Extruder,
|
||||
self._exportSettings(extruder_stack), extruder_index=extruder_stack.position, extruder_color=color))
|
||||
|
||||
self._settings_groups.append(SettingsExportGroup(extruder_stack,
|
||||
"Extruder settings",
|
||||
SettingsExportGroup.Category.Extruder,
|
||||
self._exportSettings(extruder_stack),
|
||||
extruder_index=extruder_stack.position,
|
||||
extruder_color=color))
|
||||
def _appendModelSettings(self, application):
|
||||
scene = application.getController().getScene()
|
||||
for scene_node in scene.getRoot().getChildren():
|
||||
self._appendNodeSettings(scene_node, "Model settings", SettingsExportGroup.Category.Model)
|
||||
|
||||
def _appendNodeSettings(self, node, title_prefix, category):
|
||||
stack = node.callDecoration("getStack")
|
||||
if stack:
|
||||
self._settings_groups.append(SettingsExportGroup(
|
||||
stack, f"{title_prefix}", category, self._exportSettings(stack), node.getName()))
|
||||
for child in node.getChildren():
|
||||
self._appendNodeSettings(child, f"Children of {node.getName()}", SettingsExportGroup.Category.Model)
|
||||
|
||||
# Display per-model settings
|
||||
scene_root = application.getController().getScene().getRoot()
|
||||
for scene_node in scene_root.getChildren():
|
||||
per_model_stack = scene_node.callDecoration("getStack")
|
||||
if per_model_stack is not None:
|
||||
self._settings_groups.append(SettingsExportGroup(per_model_stack,
|
||||
"Model settings",
|
||||
SettingsExportGroup.Category.Model,
|
||||
self._exportSettings(per_model_stack),
|
||||
scene_node.getName()))
|
||||
|
||||
@pyqtProperty(list, constant=True)
|
||||
def settingsGroups(self) -> List[SettingsExportGroup]:
|
||||
@ -107,8 +111,10 @@ class SettingsExportModel(QObject):
|
||||
def _exportSettings(settings_stack):
|
||||
user_settings_container = settings_stack.userChanges
|
||||
user_keys = user_settings_container.getAllKeys()
|
||||
|
||||
exportable_settings = SettingsExportModel.EXPORTABLE_SETTINGS
|
||||
settings_export = []
|
||||
# Check whether any of the user keys exist in PER_MODEL_EXPORTABLE_SETTINGS_KEYS
|
||||
is_exportable = any(key in SettingsExportModel.PER_MODEL_EXPORTABLE_SETTINGS_KEYS for key in user_keys)
|
||||
|
||||
for setting_to_export in user_keys:
|
||||
label = settings_stack.getProperty(setting_to_export, "label")
|
||||
@ -117,7 +123,6 @@ class SettingsExportModel(QObject):
|
||||
|
||||
setting_type = settings_stack.getProperty(setting_to_export, "type")
|
||||
if setting_type is not None:
|
||||
# This is not very good looking, but will do for now
|
||||
value = f"{str(SettingDefinition.settingValueToString(setting_type, value))} {unit}"
|
||||
else:
|
||||
value = str(value)
|
||||
@ -125,6 +130,6 @@ class SettingsExportModel(QObject):
|
||||
settings_export.append(SettingExport(setting_to_export,
|
||||
label,
|
||||
value,
|
||||
setting_to_export in SettingsExportModel.EXPORTABLE_SETTINGS))
|
||||
is_exportable or setting_to_export in exportable_settings))
|
||||
|
||||
return settings_export
|
||||
|
@ -462,40 +462,5 @@ class ThreeMFWriter(MeshWriter):
|
||||
return extra_settings
|
||||
|
||||
def exportUcp(self):
|
||||
preferences = CuraApplication.getInstance().getPreferences()
|
||||
if preferences.getValue("cura/dialog_on_ucp_project_save"):
|
||||
self._config_dialog = UCPDialog()
|
||||
self._config_dialog.show()
|
||||
else:
|
||||
application = CuraApplication.getInstance()
|
||||
workspace_handler = application.getInstance().getWorkspaceFileHandler()
|
||||
|
||||
# Set the model to the workspace writer
|
||||
mesh_writer = workspace_handler.getWriter("3MFWriter")
|
||||
mesh_writer.setExportModel(SettingsExportModel())
|
||||
|
||||
# Open file dialog and write the file
|
||||
device = application.getOutputDeviceManager().getOutputDevice("local_file")
|
||||
nodes = [application.getController().getScene().getRoot()]
|
||||
|
||||
file_name = CuraApplication.getInstance().getPrintInformation().baseName
|
||||
|
||||
try:
|
||||
device.requestWrite(
|
||||
nodes,
|
||||
file_name,
|
||||
["application/vnd.ms-package.3dmanufacturing-3dmodel+xml"],
|
||||
workspace_handler,
|
||||
preferred_mimetype_list="application/vnd.ms-package.3dmanufacturing-3dmodel+xml"
|
||||
)
|
||||
except OutputDeviceError.UserCanceledError:
|
||||
self._onRejected()
|
||||
except Exception as e:
|
||||
message = Message(
|
||||
catalog.i18nc("@info:error", "Unable to write to file: {0}", file_name),
|
||||
title=catalog.i18nc("@info:title", "Error"),
|
||||
message_type=Message.MessageType.ERROR
|
||||
)
|
||||
message.show()
|
||||
Logger.logException("e", "Unable to write to file %s: %s", file_name, e)
|
||||
self._onRejected()
|
||||
self._config_dialog = UCPDialog()
|
||||
self._config_dialog.show()
|
||||
|
@ -19,21 +19,6 @@ UM.Dialog
|
||||
minimumHeight: UM.Theme.getSize("modal_window_minimum").height
|
||||
|
||||
backgroundColor: UM.Theme.getColor("detail_background")
|
||||
property bool dontShowAgain: false
|
||||
|
||||
function storeDontShowAgain()
|
||||
{
|
||||
UM.Preferences.setValue("cura/dialog_on_ucp_project_save", !dontShowAgainCheckbox.checked)
|
||||
UM.Preferences.setValue("cura/asked_dialog_on_ucp_project_save", false)
|
||||
}
|
||||
|
||||
onVisibleChanged:
|
||||
{
|
||||
if(visible && UM.Preferences.getValue("cura/asked_dialog_on_ucp_project_save"))
|
||||
{
|
||||
dontShowAgain = !UM.Preferences.getValue("cura/dialog_on_ucp_project_save")
|
||||
}
|
||||
}
|
||||
|
||||
headerComponent: Rectangle
|
||||
{
|
||||
@ -90,15 +75,7 @@ UM.Dialog
|
||||
delegate: SettingsSelectionGroup { Layout.margins: 0 }
|
||||
}
|
||||
}
|
||||
leftButtons:
|
||||
[
|
||||
UM.CheckBox
|
||||
{
|
||||
id: dontShowAgainCheckbox
|
||||
text: catalog.i18nc("@action:label", "Don't show project summary on save again")
|
||||
checked: dontShowAgain
|
||||
}
|
||||
]
|
||||
|
||||
rightButtons:
|
||||
[
|
||||
Cura.TertiaryButton
|
||||
@ -117,9 +94,6 @@ UM.Dialog
|
||||
|
||||
onClosing:
|
||||
{
|
||||
storeDontShowAgain()
|
||||
manager.notifyClosed()
|
||||
}
|
||||
onRejected: storeDontShowAgain()
|
||||
onAccepted: storeDontShowAgain()
|
||||
}
|
||||
|
@ -9,6 +9,7 @@
|
||||
# When setting an accel limit on multi-extruder printers ALL extruders are effected.
|
||||
# This post does not distinguish between Print Accel and Travel Accel. The limit is the limit for all regardless. Example: Skin Accel = 1000 and Outer Wall accel = 500. If the limit is set to 300 then both Skin and Outer Wall will be Accel = 300.
|
||||
# 9/15/2023 added support for RepRap M566 command for Jerk in mm/min
|
||||
# 2/4/2024 Added a block so the script doesn't run unless Accel Control is enabled in Cura. This should keep users from increasing the Accel Limits.
|
||||
|
||||
from ..Script import Script
|
||||
from cura.CuraApplication import CuraApplication
|
||||
@ -46,6 +47,10 @@ class LimitXYAccelJerk(Script):
|
||||
if ext_count > 1:
|
||||
Message(text = "<NOTICE> 'Limit the X-Y Accel/Jerk': The post processor treats all extruders the same. If you have multiple extruders they will all be subject to the same Accel and Jerk limits imposed. If you have different Travel and Print Accel they will also be subject to the same limits. If that is not acceptable then you should not use this Post Processor.").show()
|
||||
|
||||
# Warn the user if Accel Control is not enabled in Cura. This keeps the script from being able to increase the Accel limits-----------
|
||||
if not bool(extruder[0].getProperty("acceleration_enabled", "value")):
|
||||
Message(title = "[Limit the X-Y Accel/Jerk]", text = "You must have 'Enable Acceleration Control' checked in Cura or the script will exit.").show()
|
||||
|
||||
def getSettingDataString(self):
|
||||
return """{
|
||||
"name": "Limit the X-Y Accel/Jerk (all extruders equal)",
|
||||
@ -169,6 +174,13 @@ class LimitXYAccelJerk(Script):
|
||||
extruder = mycura.extruderList
|
||||
machine_name = str(mycura.getProperty("machine_name", "value"))
|
||||
print_sequence = str(mycura.getProperty("print_sequence", "value"))
|
||||
acceleration_enabled = bool(extruder[0].getProperty("acceleration_enabled", "value"))
|
||||
|
||||
# Exit if acceleration control is not enabled----------------
|
||||
if not acceleration_enabled:
|
||||
Message(title = "[Limit the X-Y Accel/Jerk]", text = "DID NOT RUN. You must have 'Enable Acceleration Control' checked in Cura.").show()
|
||||
data[0] += "; [LimitXYAccelJerk] DID NOT RUN because 'Enable Acceleration Control' is not checked in Cura.\n"
|
||||
return data
|
||||
|
||||
# Exit if 'one_at_a_time' is enabled-------------------------
|
||||
if print_sequence == "one_at_a_time":
|
||||
@ -183,12 +195,8 @@ class LimitXYAccelJerk(Script):
|
||||
return data
|
||||
|
||||
type_of_change = str(self.getSettingValueByKey("type_of_change"))
|
||||
accel_print_enabled = bool(extruder[0].getProperty("acceleration_enabled", "value"))
|
||||
accel_travel_enabled = bool(extruder[0].getProperty("acceleration_travel_enabled", "value"))
|
||||
accel_print = extruder[0].getProperty("acceleration_print", "value")
|
||||
accel_travel = extruder[0].getProperty("acceleration_travel", "value")
|
||||
jerk_print_enabled = str(extruder[0].getProperty("jerk_enabled", "value"))
|
||||
jerk_travel_enabled = str(extruder[0].getProperty("jerk_travel_enabled", "value"))
|
||||
jerk_print_old = extruder[0].getProperty("jerk_print", "value")
|
||||
jerk_travel_old = extruder[0].getProperty("jerk_travel", "value")
|
||||
if int(accel_print) >= int(accel_travel):
|
||||
|
@ -12,15 +12,6 @@
|
||||
{
|
||||
"gantry_height": { "value": 25 },
|
||||
"machine_depth": { "default_value": 230 },
|
||||
"machine_head_polygon":
|
||||
{
|
||||
"default_value": [
|
||||
[-1, 1],
|
||||
[-1, -1],
|
||||
[1, -1],
|
||||
[1, 1]
|
||||
]
|
||||
},
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"default_value": [
|
||||
|
32
resources/definitions/dagoma_sigma_pro.def.json
Normal file
32
resources/definitions/dagoma_sigma_pro.def.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Dagoma Sigma Pro 500Z",
|
||||
"inherits": "dagoma_delta",
|
||||
"metadata":
|
||||
{
|
||||
"visible": true,
|
||||
"author": "Dagoma",
|
||||
"manufacturer": "Dagoma",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform": "dagoma_sigma_pro.obj",
|
||||
"first_start_actions": [ "MachineSettingsAction" ],
|
||||
"has_machine_quality": true,
|
||||
"has_variants": true,
|
||||
"machine_extruder_trains": { "0": "dagoma_sigma_pro_extruder" },
|
||||
"platform_texture": "dagoma_sigma_pro.png",
|
||||
"preferred_quality_type": "h0.2",
|
||||
"preferred_variant_name": "Brass 0.4mm",
|
||||
"quality_definition": "dagoma_sigma_pro",
|
||||
"variants_name": "Nozzle"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 200 },
|
||||
"machine_end_gcode": { "default_value": ";End Gcode for {machine_name}\n;Author: Dagoma\nM104 S0\nM107 ;stop fan\nM140 S0 ;heated bed heater off (if you have it)\nG92 E0\nG1 E-55 F4600\nG27\nG90 ; Absolute positioning\nT0" },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_height": { "default_value": 501 },
|
||||
"machine_name": { "default_value": "Dagoma Sigma Pro 500Z" },
|
||||
"machine_start_gcode": { "default_value": ";Start Gcode for {machine_name}\n;Author: Dagoma\n;Sliced: {date} {time}\n;Estimated print time: {print_time}\n;Print speed: {speed_print}mm/s\n;Layer height: {layer_height}mm\n;Wall thickness: {wall_thickness}mm\n;Infill density: {infill_sparse_density}%\n;Infill pattern: {infill_pattern}\n;Support: {support_enable}\n;Print temperature: {material_print_temperature}\u00b0C\n;Flow: {material_flow}%\n;Retraction amount: {retraction_amount}mm\n;Retraction speed: {retraction_retract_speed}mm/s\nG90 ;absolute positioning\nM190 S{material_bed_temperature_layer_0};\nM109 S140;\nG1 F200 E-1.0\nM106 S255 ;Activating layers fans\nG28 ;Homing\nG29 ;Calibration\nM107 ;Off Ventilateur\nM109 S{material_print_temperature_layer_0} ;Temperature for the first layer only\nG92 E0 ;Zero the extruded length again\nG1 X0 Y-105 Z1 F3000\nG1 F{speed_travel}\nM117 Printing...\n" },
|
||||
"machine_width": { "default_value": 200 }
|
||||
}
|
||||
}
|
37
resources/definitions/dagoma_sigma_pro_dual.def.json
Normal file
37
resources/definitions/dagoma_sigma_pro_dual.def.json
Normal file
@ -0,0 +1,37 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Dagoma Sigma Pro 500Z Dual",
|
||||
"inherits": "dagoma_delta",
|
||||
"metadata":
|
||||
{
|
||||
"visible": true,
|
||||
"author": "Dagoma",
|
||||
"manufacturer": "Dagoma",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform": "dagoma_sigma_pro.obj",
|
||||
"first_start_actions": [ "MachineSettingsAction" ],
|
||||
"has_machine_quality": true,
|
||||
"has_variants": true,
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
"0": "dagoma_sigma_pro_dual_extruder_right",
|
||||
"1": "dagoma_sigma_pro_dual_extruder_left"
|
||||
},
|
||||
"platform_texture": "dagoma_sigma_pro.png",
|
||||
"preferred_quality_type": "h0.2",
|
||||
"preferred_variant_name": "Brass 0.4mm",
|
||||
"quality_definition": "dagoma_sigma_pro_dual",
|
||||
"variants_name": "Nozzle"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 200 },
|
||||
"machine_end_gcode": { "default_value": ";End Gcode for {machine_name}\n;Author: Dagoma\nM104 S0\nM107 ;stop fan\nM140 S0 ;heated bed heater off (if you have it)\nG92 E0\nG1 E-55 F4600\nG27\nG90 ; Absolute positioning\nT0" },
|
||||
"machine_extruder_count": { "default_value": 2 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_height": { "default_value": 501 },
|
||||
"machine_name": { "default_value": "Dagoma Sigma Pro 500Z Dual" },
|
||||
"machine_start_gcode": { "default_value": ";Start Gcode for {machine_name}\n;Author: Dagoma\n;Sliced: {date} {time}\n;Estimated print time: {print_time}\n;Print speed: {speed_print}mm/s\n;Layer height: {layer_height}mm\n;Wall thickness: {wall_thickness}mm\n;Infill density: {infill_sparse_density}%\n;Infill pattern: {infill_pattern}\n;Support: {support_enable}\n;Print temperature: {material_print_temperature}\u00b0C\n;Flow: {material_flow}%\n;Retraction amount: {retraction_amount}mm\n;Retraction speed: {retraction_retract_speed}mm/s\nG90 ;absolute positioning\nM190 S{material_bed_temperature_layer_0};\nM109 S140;\nG1 F200 E-1.0\nM106 S255 ;Activating layers fans\nG28 ;Homing\nG29 ;Calibration\nM107 ;Off Ventilateur\nM109 S{material_print_temperature_layer_0} ;Temperature for the first layer only\nG92 E0 ;Zero the extruded length again\nG1 X0 Y-105 Z1 F3000\nG1 F{speed_travel}\nM117 Printing...\n" },
|
||||
"machine_width": { "default_value": 200 }
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Left Extruder",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata":
|
||||
{
|
||||
"machine": "dagoma_sigma_pro_dual",
|
||||
"position": "1"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"extruder_nr": { "default_value": 1 },
|
||||
"machine_extruder_end_code": { "default_value": ";END T1\nG92 E0\nM83\nG1 E-55 F4700\nM82\nG92 E0\n" },
|
||||
"machine_extruder_start_code": { "default_value": ";START T1\n;No temperature change\nG1 X0 Y77.5 F8000\nG92 E0\nM83\nG1 E50 F1200\nM82\nG92 E0\n" },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Right Extruder",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata":
|
||||
{
|
||||
"machine": "dagoma_sigma_pro_dual",
|
||||
"position": "0"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_extruder_end_code": { "default_value": ";END T0\nG92 E0\nM83\nG1 E-55 F4700\nM82\nG92 E0\n" },
|
||||
"machine_extruder_start_code": { "default_value": ";START T0\n;No temperature change\nG1 X0 Y77.5 F8000\nG92 E0\nM83\nG1 E50 F1200\nM82\nG92 E0\n" },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
18
resources/extruders/dagoma_sigma_pro_extruder.def.json
Normal file
18
resources/extruders/dagoma_sigma_pro_extruder.def.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata":
|
||||
{
|
||||
"machine": "dagoma_sigma_pro",
|
||||
"position": "0"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_extruder_end_code": { "default_value": ";END T0\nG92 E0\nM83\nG1 E-55 F4700\nM82\nG92 E0\n" },
|
||||
"machine_extruder_start_code": { "default_value": ";START T0\n;No temperature change\nG1 X0 Y77.5 F8000\nG92 E0\nM83\nG1 E50 F1200\nM82\nG92 E0\n" },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
BIN
resources/images/dagoma_sigma_pro.png
Normal file
BIN
resources/images/dagoma_sigma_pro.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 111 KiB |
8456
resources/meshes/dagoma_sigma_pro.obj
Normal file
8456
resources/meshes/dagoma_sigma_pro.obj
Normal file
File diff suppressed because it is too large
Load Diff
@ -701,24 +701,33 @@ UM.MainWindow
|
||||
|
||||
if (hasProjectFile)
|
||||
{
|
||||
var projectFile = projectFileUrlList[0];
|
||||
|
||||
// check preference
|
||||
var choice = UM.Preferences.getValue("cura/choice_on_open_project");
|
||||
if (choice == "open_as_project")
|
||||
var projectFile = projectFileUrlList[0]
|
||||
var is_ucp = CuraApplication.isProjectUcp(projectFile);
|
||||
if (is_ucp)
|
||||
{
|
||||
openFilesIncludingProjectsDialog.loadProjectFile(projectFile);
|
||||
askOpenAsProjectOrUcpOrImportModelsDialog.fileUrl = projectFile;
|
||||
askOpenAsProjectOrUcpOrImportModelsDialog.addToRecent = true;
|
||||
askOpenAsProjectOrUcpOrImportModelsDialog.show();
|
||||
}
|
||||
else if (choice == "open_as_model")
|
||||
else
|
||||
{
|
||||
openFilesIncludingProjectsDialog.loadModelFiles([projectFile].slice());
|
||||
}
|
||||
else // always ask
|
||||
{
|
||||
// ask whether to open as project or as models
|
||||
askOpenAsProjectOrModelsDialog.fileUrl = projectFile;
|
||||
askOpenAsProjectOrModelsDialog.addToRecent = true;
|
||||
askOpenAsProjectOrModelsDialog.show();
|
||||
// check preference
|
||||
var choice = UM.Preferences.getValue("cura/choice_on_open_project");
|
||||
if (choice == "open_as_project")
|
||||
{
|
||||
openFilesIncludingProjectsDialog.loadProjectFile(projectFile);
|
||||
}
|
||||
else if (choice == "open_as_model")
|
||||
{
|
||||
openFilesIncludingProjectsDialog.loadModelFiles([projectFile].slice());
|
||||
}
|
||||
else // always ask
|
||||
{
|
||||
// ask whether to open as project or as models
|
||||
askOpenAsProjectOrModelsDialog.fileUrl = projectFile;
|
||||
askOpenAsProjectOrModelsDialog.addToRecent = true;
|
||||
askOpenAsProjectOrModelsDialog.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -769,14 +778,30 @@ UM.MainWindow
|
||||
id: askOpenAsProjectOrModelsDialog
|
||||
}
|
||||
|
||||
AskOpenAsProjectOrUcpOrImportModel
|
||||
{
|
||||
id: askOpenAsProjectOrUcpOrImportModelsDialog
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: CuraApplication
|
||||
function onOpenProjectFile(project_file, add_to_recent_files)
|
||||
{
|
||||
askOpenAsProjectOrModelsDialog.fileUrl = project_file;
|
||||
askOpenAsProjectOrModelsDialog.addToRecent = add_to_recent_files;
|
||||
askOpenAsProjectOrModelsDialog.show();
|
||||
var is_ucp = CuraApplication.isProjectUcp(project_file);
|
||||
if (is_ucp)
|
||||
{
|
||||
|
||||
askOpenAsProjectOrUcpOrImportModelsDialog.fileUrl = project_file;
|
||||
askOpenAsProjectOrUcpOrImportModelsDialog.addToRecent = add_to_recent_files;
|
||||
askOpenAsProjectOrUcpOrImportModelsDialog.show();
|
||||
}
|
||||
else
|
||||
{
|
||||
askOpenAsProjectOrModelsDialog.fileUrl = project_file;
|
||||
askOpenAsProjectOrModelsDialog.addToRecent = add_to_recent_files;
|
||||
askOpenAsProjectOrModelsDialog.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
91
resources/qml/Dialogs/AskOpenAsProjectOrUcpOrImportModel.qml
Normal file
91
resources/qml/Dialogs/AskOpenAsProjectOrUcpOrImportModel.qml
Normal file
@ -0,0 +1,91 @@
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
|
||||
UM.Dialog
|
||||
{
|
||||
// This dialog asks the user whether he/she wants to open a project file as a project or import models.
|
||||
id: base
|
||||
|
||||
title: catalog.i18nc("@title:window", "Open Universal Cura Project (UCP) file")
|
||||
width: UM.Theme.getSize("small_popup_dialog").width
|
||||
height: UM.Theme.getSize("small_popup_dialog").height
|
||||
backgroundColor: UM.Theme.getColor("main_background")
|
||||
|
||||
maximumHeight: height
|
||||
maximumWidth: width
|
||||
minimumHeight: maximumHeight
|
||||
minimumWidth: maximumWidth
|
||||
|
||||
modality: Qt.WindowModal
|
||||
|
||||
property var fileUrl
|
||||
property var addToRecent: true //Whether to add this file to the recent files list after reading it.
|
||||
|
||||
|
||||
// load the project file as separated models
|
||||
function loadModelFiles() {
|
||||
CuraApplication.readLocalFile(base.fileUrl, "open_as_model", base.addToRecent)
|
||||
|
||||
base.hide()
|
||||
}
|
||||
|
||||
// load the project file as Universal cura project
|
||||
function loadUcpFiles() {
|
||||
CuraApplication.readLocalUcpFile(base.fileUrl, base.addToRecent)
|
||||
|
||||
base.hide()
|
||||
}
|
||||
|
||||
// override UM.Dialog accept
|
||||
function accept () {
|
||||
|
||||
// when hitting 'enter', we always open as project unless open_as_model was explicitly stored as preference
|
||||
if (openAsPreference == "open_as_model") {
|
||||
loadModelFiles()
|
||||
} else{
|
||||
loadUcpFiles()
|
||||
}
|
||||
}
|
||||
|
||||
Column
|
||||
{
|
||||
anchors.fill: parent
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
id: questionText
|
||||
width: parent.width
|
||||
text: catalog.i18nc("@text:window", "This is a Cura Universal project file. Would you like to open it as a Cura project or Cura Universal Project or import the models from it?")
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
|
||||
onAccepted: loadUcpFile()
|
||||
onRejected: loadModelFiles()
|
||||
|
||||
buttonSpacing: UM.Theme.getSize("thin_margin").width
|
||||
|
||||
rightButtons:
|
||||
[
|
||||
Cura.PrimaryButton
|
||||
{
|
||||
text: catalog.i18nc("@action:button", "Open as UCP")
|
||||
iconSource: UM.Theme.getIcon("CuraShareIcon")
|
||||
onClicked: loadUcpFiles()
|
||||
},
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
text: catalog.i18nc("@action:button", "Import models")
|
||||
onClicked: loadModelFiles()
|
||||
}
|
||||
]
|
||||
}
|
@ -784,20 +784,6 @@ UM.PreferencesPage
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea
|
||||
{
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a UCP project file?")
|
||||
|
||||
UM.CheckBox
|
||||
{
|
||||
text: catalog.i18nc("@option:check", "Show summary dialog when saving a UCP project")
|
||||
checked: boolCheck(UM.Preferences.getValue("cura/dialog_on_ucp_project_save"))
|
||||
onCheckedChanged: UM.Preferences.setValue("cura/dialog_on_ucp_project_save", checked)
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea
|
||||
{
|
||||
width: childrenRect.width
|
||||
|
@ -132,8 +132,6 @@ ScrollView
|
||||
key: "material_bed_temperature"
|
||||
watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"]
|
||||
storeIndex: 0
|
||||
|
||||
property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None"
|
||||
}
|
||||
|
||||
UM.SettingPropertyProvider
|
||||
|
@ -25,8 +25,6 @@ Item
|
||||
key: "material_print_temperature"
|
||||
watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"]
|
||||
storeIndex: 0
|
||||
|
||||
property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None"
|
||||
}
|
||||
|
||||
Rectangle
|
||||
|
@ -199,17 +199,7 @@ Item
|
||||
{
|
||||
return "";
|
||||
}
|
||||
if ((bedTemperature.resolve != "None" && bedTemperature.resolve) && (bedTemperature.stackLevels[0] != 0) && (bedTemperature.stackLevels[0] != 1))
|
||||
{
|
||||
// We have a resolve function. Indicates that the setting is not settable per extruder and that
|
||||
// we have to choose between the resolved value (default) and the global value
|
||||
// (if user has explicitly set this).
|
||||
return bedTemperature.resolve;
|
||||
}
|
||||
else
|
||||
{
|
||||
return bedTemperature.properties.value;
|
||||
}
|
||||
return bedTemperature.properties.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,74 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Fine
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.1
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
adhesion_type = brim
|
||||
bridge_settings_enabled = True
|
||||
brim_width = 2
|
||||
coasting_enable = True
|
||||
coasting_volume = 0.06
|
||||
cool_fan_full_layer = 5
|
||||
cool_min_layer_time = 7
|
||||
cool_min_temperature = 195
|
||||
infill_material_flow = 105
|
||||
infill_sparse_density = 15
|
||||
material_final_print_temperature = 196
|
||||
material_flow_layer_0 = 100
|
||||
material_initial_print_temperature = 196
|
||||
material_print_temperature = 196
|
||||
material_print_temperature_layer_0 = 196
|
||||
material_standby_temperature = 195
|
||||
ooze_shield_enabled = False
|
||||
prime_tower_brim_enable = True
|
||||
prime_tower_enable = True
|
||||
prime_tower_min_volume = 44
|
||||
prime_tower_size = 25
|
||||
prime_tower_wipe_enabled = False
|
||||
retraction_amount = 3.0
|
||||
retraction_combing = infill
|
||||
retraction_hop = 0.4
|
||||
retraction_hop_after_extruder_switch_height = 0
|
||||
retraction_hop_enabled = True
|
||||
retraction_prime_speed = 45
|
||||
retraction_retract_speed = 60
|
||||
retraction_speed = 80
|
||||
smooth_spiralized_contours = False
|
||||
speed_infill = 80
|
||||
speed_layer_0 = 22
|
||||
speed_prime_tower = 70
|
||||
speed_print = 35
|
||||
speed_slowdown_layers = 3
|
||||
speed_topbottom = 35
|
||||
speed_travel = 180
|
||||
speed_travel_layer_0 = 70
|
||||
speed_wall_0 = 25
|
||||
speed_wall_x = 35.0
|
||||
speed_z_hop = 120
|
||||
support_enable = False
|
||||
support_structure = tree
|
||||
support_tree_angle = 55
|
||||
support_tree_top_rate = =30 if support_roof_enable else 10
|
||||
switch_extruder_extra_prime_amount = 0
|
||||
switch_extruder_prime_speed = 20
|
||||
switch_extruder_retraction_amount = 80
|
||||
switch_extruder_retraction_speed = =switch_extruder_retraction_speeds
|
||||
switch_extruder_retraction_speeds = 80
|
||||
travel_avoid_distance = 2.0
|
||||
travel_avoid_other_parts = False
|
||||
travel_avoid_supports = True
|
||||
wall_0_material_flow = =wall_material_flow
|
||||
wall_0_material_flow_layer_0 = 85
|
||||
wall_thickness = 0.8
|
||||
wall_transition_length = 0.4
|
||||
wall_x_material_flow_layer_0 = 90
|
||||
|
@ -0,0 +1,74 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
adhesion_type = brim
|
||||
bridge_settings_enabled = True
|
||||
brim_width = 2
|
||||
coasting_enable = True
|
||||
coasting_volume = 0.06
|
||||
cool_fan_full_layer = 5
|
||||
cool_min_layer_time = 7
|
||||
cool_min_temperature = 195
|
||||
infill_material_flow = 105
|
||||
infill_sparse_density = 15
|
||||
material_final_print_temperature = 200
|
||||
material_flow_layer_0 = 100
|
||||
material_initial_print_temperature = 200
|
||||
material_print_temperature = 200
|
||||
material_print_temperature_layer_0 = 200
|
||||
material_standby_temperature = 195
|
||||
ooze_shield_enabled = False
|
||||
prime_tower_brim_enable = True
|
||||
prime_tower_enable = True
|
||||
prime_tower_min_volume = 44
|
||||
prime_tower_size = 25
|
||||
prime_tower_wipe_enabled = False
|
||||
retraction_amount = 3.0
|
||||
retraction_combing = infill
|
||||
retraction_hop = 0.4
|
||||
retraction_hop_after_extruder_switch_height = 0
|
||||
retraction_hop_enabled = True
|
||||
retraction_prime_speed = 45
|
||||
retraction_retract_speed = 60
|
||||
retraction_speed = 80
|
||||
smooth_spiralized_contours = False
|
||||
speed_infill = 80
|
||||
speed_layer_0 = 22
|
||||
speed_prime_tower = 70
|
||||
speed_print = 35
|
||||
speed_slowdown_layers = 3
|
||||
speed_topbottom = 35
|
||||
speed_travel = 180
|
||||
speed_travel_layer_0 = 70
|
||||
speed_wall_0 = 25
|
||||
speed_wall_x = 35.0
|
||||
speed_z_hop = 120
|
||||
support_enable = False
|
||||
support_structure = tree
|
||||
support_tree_angle = 55
|
||||
support_tree_top_rate = =30 if support_roof_enable else 10
|
||||
switch_extruder_extra_prime_amount = 0
|
||||
switch_extruder_prime_speed = 20
|
||||
switch_extruder_retraction_amount = 80
|
||||
switch_extruder_retraction_speed = =switch_extruder_retraction_speeds
|
||||
switch_extruder_retraction_speeds = 80
|
||||
travel_avoid_distance = 2.0
|
||||
travel_avoid_other_parts = False
|
||||
travel_avoid_supports = True
|
||||
wall_0_material_flow = =wall_material_flow
|
||||
wall_0_material_flow_layer_0 = 85
|
||||
wall_thickness = 1.2
|
||||
wall_transition_length = 0.4
|
||||
wall_x_material_flow_layer_0 = 90
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Draft
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.3
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.4
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Very Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.6
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,75 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Fine
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.1
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
adhesion_type = brim
|
||||
bridge_settings_enabled = True
|
||||
brim_width = 2
|
||||
coasting_enable = True
|
||||
coasting_volume = 0.1
|
||||
cool_fan_full_layer = 5
|
||||
cool_min_layer_time = 7
|
||||
cool_min_temperature = 195
|
||||
infill_material_flow = 105
|
||||
infill_sparse_density = 15
|
||||
material_final_print_temperature = 196
|
||||
material_flow_layer_0 = 100
|
||||
material_initial_print_temperature = 196
|
||||
material_print_temperature = 196
|
||||
material_print_temperature_layer_0 = 196
|
||||
material_standby_temperature = 196
|
||||
ooze_shield_enabled = False
|
||||
prime_tower_brim_enable = True
|
||||
prime_tower_enable = True
|
||||
prime_tower_min_volume = 24
|
||||
prime_tower_size = 25
|
||||
prime_tower_wipe_enabled = True
|
||||
retraction_amount = 10
|
||||
retraction_combing = infill
|
||||
retraction_extrusion_window = 10.0
|
||||
retraction_hop = 0.4
|
||||
retraction_hop_after_extruder_switch_height = 0
|
||||
retraction_hop_enabled = True
|
||||
retraction_prime_speed = 60
|
||||
retraction_retract_speed = 90
|
||||
retraction_speed = 80
|
||||
smooth_spiralized_contours = False
|
||||
speed_infill = 80
|
||||
speed_layer_0 = 22
|
||||
speed_prime_tower = 70
|
||||
speed_print = 35
|
||||
speed_slowdown_layers = 3
|
||||
speed_topbottom = 35
|
||||
speed_travel = 180
|
||||
speed_travel_layer_0 = 70
|
||||
speed_wall_0 = 25
|
||||
speed_wall_x = 35.0
|
||||
speed_z_hop = 120
|
||||
support_enable = False
|
||||
support_structure = tree
|
||||
support_tree_angle = 55
|
||||
support_tree_top_rate = =30 if support_roof_enable else 10
|
||||
switch_extruder_extra_prime_amount = 0
|
||||
switch_extruder_prime_speed = 20
|
||||
switch_extruder_retraction_amount = 0
|
||||
switch_extruder_retraction_speed = =switch_extruder_retraction_speeds
|
||||
switch_extruder_retraction_speeds = 75
|
||||
travel_avoid_distance = 2.0
|
||||
travel_avoid_other_parts = False
|
||||
travel_avoid_supports = True
|
||||
wall_0_material_flow = =wall_material_flow
|
||||
wall_0_material_flow_layer_0 = 85
|
||||
wall_thickness = 1.2
|
||||
wall_transition_length = 0.4
|
||||
wall_x_material_flow_layer_0 = 90
|
||||
|
@ -0,0 +1,75 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
adhesion_type = brim
|
||||
bridge_settings_enabled = True
|
||||
brim_width = 2
|
||||
coasting_enable = True
|
||||
coasting_volume = 0.1
|
||||
cool_fan_full_layer = 5
|
||||
cool_min_layer_time = 7
|
||||
cool_min_temperature = 195
|
||||
infill_material_flow = 105
|
||||
infill_sparse_density = 15
|
||||
material_final_print_temperature = 200
|
||||
material_flow_layer_0 = 100
|
||||
material_initial_print_temperature = 200
|
||||
material_print_temperature = 200
|
||||
material_print_temperature_layer_0 = =material_print_temperature
|
||||
material_standby_temperature = 200
|
||||
ooze_shield_enabled = False
|
||||
prime_tower_brim_enable = True
|
||||
prime_tower_enable = True
|
||||
prime_tower_min_volume = 44
|
||||
prime_tower_size = 25
|
||||
prime_tower_wipe_enabled = True
|
||||
retraction_amount = 10
|
||||
retraction_combing = infill
|
||||
retraction_extrusion_window = 10.0
|
||||
retraction_hop = 0.4
|
||||
retraction_hop_after_extruder_switch_height = 0
|
||||
retraction_hop_enabled = True
|
||||
retraction_prime_speed = 60
|
||||
retraction_retract_speed = 90
|
||||
retraction_speed = 80
|
||||
smooth_spiralized_contours = False
|
||||
speed_infill = 80
|
||||
speed_layer_0 = 22
|
||||
speed_prime_tower = 70
|
||||
speed_print = 35
|
||||
speed_slowdown_layers = 3
|
||||
speed_topbottom = 35
|
||||
speed_travel = 180
|
||||
speed_travel_layer_0 = 70
|
||||
speed_wall_0 = 25
|
||||
speed_wall_x = 35.0
|
||||
speed_z_hop = 120
|
||||
support_enable = False
|
||||
support_structure = tree
|
||||
support_tree_angle = 55
|
||||
support_tree_top_rate = =30 if support_roof_enable else 10
|
||||
switch_extruder_extra_prime_amount = 0
|
||||
switch_extruder_prime_speed = 20
|
||||
switch_extruder_retraction_amount = 0
|
||||
switch_extruder_retraction_speed = =switch_extruder_retraction_speeds
|
||||
switch_extruder_retraction_speeds = 75
|
||||
travel_avoid_distance = 2.0
|
||||
travel_avoid_other_parts = False
|
||||
travel_avoid_supports = True
|
||||
wall_0_material_flow = =wall_material_flow
|
||||
wall_0_material_flow_layer_0 = 85
|
||||
wall_thickness = 1.2
|
||||
wall_transition_length = 0.4
|
||||
wall_x_material_flow_layer_0 = 90
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Draft
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.3
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.4
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Very Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.6
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Brass 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Fine
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.1
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Draft
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.3
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.4
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Very Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.6
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.6
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Fine
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.1
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Draft
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.3
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.4
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Very Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.6
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Fine
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.1
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.1
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Draft
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.3
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.4
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
||||
|
@ -0,0 +1,16 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Very Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
material = generic_pla
|
||||
quality_type = h0.6
|
||||
setting_version = 22
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
layer_height = 0.6
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Fine
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.1
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Draft
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.3
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.4mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.2
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.4
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
@ -0,0 +1,15 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Very Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla
|
||||
quality_type = h0.6
|
||||
setting_version = 22
|
||||
type = quality
|
||||
variant = Steel 0.8mm
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
|
37
resources/themes/cura-light/icons/default/CuraShareIcon.svg
Normal file
37
resources/themes/cura-light/icons/default/CuraShareIcon.svg
Normal file
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50">
|
||||
<g clip-path="url(#clip0_8_4)">
|
||||
<g filter="url(#filter0_i_8_4)">
|
||||
<path d="M49.8789 38.1712L38.1712 49.8789H0.121338V11.829L11.829 0.121338H49.8789V38.1712Z" fill="#196EF0"/>
|
||||
</g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M47.5728 37.2299V2.42718H12.7701L2.42718 12.7701V47.5728H37.2299L47.5728 37.2299ZM38.2353 50L50 38.2353V0H11.7647L0 11.7647V50H38.2353Z" fill="#FAFAFA"/>
|
||||
<g filter="url(#filter1_d_8_4)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M29.9757 15.2913C29.9757 14.487 30.6277 13.835 31.432 13.835C32.2363 13.835 32.8884 14.487 32.8884 15.2913C32.8884 16.0956 32.2363 16.7476 31.432 16.7476C30.6277 16.7476 29.9757 16.0956 29.9757 15.2913ZM26.6696 17.1117H25.8589C23.5685 17.1117 21.3926 17.9683 19.8051 19.4611C19.3329 19.9051 18.9246 20.3941 18.584 20.9158C19.8267 21.8454 20.6311 23.3288 20.6311 25C20.6311 26.6713 19.8267 28.1547 18.584 29.0843C18.9246 29.606 19.3329 30.0949 19.8051 30.539C21.3926 32.0318 23.5685 32.8884 25.8589 32.8884H26.6696C27.4025 30.9723 29.2584 29.6117 31.432 29.6117C34.2471 29.6117 36.5291 31.8937 36.5291 34.7088C36.5291 37.5238 34.2471 39.8059 31.432 39.8059C29.2584 39.8059 27.4025 38.4452 26.6696 36.5292H25.8589C22.6727 36.5292 19.5961 35.34 17.3111 33.1913C16.3376 32.276 15.5411 31.2174 14.9472 30.0637C12.4085 29.7727 10.4369 27.6166 10.4369 25C10.4369 22.3834 12.4085 20.2273 14.9472 19.9364C15.5411 18.7827 16.3376 17.7241 17.3111 16.8087C19.5961 14.66 22.6727 13.4709 25.8589 13.4709H26.6696C27.4025 11.5549 29.2584 10.1942 31.432 10.1942C34.2471 10.1942 36.5291 12.4763 36.5291 15.2913C36.5291 18.1063 34.2471 20.3884 31.432 20.3884C29.2584 20.3884 27.4025 19.0277 26.6696 17.1117ZM31.432 33.2525C30.6277 33.2525 29.9757 33.9045 29.9757 34.7088C29.9757 35.5131 30.6277 36.1651 31.432 36.1651C32.2363 36.1651 32.8884 35.5131 32.8884 34.7088C32.8884 33.9045 32.2363 33.2525 31.432 33.2525ZM14.0777 25C14.0777 24.1957 14.7297 23.5437 15.534 23.5437C16.3383 23.5437 16.9903 24.1957 16.9903 25C16.9903 25.8043 16.3383 26.4564 15.534 26.4564C14.7297 26.4564 14.0777 25.8043 14.0777 25Z" fill="#FAFAFA"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_i_8_4" x="0.121338" y="0.121338" width="49.7576" height="49.7576" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="6"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"/>
|
||||
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_8_4"/>
|
||||
</filter>
|
||||
<filter id="filter1_d_8_4" x="5.43689" y="5.19421" width="36.0923" height="39.6117" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="2.5"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_8_4"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_8_4" result="shape"/>
|
||||
</filter>
|
||||
<clipPath id="clip0_8_4">
|
||||
<rect width="50" height="50" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 3.6 KiB |
@ -0,0 +1,14 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Brass 0.4mm
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_id = Brass 0.4mm
|
||||
machine_nozzle_size = 0.4
|
||||
|
@ -0,0 +1,14 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Brass 0.8mm
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_id = Brass 0.8mm
|
||||
machine_nozzle_size = 0.8
|
||||
|
@ -0,0 +1,14 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Brass 0.4mm
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_id = Brass 0.4mm
|
||||
machine_nozzle_size = 0.4
|
||||
|
@ -0,0 +1,14 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Brass 0.8mm
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_id = Brass 0.8mm
|
||||
machine_nozzle_size = 0.8
|
||||
|
@ -0,0 +1,14 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Steel 0.4mm
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_id = Steel 0.4mm
|
||||
machine_nozzle_size = 0.4
|
||||
|
@ -0,0 +1,14 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro_dual
|
||||
name = Steel 0.8mm
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_id = Steel 0.8mm
|
||||
machine_nozzle_size = 0.8
|
||||
|
@ -0,0 +1,14 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Steel 0.4mm
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_id = Steel 0.4mm
|
||||
machine_nozzle_size = 0.4
|
||||
|
@ -0,0 +1,14 @@
|
||||
[general]
|
||||
definition = dagoma_sigma_pro
|
||||
name = Steel 0.8mm
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_id = Steel 0.8mm
|
||||
machine_nozzle_size = 0.8
|
||||
|
Loading…
x
Reference in New Issue
Block a user