mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-15 13:35:56 +08:00
Merge branch 'CURA-7376_full_of_spiders' into CURA-7555_Beading_strategy_user_control
This commit is contained in:
commit
c5fc26350b
@ -13,7 +13,7 @@ DEFAULT_CURA_DEBUG_MODE = False
|
||||
# Each release has a fixed SDK version coupled with it. It doesn't make sense to make it configurable because, for
|
||||
# example Cura 3.2 with SDK version 6.1 will not work. So the SDK version is hard-coded here and left out of the
|
||||
# CuraVersion.py.in template.
|
||||
CuraSDKVersion = "7.2.0"
|
||||
CuraSDKVersion = "7.3.0"
|
||||
|
||||
try:
|
||||
from cura.CuraVersion import CuraAppName # type: ignore
|
||||
|
@ -135,9 +135,7 @@ class MachineNode(ContainerNode):
|
||||
groups_by_name[name] = QualityChangesGroup(name, quality_type = quality_changes["quality_type"],
|
||||
intent_category = quality_changes.get("intent_category", "default"),
|
||||
parent = CuraApplication.getInstance())
|
||||
# CURA-6882
|
||||
# Custom qualities are always available, even if they are based on the "not supported" profile.
|
||||
groups_by_name[name].is_available = True
|
||||
|
||||
elif groups_by_name[name].intent_category == "default": # Intent category should be stored as "default" if everything is default or as the intent if any of the extruder have an actual intent.
|
||||
groups_by_name[name].intent_category = quality_changes.get("intent_category", "default")
|
||||
|
||||
@ -146,6 +144,18 @@ class MachineNode(ContainerNode):
|
||||
else: # Global profile.
|
||||
groups_by_name[name].metadata_for_global = quality_changes
|
||||
|
||||
quality_groups = self.getQualityGroups(variant_names, material_bases, extruder_enabled)
|
||||
for quality_changes_group in groups_by_name.values():
|
||||
if quality_changes_group.quality_type not in quality_groups:
|
||||
if quality_changes_group.quality_type == "not_supported":
|
||||
# Quality changes based on an empty profile are always available.
|
||||
quality_changes_group.is_available = True
|
||||
else:
|
||||
quality_changes_group.is_available = False
|
||||
else:
|
||||
# Quality changes group is available iff the quality group it depends on is available. Irrespective of whether the intent category is available.
|
||||
quality_changes_group.is_available = quality_groups[quality_changes_group.quality_type].is_available
|
||||
|
||||
return list(groups_by_name.values())
|
||||
|
||||
def preferredGlobalQuality(self) -> "QualityNode":
|
||||
|
@ -72,8 +72,8 @@ class GlobalStacksModel(ListModel):
|
||||
section_name = self._catalog.i18nc("@info:title", section_name)
|
||||
|
||||
default_removal_warning = self._catalog.i18nc(
|
||||
"@label ({} is object name)",
|
||||
"Are you sure you wish to remove {}? This cannot be undone!", device_name
|
||||
"@label {0} is the name of a printer that's about to be deleted.",
|
||||
"Are you sure you wish to remove {0}? This cannot be undone!", device_name
|
||||
)
|
||||
removal_warning = container_stack.getMetaDataEntry("removal_warning", default_removal_warning)
|
||||
|
||||
|
@ -333,6 +333,7 @@ class QualityManagementModel(ListModel):
|
||||
"layer_height": layer_height, # layer_height is only used for sorting
|
||||
}
|
||||
item_list.append(item)
|
||||
|
||||
# Sort by layer_height for built-in qualities
|
||||
item_list = sorted(item_list, key = lambda x: x["layer_height"])
|
||||
|
||||
@ -341,6 +342,9 @@ class QualityManagementModel(ListModel):
|
||||
available_intent_list = [i for i in available_intent_list if i[0] != "default"]
|
||||
result = []
|
||||
for intent_category, quality_type in available_intent_list:
|
||||
if not quality_group_dict[quality_type].is_available:
|
||||
continue
|
||||
|
||||
result.append({
|
||||
"name": quality_group_dict[quality_type].name, # Use the quality name as the display name
|
||||
"is_read_only": True,
|
||||
@ -361,6 +365,9 @@ class QualityManagementModel(ListModel):
|
||||
# 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
|
||||
|
||||
if not quality_changes_group.is_available:
|
||||
continue
|
||||
item = {"name": quality_changes_group.name,
|
||||
"is_read_only": False,
|
||||
"quality_group": quality_group,
|
||||
|
@ -1,14 +1,17 @@
|
||||
# Copyright (c) 2019 Ultimaker B.V.
|
||||
# Copyright (c) 2020 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, Qt
|
||||
from typing import Set
|
||||
|
||||
import cura.CuraApplication
|
||||
from UM import i18nCatalog
|
||||
from UM.Logger import Logger
|
||||
from UM.Qt.ListModel import ListModel
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
|
||||
import os
|
||||
|
||||
|
||||
class QualitySettingsModel(ListModel):
|
||||
"""This model is used to show details settings of the selected quality in the quality management page."""
|
||||
@ -81,6 +84,12 @@ class QualitySettingsModel(ListModel):
|
||||
global_container_stack = self._application.getGlobalContainerStack()
|
||||
definition_container = global_container_stack.definition
|
||||
|
||||
# Try and find a translation catalog for the definition
|
||||
for file_name in definition_container.getInheritedFiles():
|
||||
catalog = i18nCatalog(os.path.basename(file_name))
|
||||
if catalog.hasTranslationLoaded():
|
||||
self._i18n_catalog = catalog
|
||||
|
||||
quality_group = self._selected_quality_item["quality_group"]
|
||||
quality_changes_group = self._selected_quality_item["quality_changes_group"]
|
||||
|
||||
|
@ -45,7 +45,7 @@ class CuraContainerRegistry(ContainerRegistry):
|
||||
self.containerAdded.connect(self._onContainerAdded)
|
||||
|
||||
@override(ContainerRegistry)
|
||||
def addContainer(self, container: ContainerInterface) -> None:
|
||||
def addContainer(self, container: ContainerInterface) -> bool:
|
||||
"""Overridden from ContainerRegistry
|
||||
|
||||
Adds a container to the registry.
|
||||
@ -64,9 +64,9 @@ class CuraContainerRegistry(ContainerRegistry):
|
||||
actual_setting_version = int(container.getMetaDataEntry("setting_version", default = 0))
|
||||
if required_setting_version != actual_setting_version:
|
||||
Logger.log("w", "Instance container {container_id} is outdated. Its setting version is {actual_setting_version} but it should be {required_setting_version}.".format(container_id = container.getId(), actual_setting_version = actual_setting_version, required_setting_version = required_setting_version))
|
||||
return # Don't add.
|
||||
return False # Don't add.
|
||||
|
||||
super().addContainer(container)
|
||||
return super().addContainer(container)
|
||||
|
||||
def createUniqueName(self, container_type: str, current_name: str, new_name: str, fallback_name: str) -> str:
|
||||
"""Create a name that is not empty and unique
|
||||
@ -348,6 +348,34 @@ class CuraContainerRegistry(ContainerRegistry):
|
||||
self._registerSingleExtrusionMachinesExtruderStacks()
|
||||
self._connectUpgradedExtruderStacksToMachines()
|
||||
|
||||
@override(ContainerRegistry)
|
||||
def loadAllMetadata(self) -> None:
|
||||
super().loadAllMetadata()
|
||||
self._cleanUpInvalidQualityChanges()
|
||||
|
||||
def _cleanUpInvalidQualityChanges(self) -> None:
|
||||
# We've seen cases where it was possible for quality_changes to be incorrectly added. This is to ensure that
|
||||
# any such leftovers are purged from the registry.
|
||||
quality_changes = ContainerRegistry.getInstance().findContainersMetadata(type="quality_changes")
|
||||
|
||||
profile_count_by_name = {} # type: Dict[str, int]
|
||||
|
||||
for quality_change in quality_changes:
|
||||
name = str(quality_change.get("name", ""))
|
||||
if name == "empty":
|
||||
continue
|
||||
if name not in profile_count_by_name:
|
||||
profile_count_by_name[name] = 0
|
||||
profile_count_by_name[name] += 1
|
||||
|
||||
for profile_name, profile_count in profile_count_by_name.items():
|
||||
if profile_count > 1:
|
||||
continue
|
||||
# Only one profile found, this should not ever be the case, so that profile needs to be removed!
|
||||
Logger.log("d", "Found an invalid quality_changes profile with the name %s. Going to remove that now", profile_name)
|
||||
invalid_quality_changes = ContainerRegistry.getInstance().findContainersMetadata(name=profile_name)
|
||||
self.removeContainer(invalid_quality_changes[0]["id"])
|
||||
|
||||
@override(ContainerRegistry)
|
||||
def _isMetadataValid(self, metadata: Optional[Dict[str, Any]]) -> bool:
|
||||
"""Check if the metadata for a container is okay before adding it.
|
||||
@ -411,7 +439,8 @@ class CuraContainerRegistry(ContainerRegistry):
|
||||
if quality_type != empty_quality_container.getMetaDataEntry("quality_type") and quality_type not in quality_group_dict:
|
||||
return catalog.i18nc("@info:status", "Could not find a quality type {0} for the current configuration.", quality_type)
|
||||
|
||||
ContainerRegistry.getInstance().addContainer(profile)
|
||||
if not self.addContainer(profile):
|
||||
return catalog.i18nc("@info:status", "Unable to add the profile.")
|
||||
|
||||
return None
|
||||
|
||||
|
@ -62,7 +62,8 @@ class CuraStackBuilder:
|
||||
for position in extruder_dict:
|
||||
try:
|
||||
cls.createExtruderStackWithDefaultSetup(new_global_stack, position)
|
||||
except IndexError:
|
||||
except IndexError as e:
|
||||
Logger.logException("e", "Failed to create an extruder stack for position {pos}: {err}".format(pos = position, err = str(e)))
|
||||
return None
|
||||
|
||||
for new_extruder in new_global_stack.extruderList: # Only register the extruders if we're sure that all of them are correct.
|
||||
|
@ -5,7 +5,7 @@ from configparser import ConfigParser
|
||||
import zipfile
|
||||
import os
|
||||
import json
|
||||
from typing import cast, Dict, List, Optional, Tuple, Any
|
||||
from typing import cast, Dict, List, Optional, Tuple, Any, Set
|
||||
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
@ -41,6 +41,18 @@ from .WorkspaceDialog import WorkspaceDialog
|
||||
i18n_catalog = i18nCatalog("cura")
|
||||
|
||||
|
||||
_ignored_machine_network_metadata = {
|
||||
"um_cloud_cluster_id",
|
||||
"um_network_key",
|
||||
"um_linked_to_account",
|
||||
"host_guid",
|
||||
"removal_warning",
|
||||
"group_name",
|
||||
"group_size",
|
||||
"connection_type"
|
||||
} # type: Set[str]
|
||||
|
||||
|
||||
class ContainerInfo:
|
||||
def __init__(self, file_name: Optional[str], serialized: Optional[str], parser: Optional[ConfigParser]) -> None:
|
||||
self.file_name = file_name
|
||||
@ -121,12 +133,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
# In Cura 2.5 and 2.6, the empty profiles used to have those long names
|
||||
self._old_empty_profile_id_dict = {"empty_%s" % k: "empty" for k in ["material", "variant"]}
|
||||
|
||||
self._is_same_machine_type = False
|
||||
self._old_new_materials = {} # type: Dict[str, str]
|
||||
self._machine_info = None
|
||||
|
||||
def _clearState(self):
|
||||
self._is_same_machine_type = False
|
||||
self._id_mapping = {}
|
||||
self._old_new_materials = {}
|
||||
self._machine_info = None
|
||||
@ -217,6 +227,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
# Read definition containers
|
||||
#
|
||||
machine_definition_id = None
|
||||
updatable_machines = []
|
||||
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)]
|
||||
@ -233,6 +244,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
definition_container_type = definition_container.get("type")
|
||||
if definition_container_type == "machine":
|
||||
machine_definition_id = container_id
|
||||
machine_definition_containers = self._container_registry.findDefinitionContainers(id = machine_definition_id)
|
||||
if machine_definition_containers:
|
||||
updatable_machines = [machine for machine in self._container_registry.findContainerStacks(type = "machine") if machine.definition == machine_definition_containers[0]]
|
||||
machine_type = definition_container["name"]
|
||||
variant_type_name = definition_container.get("variants_name", variant_type_name)
|
||||
|
||||
@ -248,7 +262,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
if machine_definition_container_count != 1:
|
||||
return WorkspaceReader.PreReadResult.failed # Not a workspace file but ordinary 3MF.
|
||||
|
||||
material_labels = []
|
||||
material_ids_to_names_map = {}
|
||||
material_conflict = False
|
||||
xml_material_profile = self._getXmlProfileClass()
|
||||
reverse_material_id_dict = {}
|
||||
@ -264,7 +278,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
reverse_map = {metadata["id"]: container_id for metadata in metadata_list}
|
||||
reverse_material_id_dict.update(reverse_map)
|
||||
|
||||
material_labels.append(self._getMaterialLabelFromSerialized(serialized))
|
||||
material_ids_to_names_map[container_id] = self._getMaterialLabelFromSerialized(serialized)
|
||||
if self._container_registry.findContainersMetadata(id = container_id): #This material already exists.
|
||||
containers_found_dict["material"] = True
|
||||
if not self._container_registry.isReadOnly(container_id): # Only non readonly materials can be in conflict
|
||||
@ -374,8 +388,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
machine_definition_id = id_list[7]
|
||||
|
||||
stacks = self._container_registry.findContainerStacks(name = machine_name, type = "machine")
|
||||
self._is_same_machine_type = True
|
||||
existing_global_stack = None
|
||||
global_stack = None
|
||||
|
||||
if stacks:
|
||||
global_stack = stacks[0]
|
||||
@ -388,7 +402,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
if global_stack.getContainer(index).getId() != container_id:
|
||||
machine_conflict = True
|
||||
break
|
||||
self._is_same_machine_type = global_stack.definition.getId() == machine_definition_id
|
||||
|
||||
if updatable_machines and not containers_found_dict["machine"]:
|
||||
containers_found_dict["machine"] = True
|
||||
|
||||
# Get quality type
|
||||
parser = ConfigParser(interpolation = None)
|
||||
@ -431,6 +447,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
QCoreApplication.processEvents() # Ensure that the GUI does not freeze.
|
||||
Job.yieldThread()
|
||||
|
||||
materials_in_extruders_dict = {} # Which material is in which extruder
|
||||
|
||||
# if the global stack is found, we check if there are conflicts in the extruder stacks
|
||||
for extruder_stack_file in extruder_stack_files:
|
||||
serialized = archive.open(extruder_stack_file).read().decode("utf-8")
|
||||
@ -456,6 +474,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
if material_id not in ("empty", "empty_material"):
|
||||
root_material_id = reverse_material_id_dict[material_id]
|
||||
extruder_info.root_material_id = root_material_id
|
||||
materials_in_extruders_dict[position] = material_ids_to_names_map[reverse_material_id_dict[material_id]]
|
||||
|
||||
definition_changes_id = parser["containers"][str(_ContainerIndexes.DefinitionChanges)]
|
||||
if definition_changes_id not in ("empty", "empty_definition_changes"):
|
||||
@ -470,7 +489,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
if intent_id not in ("empty", "empty_intent"):
|
||||
extruder_info.intent_info = instance_container_info_dict[intent_id]
|
||||
|
||||
if not machine_conflict and containers_found_dict["machine"]:
|
||||
if not machine_conflict and containers_found_dict["machine"] and global_stack:
|
||||
if int(position) >= len(global_stack.extruderList):
|
||||
continue
|
||||
|
||||
@ -484,6 +503,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
machine_conflict = True
|
||||
break
|
||||
|
||||
# Now we know which material is in which extruder. Let's use that to sort the material_labels according to
|
||||
# their extruder position
|
||||
material_labels = [material_name for pos, material_name in sorted(materials_in_extruders_dict.items())]
|
||||
|
||||
num_visible_settings = 0
|
||||
try:
|
||||
temp_preferences = Preferences()
|
||||
@ -536,9 +559,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
self._machine_info.custom_quality_name = quality_name
|
||||
self._machine_info.intent_category = intent_category
|
||||
|
||||
if machine_conflict and not self._is_same_machine_type:
|
||||
machine_conflict = False
|
||||
|
||||
is_printer_group = False
|
||||
if machine_conflict:
|
||||
group_name = existing_global_stack.getMetaDataEntry("group_name")
|
||||
@ -559,6 +579,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
self._dialog.setNumSettingsOverriddenByQualityChanges(num_settings_overridden_by_quality_changes)
|
||||
self._dialog.setNumUserSettings(num_user_settings)
|
||||
self._dialog.setActiveMode(active_mode)
|
||||
self._dialog.setUpdatableMachines(updatable_machines)
|
||||
self._dialog.setMachineName(machine_name)
|
||||
self._dialog.setMaterialLabels(material_labels)
|
||||
self._dialog.setMachineType(machine_type)
|
||||
@ -639,8 +660,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
|
||||
application.expandedCategoriesChanged.emit() # Notify the GUI of the change
|
||||
|
||||
# If a machine with the same name is of a different type, always create a new one.
|
||||
if not self._is_same_machine_type or self._resolve_strategies["machine"] != "override":
|
||||
# If there are no machines of the same type, create a new machine.
|
||||
if self._resolve_strategies["machine"] != "override" or self._dialog.updatableMachinesModel.count <= 1:
|
||||
# We need to create a new machine
|
||||
machine_name = self._container_registry.uniqueName(self._machine_info.name)
|
||||
|
||||
@ -650,10 +671,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
|
||||
self._container_registry.addContainer(global_stack)
|
||||
else:
|
||||
# Find the machine
|
||||
global_stacks = self._container_registry.findContainerStacks(name = self._machine_info.name, type = "machine")
|
||||
# Find the machine which will be overridden
|
||||
global_stacks = self._container_registry.findContainerStacks(id = self._dialog.getMachineToOverride(), type = "machine")
|
||||
if not global_stacks:
|
||||
message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tag <filename>!", "Project file <filename>{0}</filename> is made using profiles that are unknown to this version of Ultimaker Cura.", file_name))
|
||||
message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tag <filename>!",
|
||||
"Project file <filename>{0}</filename> is made using profiles that"
|
||||
" are unknown to this version of Ultimaker Cura.", file_name))
|
||||
message.show()
|
||||
self.setWorkspaceName("")
|
||||
return [], {}
|
||||
@ -739,6 +762,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
Job.yieldThread()
|
||||
QCoreApplication.processEvents() # Ensure that the GUI does not freeze.
|
||||
|
||||
if global_stack:
|
||||
# Handle quality changes if any
|
||||
self._processQualityChanges(global_stack)
|
||||
|
||||
@ -1069,6 +1093,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
|
||||
# Set metadata fields that are missing from the global stack
|
||||
for key, value in self._machine_info.metadata_dict.items():
|
||||
if key not in _ignored_machine_network_metadata:
|
||||
global_stack.setMetaDataEntry(key, value)
|
||||
|
||||
def _updateActiveMachine(self, global_stack):
|
||||
@ -1080,7 +1105,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||
|
||||
# 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():
|
||||
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:
|
||||
|
43
plugins/3MFReader/UpdatableMachinesModel.py
Normal file
43
plugins/3MFReader/UpdatableMachinesModel.py
Normal file
@ -0,0 +1,43 @@
|
||||
# Copyright (c) 2020 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import Dict, List
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
|
||||
from UM.Qt.ListModel import ListModel
|
||||
from cura.Settings.GlobalStack import GlobalStack
|
||||
|
||||
create_new_list_item = {
|
||||
"id": "new",
|
||||
"name": "Create new",
|
||||
"displayName": "Create new",
|
||||
"type": "default_option" # to make sure we are not mixing the "Create new" option with a printer with id "new"
|
||||
} # type: Dict[str, str]
|
||||
|
||||
|
||||
class UpdatableMachinesModel(ListModel):
|
||||
"""Model that holds cura packages.
|
||||
|
||||
By setting the filter property the instances held by this model can be changed.
|
||||
"""
|
||||
|
||||
def __init__(self, parent = None) -> None:
|
||||
super().__init__(parent)
|
||||
|
||||
self.addRoleName(Qt.UserRole + 1, "id")
|
||||
self.addRoleName(Qt.UserRole + 2, "name")
|
||||
self.addRoleName(Qt.UserRole + 3, "displayName")
|
||||
self.addRoleName(Qt.UserRole + 4, "type") # Either "default_option" or "machine"
|
||||
|
||||
def update(self, machines: List[GlobalStack]) -> None:
|
||||
items = [create_new_list_item] # type: List[Dict[str, str]]
|
||||
|
||||
for machine in sorted(machines, key = lambda printer: printer.name):
|
||||
items.append({
|
||||
"id": machine.id,
|
||||
"name": machine.name,
|
||||
"displayName": "Update " + machine.name,
|
||||
"type": "machine"
|
||||
})
|
||||
self.setItems(items)
|
@ -1,5 +1,6 @@
|
||||
# Copyright (c) 2016 Ultimaker B.V.
|
||||
# Copyright (c) 2020 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
from typing import List, Optional, Dict, cast
|
||||
|
||||
from PyQt5.QtCore import pyqtSignal, QObject, pyqtProperty, QCoreApplication
|
||||
from UM.FlameProfiler import pyqtSlot
|
||||
@ -7,10 +8,15 @@ from UM.PluginRegistry import PluginRegistry
|
||||
from UM.Application import Application
|
||||
from UM.i18n import i18nCatalog
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
from cura.Settings.GlobalStack import GlobalStack
|
||||
from .UpdatableMachinesModel import UpdatableMachinesModel
|
||||
|
||||
import os
|
||||
import threading
|
||||
import time
|
||||
|
||||
from cura.CuraApplication import CuraApplication
|
||||
|
||||
i18n_catalog = i18nCatalog("cura")
|
||||
|
||||
|
||||
@ -29,6 +35,7 @@ class WorkspaceDialog(QObject):
|
||||
"quality_changes": self._default_strategy,
|
||||
"definition_changes": self._default_strategy,
|
||||
"material": self._default_strategy}
|
||||
self._override_machine = None
|
||||
self._visible = False
|
||||
self.showDialogSignal.connect(self.__show)
|
||||
|
||||
@ -51,6 +58,7 @@ class WorkspaceDialog(QObject):
|
||||
self._extruders = []
|
||||
self._objects_on_plate = False
|
||||
self._is_printer_group = False
|
||||
self._updatable_machines_model = UpdatableMachinesModel(self)
|
||||
|
||||
machineConflictChanged = pyqtSignal()
|
||||
qualityChangesConflictChanged = pyqtSignal()
|
||||
@ -63,6 +71,7 @@ class WorkspaceDialog(QObject):
|
||||
qualityTypeChanged = pyqtSignal()
|
||||
intentNameChanged = pyqtSignal()
|
||||
machineNameChanged = pyqtSignal()
|
||||
updatableMachinesChanged = pyqtSignal()
|
||||
materialLabelsChanged = pyqtSignal()
|
||||
objectsOnPlateChanged = pyqtSignal()
|
||||
numUserSettingsChanged = pyqtSignal()
|
||||
@ -81,33 +90,33 @@ class WorkspaceDialog(QObject):
|
||||
self.isPrinterGroupChanged.emit()
|
||||
|
||||
@pyqtProperty(str, notify=variantTypeChanged)
|
||||
def variantType(self):
|
||||
def variantType(self) -> str:
|
||||
return self._variant_type
|
||||
|
||||
def setVariantType(self, variant_type):
|
||||
def setVariantType(self, variant_type: str) -> None:
|
||||
if self._variant_type != variant_type:
|
||||
self._variant_type = variant_type
|
||||
self.variantTypeChanged.emit()
|
||||
|
||||
@pyqtProperty(str, notify=machineTypeChanged)
|
||||
def machineType(self):
|
||||
def machineType(self) -> str:
|
||||
return self._machine_type
|
||||
|
||||
def setMachineType(self, machine_type):
|
||||
def setMachineType(self, machine_type: str) -> None:
|
||||
self._machine_type = machine_type
|
||||
self.machineTypeChanged.emit()
|
||||
|
||||
def setNumUserSettings(self, num_user_settings):
|
||||
def setNumUserSettings(self, num_user_settings: int) -> None:
|
||||
if self._num_user_settings != num_user_settings:
|
||||
self._num_user_settings = num_user_settings
|
||||
self.numVisibleSettingsChanged.emit()
|
||||
|
||||
@pyqtProperty(int, notify=numUserSettingsChanged)
|
||||
def numUserSettings(self):
|
||||
def numUserSettings(self) -> int:
|
||||
return self._num_user_settings
|
||||
|
||||
@pyqtProperty(bool, notify=objectsOnPlateChanged)
|
||||
def hasObjectsOnPlate(self):
|
||||
def hasObjectsOnPlate(self) -> bool:
|
||||
return self._objects_on_plate
|
||||
|
||||
def setHasObjectsOnPlate(self, objects_on_plate):
|
||||
@ -116,10 +125,10 @@ class WorkspaceDialog(QObject):
|
||||
self.objectsOnPlateChanged.emit()
|
||||
|
||||
@pyqtProperty("QVariantList", notify = materialLabelsChanged)
|
||||
def materialLabels(self):
|
||||
def materialLabels(self) -> List[str]:
|
||||
return self._material_labels
|
||||
|
||||
def setMaterialLabels(self, material_labels):
|
||||
def setMaterialLabels(self, material_labels: List[str]) -> None:
|
||||
if self._material_labels != material_labels:
|
||||
self._material_labels = material_labels
|
||||
self.materialLabelsChanged.emit()
|
||||
@ -134,36 +143,44 @@ class WorkspaceDialog(QObject):
|
||||
self.extrudersChanged.emit()
|
||||
|
||||
@pyqtProperty(str, notify = machineNameChanged)
|
||||
def machineName(self):
|
||||
def machineName(self) -> str:
|
||||
return self._machine_name
|
||||
|
||||
def setMachineName(self, machine_name):
|
||||
def setMachineName(self, machine_name: str) -> None:
|
||||
if self._machine_name != machine_name:
|
||||
self._machine_name = machine_name
|
||||
self.machineNameChanged.emit()
|
||||
|
||||
@pyqtProperty(QObject, notify = updatableMachinesChanged)
|
||||
def updatableMachinesModel(self) -> UpdatableMachinesModel:
|
||||
return cast(UpdatableMachinesModel, self._updatable_machines_model)
|
||||
|
||||
def setUpdatableMachines(self, updatable_machines: List[GlobalStack]) -> None:
|
||||
self._updatable_machines_model.update(updatable_machines)
|
||||
self.updatableMachinesChanged.emit()
|
||||
|
||||
@pyqtProperty(str, notify=qualityTypeChanged)
|
||||
def qualityType(self):
|
||||
def qualityType(self) -> str:
|
||||
return self._quality_type
|
||||
|
||||
def setQualityType(self, quality_type):
|
||||
def setQualityType(self, quality_type: str) -> None:
|
||||
if self._quality_type != quality_type:
|
||||
self._quality_type = quality_type
|
||||
self.qualityTypeChanged.emit()
|
||||
|
||||
@pyqtProperty(int, notify=numSettingsOverridenByQualityChangesChanged)
|
||||
def numSettingsOverridenByQualityChanges(self):
|
||||
def numSettingsOverridenByQualityChanges(self) -> int:
|
||||
return self._num_settings_overridden_by_quality_changes
|
||||
|
||||
def setNumSettingsOverriddenByQualityChanges(self, num_settings_overridden_by_quality_changes):
|
||||
def setNumSettingsOverriddenByQualityChanges(self, num_settings_overridden_by_quality_changes: int) -> None:
|
||||
self._num_settings_overridden_by_quality_changes = num_settings_overridden_by_quality_changes
|
||||
self.numSettingsOverridenByQualityChangesChanged.emit()
|
||||
|
||||
@pyqtProperty(str, notify=qualityNameChanged)
|
||||
def qualityName(self):
|
||||
def qualityName(self) -> str:
|
||||
return self._quality_name
|
||||
|
||||
def setQualityName(self, quality_name):
|
||||
def setQualityName(self, quality_name: str) -> None:
|
||||
if self._quality_name != quality_name:
|
||||
self._quality_name = quality_name
|
||||
self.qualityNameChanged.emit()
|
||||
@ -178,80 +195,87 @@ class WorkspaceDialog(QObject):
|
||||
self.intentNameChanged.emit()
|
||||
|
||||
@pyqtProperty(str, notify=activeModeChanged)
|
||||
def activeMode(self):
|
||||
def activeMode(self) -> str:
|
||||
return self._active_mode
|
||||
|
||||
def setActiveMode(self, active_mode):
|
||||
def setActiveMode(self, active_mode: int) -> None:
|
||||
if active_mode == 0:
|
||||
self._active_mode = i18n_catalog.i18nc("@title:tab", "Recommended")
|
||||
else:
|
||||
self._active_mode = i18n_catalog.i18nc("@title:tab", "Custom")
|
||||
self.activeModeChanged.emit()
|
||||
|
||||
@pyqtProperty(int, notify = hasVisibleSettingsFieldChanged)
|
||||
def hasVisibleSettingsField(self):
|
||||
@pyqtProperty(bool, notify = hasVisibleSettingsFieldChanged)
|
||||
def hasVisibleSettingsField(self) -> bool:
|
||||
return self._has_visible_settings_field
|
||||
|
||||
def setHasVisibleSettingsField(self, has_visible_settings_field):
|
||||
def setHasVisibleSettingsField(self, has_visible_settings_field: bool) -> None:
|
||||
self._has_visible_settings_field = has_visible_settings_field
|
||||
self.hasVisibleSettingsFieldChanged.emit()
|
||||
|
||||
@pyqtProperty(int, constant = True)
|
||||
def totalNumberOfSettings(self):
|
||||
def totalNumberOfSettings(self) -> int:
|
||||
general_definition_containers = ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")
|
||||
if not general_definition_containers:
|
||||
return 0
|
||||
return len(general_definition_containers[0].getAllKeys())
|
||||
|
||||
@pyqtProperty(int, notify = numVisibleSettingsChanged)
|
||||
def numVisibleSettings(self):
|
||||
def numVisibleSettings(self) -> int:
|
||||
return self._num_visible_settings
|
||||
|
||||
def setNumVisibleSettings(self, num_visible_settings):
|
||||
def setNumVisibleSettings(self, num_visible_settings: int) -> None:
|
||||
if self._num_visible_settings != num_visible_settings:
|
||||
self._num_visible_settings = num_visible_settings
|
||||
self.numVisibleSettingsChanged.emit()
|
||||
|
||||
@pyqtProperty(bool, notify = machineConflictChanged)
|
||||
def machineConflict(self):
|
||||
def machineConflict(self) -> bool:
|
||||
return self._has_machine_conflict
|
||||
|
||||
@pyqtProperty(bool, notify=qualityChangesConflictChanged)
|
||||
def qualityChangesConflict(self):
|
||||
def qualityChangesConflict(self) -> bool:
|
||||
return self._has_quality_changes_conflict
|
||||
|
||||
@pyqtProperty(bool, notify=materialConflictChanged)
|
||||
def materialConflict(self):
|
||||
def materialConflict(self) -> bool:
|
||||
return self._has_material_conflict
|
||||
|
||||
@pyqtSlot(str, str)
|
||||
def setResolveStrategy(self, key, strategy):
|
||||
def setResolveStrategy(self, key: str, strategy: Optional[str]) -> None:
|
||||
if key in self._result:
|
||||
self._result[key] = strategy
|
||||
|
||||
def getMachineToOverride(self) -> str:
|
||||
return self._override_machine
|
||||
|
||||
@pyqtSlot(str)
|
||||
def setMachineToOverride(self, machine_name: str) -> None:
|
||||
self._override_machine = machine_name
|
||||
|
||||
@pyqtSlot()
|
||||
def closeBackend(self):
|
||||
def closeBackend(self) -> None:
|
||||
"""Close the backend: otherwise one could end up with "Slicing..."""
|
||||
|
||||
Application.getInstance().getBackend().close()
|
||||
|
||||
def setMaterialConflict(self, material_conflict):
|
||||
def setMaterialConflict(self, material_conflict: bool) -> None:
|
||||
if self._has_material_conflict != material_conflict:
|
||||
self._has_material_conflict = material_conflict
|
||||
self.materialConflictChanged.emit()
|
||||
|
||||
def setMachineConflict(self, machine_conflict):
|
||||
def setMachineConflict(self, machine_conflict: bool) -> None:
|
||||
if self._has_machine_conflict != machine_conflict:
|
||||
self._has_machine_conflict = machine_conflict
|
||||
self.machineConflictChanged.emit()
|
||||
|
||||
def setQualityChangesConflict(self, quality_changes_conflict):
|
||||
def setQualityChangesConflict(self, quality_changes_conflict: bool) -> None:
|
||||
if self._has_quality_changes_conflict != quality_changes_conflict:
|
||||
self._has_quality_changes_conflict = quality_changes_conflict
|
||||
self.qualityChangesConflictChanged.emit()
|
||||
|
||||
def getResult(self):
|
||||
if "machine" in self._result and not self._has_machine_conflict:
|
||||
def getResult(self) -> Dict[str, Optional[str]]:
|
||||
if "machine" in self._result and self.updatableMachinesModel.count <= 1:
|
||||
self._result["machine"] = None
|
||||
if "quality_changes" in self._result and not self._has_quality_changes_conflict:
|
||||
self._result["quality_changes"] = None
|
||||
@ -267,11 +291,13 @@ class WorkspaceDialog(QObject):
|
||||
|
||||
return self._result
|
||||
|
||||
def _createViewFromQML(self):
|
||||
path = os.path.join(PluginRegistry.getInstance().getPluginPath("3MFReader"), self._qml_url)
|
||||
self._view = Application.getInstance().createQmlComponent(path, {"manager": self})
|
||||
def _createViewFromQML(self) -> None:
|
||||
three_mf_reader_path = PluginRegistry.getInstance().getPluginPath("3MFReader")
|
||||
if three_mf_reader_path:
|
||||
path = os.path.join(three_mf_reader_path, self._qml_url)
|
||||
self._view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
|
||||
|
||||
def show(self):
|
||||
def show(self) -> None:
|
||||
# Emit signal so the right thread actually shows the view.
|
||||
if threading.current_thread() != threading.main_thread():
|
||||
self._lock.acquire()
|
||||
@ -284,7 +310,7 @@ class WorkspaceDialog(QObject):
|
||||
self.showDialogSignal.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def notifyClosed(self):
|
||||
def notifyClosed(self) -> None:
|
||||
"""Used to notify the dialog so the lock can be released."""
|
||||
|
||||
self._result = {} # The result should be cleared before hide, because after it is released the main thread lock
|
||||
@ -294,7 +320,7 @@ class WorkspaceDialog(QObject):
|
||||
except:
|
||||
pass
|
||||
|
||||
def hide(self):
|
||||
def hide(self) -> None:
|
||||
self._visible = False
|
||||
self._view.hide()
|
||||
try:
|
||||
@ -303,7 +329,7 @@ class WorkspaceDialog(QObject):
|
||||
pass
|
||||
|
||||
@pyqtSlot(bool)
|
||||
def _onVisibilityChanged(self, visible):
|
||||
def _onVisibilityChanged(self, visible: bool) -> None:
|
||||
if not visible:
|
||||
try:
|
||||
self._lock.release()
|
||||
@ -311,17 +337,17 @@ class WorkspaceDialog(QObject):
|
||||
pass
|
||||
|
||||
@pyqtSlot()
|
||||
def onOkButtonClicked(self):
|
||||
def onOkButtonClicked(self) -> None:
|
||||
self._view.hide()
|
||||
self.hide()
|
||||
|
||||
@pyqtSlot()
|
||||
def onCancelButtonClicked(self):
|
||||
def onCancelButtonClicked(self) -> None:
|
||||
self._result = {}
|
||||
self._view.hide()
|
||||
self.hide()
|
||||
|
||||
def waitForClose(self):
|
||||
def waitForClose(self) -> None:
|
||||
"""Block thread until the dialog is closed."""
|
||||
|
||||
if self._visible:
|
||||
@ -334,7 +360,7 @@ class WorkspaceDialog(QObject):
|
||||
time.sleep(1 / 50)
|
||||
QCoreApplication.processEvents() # Ensure that the GUI does not freeze.
|
||||
|
||||
def __show(self):
|
||||
def __show(self) -> None:
|
||||
if self._view is None:
|
||||
self._createViewFromQML()
|
||||
if self._view:
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Window 2.2
|
||||
|
||||
@ -20,6 +20,7 @@ UM.Dialog
|
||||
|
||||
property int comboboxHeight: 15 * screenScaleFactor
|
||||
property int spacerHeight: 10 * screenScaleFactor
|
||||
property int doubleSpacerHeight: 20 * screenScaleFactor
|
||||
|
||||
onClosing: manager.notifyClosed()
|
||||
onVisibleChanged:
|
||||
@ -35,7 +36,7 @@ UM.Dialog
|
||||
Item
|
||||
{
|
||||
anchors.fill: parent
|
||||
anchors.margins: 20 * screenScaleFactor
|
||||
anchors.margins: 10 * screenScaleFactor
|
||||
|
||||
UM.I18nCatalog
|
||||
{
|
||||
@ -79,7 +80,7 @@ UM.Dialog
|
||||
}
|
||||
Item // Spacer
|
||||
{
|
||||
height: spacerHeight
|
||||
height: doubleSpacerHeight
|
||||
width: height
|
||||
}
|
||||
|
||||
@ -101,35 +102,53 @@ UM.Dialog
|
||||
}
|
||||
UM.TooltipArea
|
||||
{
|
||||
id: machineResolveTooltip
|
||||
id: machineResolveStrategyTooltip
|
||||
width: (parent.width / 3) | 0
|
||||
height: visible ? comboboxHeight : 0
|
||||
visible: manager.machineConflict
|
||||
visible: base.visible && machineResolveComboBox.model.count > 1
|
||||
text: catalog.i18nc("@info:tooltip", "How should the conflict in the machine be resolved?")
|
||||
ComboBox
|
||||
{
|
||||
model: ListModel
|
||||
{
|
||||
Component.onCompleted:
|
||||
{
|
||||
append({"key": "override", "label": catalog.i18nc("@action:ComboBox option", "Update") + " " + manager.machineName});
|
||||
append({"key": "new", "label": catalog.i18nc("@action:ComboBox option", "Create new")});
|
||||
}
|
||||
}
|
||||
Connections
|
||||
{
|
||||
target: manager
|
||||
onMachineNameChanged:
|
||||
{
|
||||
machineResolveComboBox.model.get(0).label = catalog.i18nc("@action:ComboBox option", "Update") + " " + manager.machineName;
|
||||
}
|
||||
}
|
||||
textRole: "label"
|
||||
id: machineResolveComboBox
|
||||
model: manager.updatableMachinesModel
|
||||
visible: machineResolveStrategyTooltip.visible
|
||||
textRole: "displayName"
|
||||
width: parent.width
|
||||
onActivated:
|
||||
onCurrentIndexChanged:
|
||||
{
|
||||
manager.setResolveStrategy("machine", resolveStrategiesModel.get(index).key)
|
||||
if (model.getItem(currentIndex).id == "new"
|
||||
&& model.getItem(currentIndex).type == "default_option")
|
||||
{
|
||||
manager.setResolveStrategy("machine", "new")
|
||||
}
|
||||
else
|
||||
{
|
||||
manager.setResolveStrategy("machine", "override")
|
||||
manager.setMachineToOverride(model.getItem(currentIndex).id)
|
||||
}
|
||||
}
|
||||
|
||||
onVisibleChanged:
|
||||
{
|
||||
if (!visible) {return}
|
||||
|
||||
currentIndex = 0
|
||||
// If the project printer exists in Cura, set it as the default dropdown menu option.
|
||||
// No need to check object 0, which is the "Create new" option
|
||||
for (var i = 1; i < model.count; i++)
|
||||
{
|
||||
if (model.getItem(i).name == manager.machineName)
|
||||
{
|
||||
currentIndex = i
|
||||
break
|
||||
}
|
||||
}
|
||||
// The project printer does not exist in Cura. If there is at least one printer of the same
|
||||
// type, select the first one, else set the index to "Create new"
|
||||
if (currentIndex == 0 && model.count > 1)
|
||||
{
|
||||
currentIndex = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -168,7 +187,7 @@ UM.Dialog
|
||||
|
||||
Item // Spacer
|
||||
{
|
||||
height: spacerHeight
|
||||
height: doubleSpacerHeight
|
||||
width: height
|
||||
}
|
||||
Row
|
||||
@ -271,7 +290,7 @@ UM.Dialog
|
||||
}
|
||||
Item // Spacer
|
||||
{
|
||||
height: spacerHeight
|
||||
height: doubleSpacerHeight
|
||||
width: height
|
||||
}
|
||||
Row
|
||||
@ -333,7 +352,7 @@ UM.Dialog
|
||||
|
||||
Item // Spacer
|
||||
{
|
||||
height: spacerHeight
|
||||
height: doubleSpacerHeight
|
||||
width: height
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides support for reading 3MF files.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -136,7 +136,17 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter):
|
||||
file_in_archive.compress_type = zipfile.ZIP_DEFLATED
|
||||
|
||||
# Do not include the network authentication keys
|
||||
ignore_keys = {"network_authentication_id", "network_authentication_key", "octoprint_api_key"}
|
||||
ignore_keys = {
|
||||
"um_cloud_cluster_id",
|
||||
"um_network_key",
|
||||
"um_linked_to_account",
|
||||
"removal_warning",
|
||||
"host_guid",
|
||||
"group_name",
|
||||
"group_size",
|
||||
"connection_type",
|
||||
"octoprint_api_key"
|
||||
}
|
||||
serialized_data = container.serialize(ignored_metadata_keys = ignore_keys)
|
||||
|
||||
archive.writestr(file_in_archive, serialized_data)
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides support for writing 3MF files.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,5 +3,5 @@
|
||||
"author": "fieldOfView",
|
||||
"version": "1.0.0",
|
||||
"description": "Provides support for reading AMF files.",
|
||||
"api": "7.2.0"
|
||||
"api": "7.3.0"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"description": "Backup and restore your configuration.",
|
||||
"version": "1.2.0",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
"name": "CuraEngine Backend",
|
||||
"author": "Ultimaker B.V.",
|
||||
"description": "Provides the link to the CuraEngine slicing backend.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"version": "1.0.1",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides support for importing Cura profiles.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides support for exporting Cura profiles.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog":"cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Checks for firmware updates.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides a machine actions for updating firmware.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Reads g-code from a compressed archive.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Writes g-code to a compressed archive.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Copyright (c) 2018 Ultimaker B.V.
|
||||
# Copyright (c) 2020 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import re #Regular expressions for parsing escape characters in the settings.
|
||||
import re # Regular expressions for parsing escape characters in the settings.
|
||||
import json
|
||||
from typing import Optional
|
||||
|
||||
@ -9,9 +9,10 @@ from UM.Settings.ContainerFormatError import ContainerFormatError
|
||||
from UM.Settings.InstanceContainer import InstanceContainer
|
||||
from UM.Logger import Logger
|
||||
from UM.i18n import i18nCatalog
|
||||
from cura.ReaderWriters.ProfileReader import ProfileReader, NoProfileException
|
||||
|
||||
catalog = i18nCatalog("cura")
|
||||
|
||||
from cura.ReaderWriters.ProfileReader import ProfileReader, NoProfileException
|
||||
|
||||
class GCodeProfileReader(ProfileReader):
|
||||
"""A class that reads profile data from g-code files.
|
||||
@ -29,9 +30,9 @@ class GCodeProfileReader(ProfileReader):
|
||||
"""
|
||||
|
||||
escape_characters = {
|
||||
re.escape("\\\\"): "\\", #The escape character.
|
||||
re.escape("\\n"): "\n", #Newlines. They break off the comment.
|
||||
re.escape("\\r"): "\r" #Carriage return. Windows users may need this for visualisation in their editors.
|
||||
re.escape("\\\\"): "\\", # The escape character.
|
||||
re.escape("\\n"): "\n", # Newlines. They break off the comment.
|
||||
re.escape("\\r"): "\r" # Carriage return. Windows users may need this for visualisation in their editors.
|
||||
}
|
||||
"""Dictionary that defines how characters are escaped when embedded in
|
||||
|
||||
@ -41,11 +42,6 @@ class GCodeProfileReader(ProfileReader):
|
||||
not.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
"""Initialises the g-code reader as a profile reader."""
|
||||
|
||||
super().__init__()
|
||||
|
||||
def read(self, file_name):
|
||||
"""Reads a g-code file, loading the profile from it.
|
||||
|
||||
@ -54,6 +50,7 @@ class GCodeProfileReader(ProfileReader):
|
||||
specified file was no g-code or contained no parsable profile,
|
||||
None is returned.
|
||||
"""
|
||||
Logger.log("i", "Attempting to read a profile from the g-code")
|
||||
|
||||
if file_name.split(".")[-1] != "gcode":
|
||||
return None
|
||||
@ -70,7 +67,7 @@ class GCodeProfileReader(ProfileReader):
|
||||
for line in f:
|
||||
if line.startswith(prefix):
|
||||
# Remove the prefix and the newline from the line and add it to the rest.
|
||||
serialized += line[prefix_length : -1]
|
||||
serialized += line[prefix_length: -1]
|
||||
except IOError as e:
|
||||
Logger.log("e", "Unable to open file %s for reading: %s", file_name, str(e))
|
||||
return None
|
||||
@ -79,10 +76,10 @@ class GCodeProfileReader(ProfileReader):
|
||||
serialized = serialized.strip()
|
||||
|
||||
if not serialized:
|
||||
Logger.log("i", "No custom profile to import from this g-code: %s", file_name)
|
||||
Logger.log("w", "No custom profile to import from this g-code: %s", file_name)
|
||||
raise NoProfileException()
|
||||
|
||||
# serialized data can be invalid JSON
|
||||
# Serialized data can be invalid JSON
|
||||
try:
|
||||
json_data = json.loads(serialized)
|
||||
except Exception as e:
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides support for importing profiles from g-code files.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Victor Larchenko, Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Allows loading and displaying G-code files.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Writes g-code to a file.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Enables ability to generate printable geometry from 2D image files.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides support for importing profiles from legacy Cura versions.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "fieldOfView, Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
"name": "Model Checker",
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"description": "Checks models and print configuration for possible printing issues and give suggestions.",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ Rectangle
|
||||
{
|
||||
id: externalLinkIcon
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
color: UM.Theme.getColor("monitor_text_link")
|
||||
color: UM.Theme.getColor("text_link")
|
||||
source: UM.Theme.getIcon("external_link")
|
||||
width: UM.Theme.getSize("monitor_external_link_icon").width
|
||||
height: UM.Theme.getSize("monitor_external_link_icon").height
|
||||
@ -150,9 +150,8 @@ Rectangle
|
||||
leftMargin: UM.Theme.getSize("narrow_margin").width
|
||||
verticalCenter: externalLinkIcon.verticalCenter
|
||||
}
|
||||
color: UM.Theme.getColor("monitor_text_link")
|
||||
color: UM.Theme.getColor("text_link")
|
||||
font: UM.Theme.getFont("medium")
|
||||
linkColor: UM.Theme.getColor("monitor_text_link")
|
||||
text: catalog.i18nc("@label link to technical assistance", "View user manuals online")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides a monitor stage in Cura.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides the Per Model Settings.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
"name": "Post Processing",
|
||||
"author": "Ultimaker",
|
||||
"version": "2.2.1",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"description": "Extension that allows for user created scripts for post processing",
|
||||
"catalog": "cura"
|
||||
}
|
@ -1101,7 +1101,7 @@ class ChangeAtZProcessor:
|
||||
|
||||
# if it's not a linear move, we don't care
|
||||
if linear_command is None:
|
||||
return
|
||||
return line
|
||||
|
||||
# get our linear move parameters
|
||||
feed_rate = linear_command.Arguments["F"]
|
||||
@ -1120,6 +1120,7 @@ class ChangeAtZProcessor:
|
||||
new_line = self.processRetractFeedRate(extrude_length, feed_rate, new_line, x_coord, y_coord, z_coord)
|
||||
|
||||
# handle print speed adjustments
|
||||
if extrude_length is not None: # Only for extrusion moves.
|
||||
new_line = self.processPrintSpeed(feed_rate, new_line)
|
||||
|
||||
# set our current extrude position
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides a prepare stage in Cura.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides a preview stage in Cura.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
@ -79,7 +79,7 @@ class RemovableDriveOutputDevice(OutputDevice):
|
||||
|
||||
if extension: # Not empty string.
|
||||
extension = "." + extension
|
||||
file_name = os.path.join(self.getId(), os.path.splitext(file_name)[0] + extension)
|
||||
file_name = os.path.join(self.getId(), file_name + extension)
|
||||
|
||||
try:
|
||||
Logger.log("d", "Writing to %s", file_name)
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"description": "Provides removable drive hotplugging and writing support.",
|
||||
"version": "1.0.1",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Logs certain events so that they can be used by the crash reporter",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides the Simulation view.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Submits anonymous slice info. Can be disabled through preferences.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides a normal solid mesh view.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Creates an eraser mesh to block the printing of support in certain places",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -2,6 +2,6 @@
|
||||
"name": "Toolbox",
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"description": "Find, manage and install new Cura packages."
|
||||
}
|
||||
|
@ -48,7 +48,15 @@ Item
|
||||
onClicked:
|
||||
{
|
||||
toolbox.viewPage = "overview"
|
||||
toolbox.filterModelByProp("packages", "type", toolbox.viewCategory)
|
||||
if (toolbox.viewCategory == "material")
|
||||
{
|
||||
toolbox.filterModelByProp("authors", "package_types", "material")
|
||||
}
|
||||
else if (toolbox.viewCategory == "plugin")
|
||||
{
|
||||
toolbox.filterModelByProp("packages", "type", "plugin")
|
||||
}
|
||||
|
||||
}
|
||||
style: ButtonStyle
|
||||
{
|
||||
|
@ -24,7 +24,7 @@ Rectangle
|
||||
Label
|
||||
{
|
||||
id: heading
|
||||
text: catalog.i18nc("@label", "Featured")
|
||||
text: catalog.i18nc("@label", "Premium")
|
||||
width: contentWidth
|
||||
height: contentHeight
|
||||
color: UM.Theme.getColor("text_medium")
|
||||
|
@ -33,7 +33,7 @@ Item
|
||||
width: UM.Theme.getSize("toolbox_thumbnail_medium").width
|
||||
height: UM.Theme.getSize("toolbox_thumbnail_medium").height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: details.icon_url || "../../images/placeholder.svg"
|
||||
source: details && details.icon_url ? details.icon_url : "../../images/placeholder.svg"
|
||||
mipmap: true
|
||||
anchors
|
||||
{
|
||||
@ -56,8 +56,9 @@ Item
|
||||
rightMargin: UM.Theme.getSize("wide_margin").width
|
||||
bottomMargin: UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
text: details.name || ""
|
||||
text: details && details.name ? details.name : ""
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
color: UM.Theme.getColor("text_medium")
|
||||
wrapMode: Text.WordWrap
|
||||
width: parent.width
|
||||
height: UM.Theme.getSize("toolbox_property_label").height
|
||||
@ -66,8 +67,9 @@ Item
|
||||
Label
|
||||
{
|
||||
id: description
|
||||
text: details.description || ""
|
||||
text: details && details.description ? details.description : ""
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("text_medium")
|
||||
anchors
|
||||
{
|
||||
top: title.bottom
|
||||
@ -121,7 +123,7 @@ Item
|
||||
{
|
||||
text:
|
||||
{
|
||||
if (details.website)
|
||||
if (details && details.website)
|
||||
{
|
||||
return "<a href=\"" + details.website + "\">" + details.website + "</a>"
|
||||
}
|
||||
@ -140,7 +142,7 @@ Item
|
||||
{
|
||||
text:
|
||||
{
|
||||
if (details.email)
|
||||
if (details && details.email)
|
||||
{
|
||||
return "<a href=\"mailto:" + details.email + "\">" + details.email + "</a>"
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ Item
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@label", "Author") + ":"
|
||||
text: catalog.i18nc("@label", "Brand") + ":"
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("text_medium")
|
||||
renderType: Text.NativeRendering
|
||||
|
@ -4,6 +4,7 @@
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import UM 1.3 as UM
|
||||
|
||||
Rectangle
|
||||
{
|
||||
@ -14,6 +15,7 @@ Rectangle
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@info", "Fetching packages...")
|
||||
color: UM.Theme.getColor("text")
|
||||
anchors
|
||||
{
|
||||
centerIn: parent
|
||||
|
@ -145,7 +145,7 @@ class CloudPackageChecker(QObject):
|
||||
sync_message.addAction("sync",
|
||||
name = self._i18n_catalog.i18nc("@action:button", "Sync"),
|
||||
icon = "",
|
||||
description = "Sync your Cloud subscribed packages to your local environment.",
|
||||
description = "Sync your plugins and print profiles to Ultimaker Cura.",
|
||||
button_align = Message.ActionButtonAlignment.ALIGN_RIGHT)
|
||||
sync_message.actionTriggered.connect(self._onSyncButtonClicked)
|
||||
sync_message.show()
|
||||
|
@ -3,5 +3,5 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Provides support for reading model files.",
|
||||
"api": "7.2.0"
|
||||
"api": "7.3.0"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Provides support for reading Ultimaker Format Packages.",
|
||||
"supported_sdk_versions": ["7.2.0"],
|
||||
"supported_sdk_versions": ["7.3.0"],
|
||||
"i18n-catalog": "cura"
|
||||
}
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides support for writing Ultimaker Format Packages.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"description": "Manages network connections to Ultimaker networked printers.",
|
||||
"version": "2.0.0",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -149,9 +149,8 @@ Item
|
||||
{
|
||||
id: managePrinterText
|
||||
anchors.verticalCenter: managePrinterLink.verticalCenter
|
||||
color: UM.Theme.getColor("monitor_text_link")
|
||||
color: UM.Theme.getColor("text_link")
|
||||
font: UM.Theme.getFont("default")
|
||||
linkColor: UM.Theme.getColor("monitor_text_link")
|
||||
text: catalog.i18nc("@label link to Connect and Cloud interfaces", "Manage printer")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
@ -164,7 +163,7 @@ Item
|
||||
leftMargin: 6 * screenScaleFactor
|
||||
verticalCenter: managePrinterText.verticalCenter
|
||||
}
|
||||
color: UM.Theme.getColor("monitor_text_link")
|
||||
color: UM.Theme.getColor("text_link")
|
||||
source: UM.Theme.getIcon("external_link")
|
||||
width: 12 * screenScaleFactor
|
||||
height: 12 * screenScaleFactor
|
||||
|
@ -47,7 +47,7 @@ Item
|
||||
{
|
||||
id: externalLinkIcon
|
||||
anchors.verticalCenter: manageQueueLabel.verticalCenter
|
||||
color: UM.Theme.getColor("monitor_text_link")
|
||||
color: UM.Theme.getColor("text_link")
|
||||
source: UM.Theme.getIcon("external_link")
|
||||
width: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
|
||||
height: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
|
||||
@ -61,9 +61,8 @@ Item
|
||||
leftMargin: 6 * screenScaleFactor // TODO: Theme!
|
||||
verticalCenter: externalLinkIcon.verticalCenter
|
||||
}
|
||||
color: UM.Theme.getColor("monitor_text_link")
|
||||
color: UM.Theme.getColor("text_link")
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
linkColor: UM.Theme.getColor("monitor_text_link")
|
||||
text: catalog.i18nc("@label link to connect manager", "Manage in browser")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
@ -145,9 +145,9 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice):
|
||||
"""Set all the interface elements and texts for this output device."""
|
||||
|
||||
self.setPriority(2) # Make sure we end up below the local networking and above 'save to file'.
|
||||
self.setShortDescription(I18N_CATALOG.i18nc("@action:button", "Print via Cloud"))
|
||||
self.setDescription(I18N_CATALOG.i18nc("@properties:tooltip", "Print via Cloud"))
|
||||
self.setConnectionText(I18N_CATALOG.i18nc("@info:status", "Connected via Cloud"))
|
||||
self.setShortDescription(I18N_CATALOG.i18nc("@action:button", "Print via cloud"))
|
||||
self.setDescription(I18N_CATALOG.i18nc("@properties:tooltip", "Print via cloud"))
|
||||
self.setConnectionText(I18N_CATALOG.i18nc("@info:status", "Connected via cloud"))
|
||||
|
||||
def _update(self) -> None:
|
||||
"""Called when the network data should be updated."""
|
||||
|
@ -262,7 +262,7 @@ class CloudOutputDeviceManager:
|
||||
|
||||
message_text = self.I18N_CATALOG.i18nc(
|
||||
"info:status",
|
||||
"Cloud printers added from your account:<ul>{}</ul>",
|
||||
"Printers added from Digital Factory:<ul>{}</ul>",
|
||||
device_names
|
||||
)
|
||||
message.setText(message_text)
|
||||
@ -291,7 +291,6 @@ class CloudOutputDeviceManager:
|
||||
del self._remote_clusters[old_cluster_id]
|
||||
self._remote_clusters[new_cloud_output_device.key] = new_cloud_output_device
|
||||
|
||||
|
||||
def _devicesRemovedFromAccount(self, removed_device_ids: Set[str]) -> None:
|
||||
"""
|
||||
Removes the CloudOutputDevice from the received device ids and marks the specific printers as "removed from
|
||||
@ -321,34 +320,35 @@ class CloudOutputDeviceManager:
|
||||
self._removed_printers_message = Message(
|
||||
title = self.I18N_CATALOG.i18ncp(
|
||||
"info:status",
|
||||
"Cloud connection is not available for a printer",
|
||||
"Cloud connection is not available for some printers",
|
||||
"A cloud connection is not available for a printer",
|
||||
"A cloud connection is not available for some printers",
|
||||
len(self.reported_device_ids)
|
||||
)
|
||||
)
|
||||
device_names = "\n".join(["<li>{} ({})</li>".format(self._um_cloud_printers[device].name, self._um_cloud_printers[device].definition.name) for device in self.reported_device_ids])
|
||||
device_names = "".join(["<li>{} ({})</li>".format(self._um_cloud_printers[device].name, self._um_cloud_printers[device].definition.name) for device in self.reported_device_ids])
|
||||
message_text = self.I18N_CATALOG.i18ncp(
|
||||
"info:status",
|
||||
"The following cloud printer is not linked to your account:\n",
|
||||
"The following cloud printers are not linked to your account:\n",
|
||||
"This printer is not linked to the Digital Factory:",
|
||||
"These printers are not linked to the Digital Factory:",
|
||||
len(self.reported_device_ids)
|
||||
)
|
||||
message_text += "<br/><ul>{}</ul><br/>".format(device_names)
|
||||
digital_factory_string = self.I18N_CATALOG.i18nc("info:name", "Ultimaker Digital Factory")
|
||||
|
||||
message_text += self.I18N_CATALOG.i18nc(
|
||||
"info:status",
|
||||
"<ul>{}</ul>\nTo establish a connection, please visit the "
|
||||
"<a href='https://mycloud.ultimaker.com/'>Ultimaker Digital Factory</a>.",
|
||||
device_names
|
||||
"To establish a connection, please visit the {website_link}".format(website_link = "<a href='https://digitalfactory.ultimaker.com/'>{}</a>.".format(digital_factory_string))
|
||||
)
|
||||
self._removed_printers_message.setText(message_text)
|
||||
self._removed_printers_message.addAction("keep_printer_configurations_action",
|
||||
name = self.I18N_CATALOG.i18nc("@action:button", "Keep printer configurations"),
|
||||
icon = "",
|
||||
description = "Keep the configuration of the cloud printer(s) synced with Cura which are not linked to your account.",
|
||||
description = "Keep cloud printers in Ultimaker Cura when not connected to your account.",
|
||||
button_align = Message.ActionButtonAlignment.ALIGN_RIGHT)
|
||||
self._removed_printers_message.addAction("remove_printers_action",
|
||||
name = self.I18N_CATALOG.i18nc("@action:button", "Remove printers"),
|
||||
icon = "",
|
||||
description = "Remove the cloud printer(s) which are not linked to your account.",
|
||||
description = "Remove cloud printer(s) which aren't linked to your account.",
|
||||
button_style = Message.ActionButtonStyle.SECONDARY,
|
||||
button_align = Message.ActionButtonAlignment.ALIGN_LEFT)
|
||||
self._removed_printers_message.actionTriggered.connect(self._onRemovedPrintersMessageActionTriggered)
|
||||
@ -423,13 +423,17 @@ class CloudOutputDeviceManager:
|
||||
machine.setMetaDataEntry(self.META_HOST_GUID, device.clusterData.host_guid)
|
||||
machine.setMetaDataEntry("group_name", device.name)
|
||||
machine.setMetaDataEntry("group_size", device.clusterSize)
|
||||
machine.setMetaDataEntry("removal_warning", self.I18N_CATALOG.i18nc(
|
||||
"@label ({} is printer name)",
|
||||
"{} will be removed until the next account sync. <br> To remove {} permanently, "
|
||||
"visit <a href='https://mycloud.ultimaker.com/'>Ultimaker Digital Factory</a>. "
|
||||
"<br><br>Are you sure you want to remove {} temporarily?",
|
||||
device.name, device.name, device.name
|
||||
))
|
||||
digital_factory_string = self.I18N_CATALOG.i18nc("info:name", "Ultimaker Digital Factory")
|
||||
digital_factory_link = "<a href='https://digitalfactory.ultimaker.com/'>{}</a>".format(digital_factory_string)
|
||||
removal_warning_string = self.I18N_CATALOG.i18nc(
|
||||
"@label ({printer_name} is replaced with the name of the printer",
|
||||
"{printer_name} will be removed until the next account sync. <br> To remove {printer_name} permanently, "
|
||||
"visit {digital_factory_link}"
|
||||
"<br><br>Are you sure you want to remove {printer_name} temporarily?".format(printer_name = device.name,
|
||||
digital_factory_link = digital_factory_link)
|
||||
)
|
||||
|
||||
machine.setMetaDataEntry("removal_warning", removal_warning_string)
|
||||
machine.addConfiguredConnectionType(device.connectionType.value)
|
||||
|
||||
def _connectToOutputDevice(self, device: CloudOutputDevice, machine: GlobalStack) -> None:
|
||||
|
@ -30,7 +30,7 @@ class CloudFlowMessage(Message):
|
||||
option_state=False,
|
||||
image_source=QUrl.fromLocalFile(image_path),
|
||||
image_caption=I18N_CATALOG.i18nc("@info:status Ultimaker Cloud should not be translated.",
|
||||
"Connect to Ultimaker Cloud"),
|
||||
"Connect to Ultimaker Digital Factory"),
|
||||
)
|
||||
self._address = address
|
||||
self.addAction("", I18N_CATALOG.i18nc("@action", "Get started"), "", "")
|
||||
|
@ -2,7 +2,7 @@
|
||||
"name": "USB printing",
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.2",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 2.1 to Cura 2.2.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 2.2 to Cura 2.4.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 2.5 to Cura 2.6.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 2.6 to Cura 2.7.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 2.7 to Cura 3.0.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 3.0 to Cura 3.1.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 3.2 to Cura 3.3.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 3.3 to Cura 3.4.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 3.4 to Cura 3.5.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 3.5 to Cura 4.0.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Upgrades configurations from Cura 4.0 to Cura 4.1.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.1 to Cura 4.2.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.2 to Cura 4.3.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.3 to Cura 4.4.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.4 to Cura 4.5.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.5 to Cura 4.6.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.6.0 to Cura 4.6.2.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ _removed_settings = {
|
||||
"support_tree_enable"
|
||||
} # type: Set[str]
|
||||
|
||||
|
||||
class VersionUpgrade462to47(VersionUpgrade):
|
||||
def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
"""
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.6.2 to Cura 4.7.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Seva Alekseyev, Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides support for reading X3D files.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides the X-Ray view.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -3,6 +3,6 @@
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.1",
|
||||
"description": "Provides capabilities to read and write XML-based material profiles.",
|
||||
"api": "7.2.0",
|
||||
"api": "7.3.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
"display_name": "3MF Reader",
|
||||
"description": "Provides support for reading 3MF files.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -23,7 +23,7 @@
|
||||
"display_name": "3MF Writer",
|
||||
"description": "Provides support for writing 3MF files.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -40,7 +40,7 @@
|
||||
"display_name": "AMF Reader",
|
||||
"description": "Provides support for reading AMF files.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "fieldOfView",
|
||||
@ -57,7 +57,7 @@
|
||||
"display_name": "Cura Backups",
|
||||
"description": "Backup and restore your configuration.",
|
||||
"package_version": "1.2.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -74,7 +74,7 @@
|
||||
"display_name": "CuraEngine Backend",
|
||||
"description": "Provides the link to the CuraEngine slicing backend.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -91,7 +91,7 @@
|
||||
"display_name": "Cura Profile Reader",
|
||||
"description": "Provides support for importing Cura profiles.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -108,7 +108,7 @@
|
||||
"display_name": "Cura Profile Writer",
|
||||
"description": "Provides support for exporting Cura profiles.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -125,7 +125,7 @@
|
||||
"display_name": "Firmware Update Checker",
|
||||
"description": "Checks for firmware updates.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -142,7 +142,7 @@
|
||||
"display_name": "Firmware Updater",
|
||||
"description": "Provides a machine actions for updating firmware.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -159,7 +159,7 @@
|
||||
"display_name": "Compressed G-code Reader",
|
||||
"description": "Reads g-code from a compressed archive.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -176,7 +176,7 @@
|
||||
"display_name": "Compressed G-code Writer",
|
||||
"description": "Writes g-code to a compressed archive.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -193,7 +193,7 @@
|
||||
"display_name": "G-Code Profile Reader",
|
||||
"description": "Provides support for importing profiles from g-code files.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -210,7 +210,7 @@
|
||||
"display_name": "G-Code Reader",
|
||||
"description": "Allows loading and displaying G-code files.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "VictorLarchenko",
|
||||
@ -227,7 +227,7 @@
|
||||
"display_name": "G-Code Writer",
|
||||
"description": "Writes g-code to a file.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -244,7 +244,7 @@
|
||||
"display_name": "Image Reader",
|
||||
"description": "Enables ability to generate printable geometry from 2D image files.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -261,7 +261,7 @@
|
||||
"display_name": "Legacy Cura Profile Reader",
|
||||
"description": "Provides support for importing profiles from legacy Cura versions.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -278,7 +278,7 @@
|
||||
"display_name": "Machine Settings Action",
|
||||
"description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "fieldOfView",
|
||||
@ -295,7 +295,7 @@
|
||||
"display_name": "Model Checker",
|
||||
"description": "Checks models and print configuration for possible printing issues and give suggestions.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -312,7 +312,7 @@
|
||||
"display_name": "Monitor Stage",
|
||||
"description": "Provides a monitor stage in Cura.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -329,7 +329,7 @@
|
||||
"display_name": "Per-Object Settings Tool",
|
||||
"description": "Provides the per-model settings.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -346,7 +346,7 @@
|
||||
"display_name": "Post Processing",
|
||||
"description": "Extension that allows for user created scripts for post processing.",
|
||||
"package_version": "2.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -363,7 +363,7 @@
|
||||
"display_name": "Prepare Stage",
|
||||
"description": "Provides a prepare stage in Cura.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -380,7 +380,7 @@
|
||||
"display_name": "Preview Stage",
|
||||
"description": "Provides a preview stage in Cura.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -397,7 +397,7 @@
|
||||
"display_name": "Removable Drive Output Device",
|
||||
"description": "Provides removable drive hotplugging and writing support.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -414,7 +414,7 @@
|
||||
"display_name": "Sentry Logger",
|
||||
"description": "Logs certain events so that they can be used by the crash reporter",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -431,7 +431,7 @@
|
||||
"display_name": "Simulation View",
|
||||
"description": "Provides the Simulation view.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -448,7 +448,7 @@
|
||||
"display_name": "Slice Info",
|
||||
"description": "Submits anonymous slice info. Can be disabled through preferences.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -465,7 +465,7 @@
|
||||
"display_name": "Solid View",
|
||||
"description": "Provides a normal solid mesh view.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -482,7 +482,7 @@
|
||||
"display_name": "Support Eraser Tool",
|
||||
"description": "Creates an eraser mesh to block the printing of support in certain places.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -499,7 +499,7 @@
|
||||
"display_name": "Trimesh Reader",
|
||||
"description": "Provides support for reading model files.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -516,7 +516,7 @@
|
||||
"display_name": "Toolbox",
|
||||
"description": "Find, manage and install new Cura packages.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -533,7 +533,7 @@
|
||||
"display_name": "UFP Reader",
|
||||
"description": "Provides support for reading Ultimaker Format Packages.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -550,7 +550,7 @@
|
||||
"display_name": "UFP Writer",
|
||||
"description": "Provides support for writing Ultimaker Format Packages.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -567,7 +567,7 @@
|
||||
"display_name": "Ultimaker Machine Actions",
|
||||
"description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -584,7 +584,7 @@
|
||||
"display_name": "UM3 Network Printing",
|
||||
"description": "Manages network connections to Ultimaker 3 printers.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -601,7 +601,7 @@
|
||||
"display_name": "USB Printing",
|
||||
"description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.",
|
||||
"package_version": "1.0.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -618,7 +618,7 @@
|
||||
"display_name": "Version Upgrade 2.1 to 2.2",
|
||||
"description": "Upgrades configurations from Cura 2.1 to Cura 2.2.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -635,7 +635,7 @@
|
||||
"display_name": "Version Upgrade 2.2 to 2.4",
|
||||
"description": "Upgrades configurations from Cura 2.2 to Cura 2.4.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -652,7 +652,7 @@
|
||||
"display_name": "Version Upgrade 2.5 to 2.6",
|
||||
"description": "Upgrades configurations from Cura 2.5 to Cura 2.6.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -669,7 +669,7 @@
|
||||
"display_name": "Version Upgrade 2.6 to 2.7",
|
||||
"description": "Upgrades configurations from Cura 2.6 to Cura 2.7.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -686,7 +686,7 @@
|
||||
"display_name": "Version Upgrade 2.7 to 3.0",
|
||||
"description": "Upgrades configurations from Cura 2.7 to Cura 3.0.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -703,7 +703,7 @@
|
||||
"display_name": "Version Upgrade 3.0 to 3.1",
|
||||
"description": "Upgrades configurations from Cura 3.0 to Cura 3.1.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -720,7 +720,7 @@
|
||||
"display_name": "Version Upgrade 3.2 to 3.3",
|
||||
"description": "Upgrades configurations from Cura 3.2 to Cura 3.3.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -737,7 +737,7 @@
|
||||
"display_name": "Version Upgrade 3.3 to 3.4",
|
||||
"description": "Upgrades configurations from Cura 3.3 to Cura 3.4.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -754,7 +754,7 @@
|
||||
"display_name": "Version Upgrade 3.4 to 3.5",
|
||||
"description": "Upgrades configurations from Cura 3.4 to Cura 3.5.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -771,7 +771,7 @@
|
||||
"display_name": "Version Upgrade 3.5 to 4.0",
|
||||
"description": "Upgrades configurations from Cura 3.5 to Cura 4.0.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -788,7 +788,7 @@
|
||||
"display_name": "Version Upgrade 4.0 to 4.1",
|
||||
"description": "Upgrades configurations from Cura 4.0 to Cura 4.1.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -805,7 +805,7 @@
|
||||
"display_name": "Version Upgrade 4.1 to 4.2",
|
||||
"description": "Upgrades configurations from Cura 4.1 to Cura 4.2.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -822,7 +822,7 @@
|
||||
"display_name": "Version Upgrade 4.2 to 4.3",
|
||||
"description": "Upgrades configurations from Cura 4.2 to Cura 4.3.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -839,7 +839,7 @@
|
||||
"display_name": "Version Upgrade 4.3 to 4.4",
|
||||
"description": "Upgrades configurations from Cura 4.3 to Cura 4.4.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -856,7 +856,7 @@
|
||||
"display_name": "Version Upgrade 4.4 to 4.5",
|
||||
"description": "Upgrades configurations from Cura 4.4 to Cura 4.5.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -873,7 +873,7 @@
|
||||
"display_name": "Version Upgrade 4.5 to 4.6",
|
||||
"description": "Upgrades configurations from Cura 4.5 to Cura 4.6.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -890,7 +890,7 @@
|
||||
"display_name": "Version Upgrade 4.6.0 to 4.6.2",
|
||||
"description": "Upgrades configurations from Cura 4.6.0 to Cura 4.6.2.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -907,7 +907,7 @@
|
||||
"display_name": "Version Upgrade 4.6.2 to 4.7",
|
||||
"description": "Upgrades configurations from Cura 4.6.2 to Cura 4.7.",
|
||||
"package_version": "1.0.0",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -924,7 +924,7 @@
|
||||
"display_name": "X3D Reader",
|
||||
"description": "Provides support for reading X3D files.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "SevaAlekseyev",
|
||||
@ -941,7 +941,7 @@
|
||||
"display_name": "XML Material Profiles",
|
||||
"description": "Provides capabilities to read and write XML-based material profiles.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -958,7 +958,7 @@
|
||||
"display_name": "X-Ray View",
|
||||
"description": "Provides the X-Ray view.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -975,7 +975,7 @@
|
||||
"display_name": "Generic ABS",
|
||||
"description": "The generic ABS profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -993,7 +993,7 @@
|
||||
"display_name": "Generic BAM",
|
||||
"description": "The generic BAM profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1011,7 +1011,7 @@
|
||||
"display_name": "Generic CFF CPE",
|
||||
"description": "The generic CFF CPE profile which other profiles can be based upon.",
|
||||
"package_version": "1.1.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1029,7 +1029,7 @@
|
||||
"display_name": "Generic CFF PA",
|
||||
"description": "The generic CFF PA profile which other profiles can be based upon.",
|
||||
"package_version": "1.1.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1047,7 +1047,7 @@
|
||||
"display_name": "Generic CPE",
|
||||
"description": "The generic CPE profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"display_name": "Generic CPE+",
|
||||
"description": "The generic CPE+ profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1083,7 +1083,7 @@
|
||||
"display_name": "Generic GFF CPE",
|
||||
"description": "The generic GFF CPE profile which other profiles can be based upon.",
|
||||
"package_version": "1.1.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1101,7 +1101,7 @@
|
||||
"display_name": "Generic GFF PA",
|
||||
"description": "The generic GFF PA profile which other profiles can be based upon.",
|
||||
"package_version": "1.1.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1119,7 +1119,7 @@
|
||||
"display_name": "Generic HIPS",
|
||||
"description": "The generic HIPS profile which other profiles can be based upon.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1137,7 +1137,7 @@
|
||||
"display_name": "Generic Nylon",
|
||||
"description": "The generic Nylon profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1155,7 +1155,7 @@
|
||||
"display_name": "Generic PC",
|
||||
"description": "The generic PC profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1173,7 +1173,7 @@
|
||||
"display_name": "Generic PETG",
|
||||
"description": "The generic PETG profile which other profiles can be based upon.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1191,7 +1191,7 @@
|
||||
"display_name": "Generic PLA",
|
||||
"description": "The generic PLA profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1209,7 +1209,7 @@
|
||||
"display_name": "Generic PP",
|
||||
"description": "The generic PP profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1227,7 +1227,7 @@
|
||||
"display_name": "Generic PVA",
|
||||
"description": "The generic PVA profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1245,7 +1245,7 @@
|
||||
"display_name": "Generic Tough PLA",
|
||||
"description": "The generic Tough PLA profile which other profiles can be based upon.",
|
||||
"package_version": "1.0.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1263,7 +1263,7 @@
|
||||
"display_name": "Generic TPU",
|
||||
"description": "The generic TPU profile which other profiles can be based upon.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://github.com/Ultimaker/fdm_materials",
|
||||
"author": {
|
||||
"author_id": "Generic",
|
||||
@ -1281,7 +1281,7 @@
|
||||
"display_name": "Dagoma Chromatik PLA",
|
||||
"description": "Filament testé et approuvé pour les imprimantes 3D Dagoma. Chromatik est l'idéal pour débuter et suivre les tutoriels premiers pas. Il vous offre qualité et résistance pour chacune de vos impressions.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://dagoma.fr/boutique/filaments.html",
|
||||
"author": {
|
||||
"author_id": "Dagoma",
|
||||
@ -1298,7 +1298,7 @@
|
||||
"display_name": "FABtotum ABS",
|
||||
"description": "This material is easy to be extruded but it is not the simplest to use. It is one of the most used in 3D printing to get very well finished objects. It is not sustainable and its smoke can be dangerous if inhaled. The reason to prefer this filament to PLA is mainly because of its precision and mechanical specs. ABS (for plastic) stands for Acrylonitrile Butadiene Styrene and it is a thermoplastic which is widely used in everyday objects. It can be printed with any FFF 3D printer which can get to high temperatures as it must be extruded in a range between 220° and 245°, so it’s compatible with all versions of the FABtotum Personal fabricator.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=40",
|
||||
"author": {
|
||||
"author_id": "FABtotum",
|
||||
@ -1315,7 +1315,7 @@
|
||||
"display_name": "FABtotum Nylon",
|
||||
"description": "When 3D printing started this material was not listed among the extrudable filaments. It is flexible as well as resistant to tractions. It is well known for its uses in textile but also in industries which require a strong and flexible material. There are different kinds of Nylon: 3D printing mostly uses Nylon 6 and Nylon 6.6, which are the most common. It requires higher temperatures to be printed, so a 3D printer must be able to reach them (around 240°C): the FABtotum, of course, can.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=53",
|
||||
"author": {
|
||||
"author_id": "FABtotum",
|
||||
@ -1332,7 +1332,7 @@
|
||||
"display_name": "FABtotum PLA",
|
||||
"description": "It is the most common filament used for 3D printing. It is studied to be bio-degradable as it comes from corn starch’s sugar mainly. It is completely made of renewable sources and has no footprint on polluting. PLA stands for PolyLactic Acid and it is a thermoplastic that today is still considered the easiest material to be 3D printed. It can be extruded at lower temperatures: the standard range of FABtotum’s one is between 185° and 195°.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=39",
|
||||
"author": {
|
||||
"author_id": "FABtotum",
|
||||
@ -1349,7 +1349,7 @@
|
||||
"display_name": "FABtotum TPU Shore 98A",
|
||||
"description": "",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=66",
|
||||
"author": {
|
||||
"author_id": "FABtotum",
|
||||
@ -1366,7 +1366,7 @@
|
||||
"display_name": "Fiberlogy HD PLA",
|
||||
"description": "With our HD PLA you have many more options. You can use this material in two ways. Choose the one you like best. You can use it as a normal PLA and get prints characterized by a very good adhesion between the layers and high precision. You can also make your prints acquire similar properties to that of ABS – better impact resistance and high temperature resistance. All you need is an oven. Yes, an oven! By annealing our HD PLA in an oven, in accordance with the manual, you will avoid all the inconveniences of printing with ABS, such as unpleasant odour or hazardous fumes.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "http://fiberlogy.com/en/fiberlogy-filaments/filament-hd-pla/",
|
||||
"author": {
|
||||
"author_id": "Fiberlogy",
|
||||
@ -1383,7 +1383,7 @@
|
||||
"display_name": "Filo3D PLA",
|
||||
"description": "Fast, safe and reliable printing. PLA is ideal for the fast and reliable printing of parts and prototypes with a great surface quality.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://dagoma.fr",
|
||||
"author": {
|
||||
"author_id": "Dagoma",
|
||||
@ -1400,7 +1400,7 @@
|
||||
"display_name": "IMADE3D JellyBOX PETG",
|
||||
"description": "",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "http://shop.imade3d.com/filament.html",
|
||||
"author": {
|
||||
"author_id": "IMADE3D",
|
||||
@ -1417,7 +1417,7 @@
|
||||
"display_name": "IMADE3D JellyBOX PLA",
|
||||
"description": "",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "http://shop.imade3d.com/filament.html",
|
||||
"author": {
|
||||
"author_id": "IMADE3D",
|
||||
@ -1434,7 +1434,7 @@
|
||||
"display_name": "Octofiber PLA",
|
||||
"description": "PLA material from Octofiber.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://nl.octofiber.com/3d-printing-filament/pla.html",
|
||||
"author": {
|
||||
"author_id": "Octofiber",
|
||||
@ -1451,7 +1451,7 @@
|
||||
"display_name": "PolyFlex™ PLA",
|
||||
"description": "PolyFlex™ is a highly flexible yet easy to print 3D printing material. Featuring good elasticity and a large strain-to- failure, PolyFlex™ opens up a completely new realm of applications.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "http://www.polymaker.com/shop/polyflex/",
|
||||
"author": {
|
||||
"author_id": "Polymaker",
|
||||
@ -1468,7 +1468,7 @@
|
||||
"display_name": "PolyMax™ PLA",
|
||||
"description": "PolyMax™ PLA is a 3D printing material with excellent mechanical properties and printing quality. PolyMax™ PLA has an impact resistance of up to nine times that of regular PLA, and better overall mechanical properties than ABS.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "http://www.polymaker.com/shop/polymax/",
|
||||
"author": {
|
||||
"author_id": "Polymaker",
|
||||
@ -1485,7 +1485,7 @@
|
||||
"display_name": "PolyPlus™ PLA True Colour",
|
||||
"description": "PolyPlus™ PLA is a premium PLA designed for all desktop FDM/FFF 3D printers. It is produced with our patented Jam-Free™ technology that ensures consistent extrusion and prevents jams.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "http://www.polymaker.com/shop/polyplus-true-colour/",
|
||||
"author": {
|
||||
"author_id": "Polymaker",
|
||||
@ -1502,7 +1502,7 @@
|
||||
"display_name": "PolyWood™ PLA",
|
||||
"description": "PolyWood™ is a wood mimic printing material that contains no actual wood ensuring a clean Jam-Free™ printing experience.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "http://www.polymaker.com/shop/polywood/",
|
||||
"author": {
|
||||
"author_id": "Polymaker",
|
||||
@ -1519,7 +1519,7 @@
|
||||
"display_name": "Ultimaker ABS",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/abs",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1538,7 +1538,7 @@
|
||||
"display_name": "Ultimaker Breakaway",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/breakaway",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1557,7 +1557,7 @@
|
||||
"display_name": "Ultimaker CPE",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/abs",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1576,7 +1576,7 @@
|
||||
"display_name": "Ultimaker CPE+",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/cpe",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1595,7 +1595,7 @@
|
||||
"display_name": "Ultimaker Nylon",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/abs",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1614,7 +1614,7 @@
|
||||
"display_name": "Ultimaker PC",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/pc",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1633,7 +1633,7 @@
|
||||
"display_name": "Ultimaker PLA",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/abs",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1652,7 +1652,7 @@
|
||||
"display_name": "Ultimaker PP",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/pp",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1671,7 +1671,7 @@
|
||||
"display_name": "Ultimaker PVA",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/abs",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1690,7 +1690,7 @@
|
||||
"display_name": "Ultimaker TPU 95A",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.2.2",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/tpu-95a",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1709,7 +1709,7 @@
|
||||
"display_name": "Ultimaker Tough PLA",
|
||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||
"package_version": "1.0.3",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://ultimaker.com/products/materials/tough-pla",
|
||||
"author": {
|
||||
"author_id": "UltimakerPackages",
|
||||
@ -1728,7 +1728,7 @@
|
||||
"display_name": "Vertex Delta ABS",
|
||||
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://vertex3dprinter.eu",
|
||||
"author": {
|
||||
"author_id": "Velleman",
|
||||
@ -1745,7 +1745,7 @@
|
||||
"display_name": "Vertex Delta PET",
|
||||
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://vertex3dprinter.eu",
|
||||
"author": {
|
||||
"author_id": "Velleman",
|
||||
@ -1762,7 +1762,7 @@
|
||||
"display_name": "Vertex Delta PLA",
|
||||
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://vertex3dprinter.eu",
|
||||
"author": {
|
||||
"author_id": "Velleman",
|
||||
@ -1779,7 +1779,7 @@
|
||||
"display_name": "Vertex Delta TPU",
|
||||
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
||||
"package_version": "1.0.1",
|
||||
"sdk_version": "7.2.0",
|
||||
"sdk_version": "7.3.0",
|
||||
"website": "https://vertex3dprinter.eu",
|
||||
"author": {
|
||||
"author_id": "Velleman",
|
||||
|
@ -243,7 +243,7 @@
|
||||
|
||||
"support_angle": { "value": "math.floor(math.degrees(math.atan(line_width/2.0/layer_height)))" },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_infill_rate": { "value": "0 if support_tree_enable else 20" },
|
||||
"support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" },
|
||||
"support_use_towers": { "value": false },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
|
||||
|
40
resources/definitions/cubicon_style_neo_a22.def.json
Normal file
40
resources/definitions/cubicon_style_neo_a22.def.json
Normal file
@ -0,0 +1,40 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Cubicon Style Neo-A22",
|
||||
"inherits": "cubicon_common",
|
||||
"metadata": {
|
||||
"author": "Cubicon R&D Center",
|
||||
"manufacturer": "Cubicon",
|
||||
"visible": true,
|
||||
"file_formats": "text/x-gcode",
|
||||
"supports_usb_connection": false,
|
||||
"machine_extruder_trains": {
|
||||
"0": "cubicon_style_neo_a22_extruder_0"
|
||||
},
|
||||
"platform_offset": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"overrides": {
|
||||
"machine_name": {
|
||||
"default_value": "Cubicon Style Neo-A22"
|
||||
},
|
||||
"machine_start_gcode": {
|
||||
"default_value": "M911 Style Neo-A22\nM201 X400 Y400\nM202 X400 Y400\nG28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0"
|
||||
},
|
||||
"machine_width": {
|
||||
"default_value": 220
|
||||
},
|
||||
"machine_depth": {
|
||||
"default_value": 220
|
||||
},
|
||||
"machine_height": {
|
||||
"default_value": 220
|
||||
},
|
||||
"material_bed_temp_wait":{
|
||||
"default_value": false
|
||||
}
|
||||
}
|
||||
}
|
89
resources/definitions/diy220.def.json
Normal file
89
resources/definitions/diy220.def.json
Normal file
@ -0,0 +1,89 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Diytech 220",
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Venkatkamesh",
|
||||
"manufacturer": "Sri Vignan Technologies",
|
||||
"weight": 3,
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform": "ultimaker3_platform.obj",
|
||||
"platform_texture": "svtbacktext.png",
|
||||
"platform_offset": [0, 0, 0],
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"preferred_variant_name": "0.4 mm",
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
"0": "diy220_extruder_0"
|
||||
}
|
||||
},
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "Diytech 220" },
|
||||
"machine_start_gcode" : {
|
||||
"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\\nG28 Z0 ;move Z to bottom endstops\\nG28 X0 Y0 ;move X/Y to endstops\\nG1 X15 Y0 F4000 ;move X/Y to front of printer\\nG1 Z15.0 F9000 ;move the platform to 15mm\\nG92 E0 ;zero the extruded length\\nG1 F200 E50 ;extrude 10 mm of feed stock\\nG92 E0 ;zero the extruded length again\\nG1 F9000\\n;Put printing message on LCD screen\\nM117 Printing...\""
|
||||
},
|
||||
"machine_end_gcode" : {
|
||||
"value": "\";Version _2.6 of the firmware can abort the print too early if the file ends\\n;too soon. However if the file hasn't ended yet because there are comments at\\n;the end of the file, it won't abort yet. Therefore we have to put at least 512\\n;bytes at the end of the g-code so that the file is not yet finished by the\\n;time that the motion planner gets flushed. With firmware version _3.3 this\\n;should be fixed, so this comment wouldn't be necessary any more. Now we have\\n;to pad this text to make precisely 512 bytes.\" if machine_gcode_flavor == \"UltiGCode\" else \"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\\n;Version _2.6 of the firmware can abort the print too early if the file ends\\n;too soon. However if the file hasn't ended yet because there are comments at\\n;the end of the file, it won't abort yet. Therefore we have to put at least 512\\n;bytes at the end of the g-code so that the file is not yet finished by the\\n;time that the motion planner gets flushed. With firmware version _3.3 this\\n;should be fixed, so this comment wouldn't be necessary any more. Now we have\\n;to pad this text to make precisely 512 bytes.\""
|
||||
},
|
||||
"machine_width": {
|
||||
"default_value": 220
|
||||
},
|
||||
"machine_depth": {
|
||||
"default_value": 220
|
||||
},
|
||||
"machine_height": {
|
||||
"default_value": 305
|
||||
},
|
||||
"machine_heated_bed": {
|
||||
"default_value": true
|
||||
},
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"default_value": [
|
||||
[ -42, 12 ],
|
||||
[ -42, -32 ],
|
||||
[ 62, 12 ],
|
||||
[ 62, -32 ]
|
||||
]
|
||||
},
|
||||
"machine_center_is_zero": {
|
||||
"default_value": false
|
||||
},
|
||||
"gantry_height": {
|
||||
"value": "48"
|
||||
},
|
||||
"machine_use_extruder_offset_to_offset_coords": {
|
||||
"default_value": true
|
||||
},
|
||||
"machine_gcode_flavor": {
|
||||
"default_value": "Marlin"
|
||||
},
|
||||
"machine_disallowed_areas": {
|
||||
"default_value": [
|
||||
[[-115, 112.5], [ -82, 112.5], [ -84, 102.5], [-115, 102.5]],
|
||||
[[ 115, 112.5], [ 115, 102.5], [ 110, 102.5], [ 108, 112.5]],
|
||||
[[-115, -112.5], [-115, -104.5], [ -84, -104.5], [ -82, -112.5]],
|
||||
[[ 115, -112.5], [ 108, -112.5], [ 110, -104.5], [ 115, -104.5]]
|
||||
]},
|
||||
"machine_nozzle_tip_outer_diameter": {
|
||||
"default_value": 1
|
||||
},
|
||||
"machine_nozzle_head_distance": {
|
||||
"default_value": 3
|
||||
},
|
||||
"machine_max_feedrate_x": {
|
||||
"default_value": 300
|
||||
},
|
||||
"machine_max_feedrate_y": {
|
||||
"default_value": 300
|
||||
},
|
||||
"machine_max_feedrate_z": {
|
||||
"default_value": 40
|
||||
},
|
||||
"machine_acceleration": {
|
||||
"default_value": 3000
|
||||
}
|
||||
}
|
||||
}
|
@ -70,7 +70,7 @@
|
||||
"jerk_print": { "default_value": 10 },
|
||||
|
||||
"support_angle": { "default_value": 65 },
|
||||
"support_brim_enable": { "default_value": true },
|
||||
"support_brim_enable": { "value": true },
|
||||
|
||||
"adhesion_type": { "default_value": "skirt" },
|
||||
"brim_outside_only": { "default_value": false },
|
||||
|
@ -2625,7 +2625,7 @@
|
||||
"minimum_value": "5",
|
||||
"minimum_value_warning": "50",
|
||||
"maximum_value_warning": "150",
|
||||
"enabled": "support_enable",
|
||||
"enabled": "support_enable or support_meshes_present",
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
@ -2641,7 +2641,7 @@
|
||||
"minimum_value": "5",
|
||||
"minimum_value_warning": "50",
|
||||
"maximum_value_warning": "150",
|
||||
"enabled": "support_enable and support_interface_enable",
|
||||
"enabled": "(support_enable or support_meshes_present) and support_interface_enable",
|
||||
"limit_to_extruder": "support_interface_extruder_nr",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true,
|
||||
@ -2658,7 +2658,7 @@
|
||||
"minimum_value": "5",
|
||||
"minimum_value_warning": "50",
|
||||
"maximum_value_warning": "150",
|
||||
"enabled": "support_enable and support_roof_enable",
|
||||
"enabled": "(support_enable or support_meshes_present) and support_roof_enable",
|
||||
"limit_to_extruder": "support_roof_extruder_nr",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
@ -2674,7 +2674,7 @@
|
||||
"minimum_value": "5",
|
||||
"minimum_value_warning": "50",
|
||||
"maximum_value_warning": "150",
|
||||
"enabled": "support_enable and support_bottom_enable",
|
||||
"enabled": "(support_enable or support_meshes_present) and support_bottom_enable",
|
||||
"limit_to_extruder": "support_bottom_extruder_nr",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
@ -4175,14 +4175,14 @@
|
||||
"support_structure":
|
||||
{
|
||||
"label": "Support Structure",
|
||||
"description": "Generate a tree-like support ",
|
||||
"description": "Chooses between the techniques available to generate support. \"Normal\" support creates a support structure directly below the overhanging parts and drops those areas straight down. \"Tree\" support creates branches towards the overhanging areas that support the model on the tips of those branches, and allows the branches to crawl around the model to support it from the build plate as much as possible.",
|
||||
"type": "enum",
|
||||
"options":
|
||||
{
|
||||
"normal": "Normal",
|
||||
"tree": "Tree"
|
||||
},
|
||||
"enabled": "support_enable or support_meshes_present",
|
||||
"enabled": "support_enable",
|
||||
"default_value": "normal",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
@ -4413,6 +4413,7 @@
|
||||
"description": "Generate a brim within the support infill regions of the first layer. This brim is printed underneath the support, not around it. Enabling this setting increases the adhesion of support to the build plate.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"value": "support_structure == 'tree'",
|
||||
"enabled": "support_enable or support_meshes_present",
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": false,
|
||||
@ -4585,7 +4586,7 @@
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"minimum_value_warning": "0",
|
||||
"maximum_value_warning": "10",
|
||||
"enabled": "support_enable or support_meshes_present",
|
||||
"enabled": "support_enable and support_structure == 'normal'",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"support_offset":
|
||||
@ -4598,7 +4599,7 @@
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"minimum_value_warning": "-1 * machine_nozzle_size",
|
||||
"maximum_value_warning": "10 * machine_nozzle_size",
|
||||
"enabled": "support_enable or support_meshes_present",
|
||||
"enabled": "(support_enable and support_structure == 'normal') or support_meshes_present",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"support_infill_sparse_thickness":
|
||||
@ -4651,7 +4652,7 @@
|
||||
"default_value": 0.0,
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "5",
|
||||
"enabled": "support_enable or support_meshes_present",
|
||||
"enabled": "support_enable and support_structure == 'normal'",
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
@ -5048,7 +5049,7 @@
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"enabled": "support_enable",
|
||||
"enabled": "support_enable and support_structure == 'normal'",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"support_tower_diameter":
|
||||
@ -5062,7 +5063,7 @@
|
||||
"minimum_value": "0",
|
||||
"minimum_value_warning": "2 * machine_nozzle_size",
|
||||
"maximum_value_warning": "20",
|
||||
"enabled": "support_enable and support_use_towers",
|
||||
"enabled": "support_enable and support_structure == 'normal' and support_use_towers",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"support_tower_maximum_supported_diameter":
|
||||
@ -5077,7 +5078,7 @@
|
||||
"minimum_value_warning": "2 * machine_nozzle_size",
|
||||
"maximum_value_warning": "20",
|
||||
"maximum_value": "support_tower_diameter",
|
||||
"enabled": "support_enable and support_use_towers",
|
||||
"enabled": "support_enable and support_structure == 'normal' and support_use_towers",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"support_tower_roof_angle":
|
||||
@ -5090,7 +5091,7 @@
|
||||
"maximum_value": "90",
|
||||
"default_value": 65,
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"enabled": "support_enable and support_use_towers",
|
||||
"enabled": "support_enable and support_structure == 'normal' and support_use_towers",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"support_mesh_drop_down":
|
||||
@ -6597,7 +6598,7 @@
|
||||
"description": "Make support areas smaller at the bottom than at the overhang.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"enabled": "support_enable",
|
||||
"enabled": "support_enable and support_structure != 'tree'",
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
@ -6612,7 +6613,7 @@
|
||||
"maximum_value_warning": "45",
|
||||
"maximum_value": "90",
|
||||
"default_value": 30,
|
||||
"enabled": "support_conical_enabled and support_enable",
|
||||
"enabled": "support_conical_enabled and support_enable and support_structure != 'tree'",
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
@ -6626,7 +6627,7 @@
|
||||
"minimum_value_warning": "machine_nozzle_size * 3",
|
||||
"maximum_value_warning": "100.0",
|
||||
"type": "float",
|
||||
"enabled": "support_conical_enabled and support_enable and support_conical_angle > 0",
|
||||
"enabled": "support_conical_enabled and support_enable and support_structure != 'tree' and support_conical_angle > 0",
|
||||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
|
@ -102,7 +102,7 @@
|
||||
|
||||
"support_angle": { "value": "math.floor(math.degrees(math.atan(line_width/2.0/layer_height)))" },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_infill_rate": { "value": "0 if support_tree_enable else 20" },
|
||||
"support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" },
|
||||
"support_z_distance": { "value": "layer_height if layer_height >= 0.16 else layer_height*2" },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
"support_xy_overrides_z": { "value": "'xy_overrides_z'" },
|
||||
|
@ -12,7 +12,7 @@
|
||||
"exclude_materials": [
|
||||
"chromatik_pla",
|
||||
"dsm_arnitel2045_175", "dsm_novamid1070_175",
|
||||
"emotiontech_abs", "emotiontech_asax", "emotiontech_hips", "emotiontech_petg", "emotiontech_pla", "emotiontech_pva-m", "emotiontech_pva-oks", "emotiontech_pva-s", "emotiontech_tpu98a",
|
||||
"emotiontech_abs", "emotiontech_asax", "emotiontech_hips", "emotiontech_petg", "emotiontech_pla", "emotiontech_pva-m", "emotiontech_pva-oks", "emotiontech_pva-s", "emotiontech_tpu98a", "emotiontech_absx", "emotiontech_bvoh",
|
||||
"eSUN_PETG_Black", "eSUN_PETG_Grey", "eSUN_PETG_Purple", "eSUN_PLA_PRO_Black", "eSUN_PLA_PRO_Grey", "eSUN_PLA_PRO_Purple", "eSUN_PLA_PRO_White",
|
||||
"fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu",
|
||||
"fiberlogy_hd_pla",
|
||||
@ -104,7 +104,7 @@
|
||||
"ironing_inset": {"value": "ironing_line_spacing + (ironing_line_spacing - skin_line_width * (1.0 + ironing_flow / 100) / 2 if ironing_pattern == 'concentric' else skin_line_width * (1.0 - ironing_flow / 100) / 2)"},
|
||||
"speed_ironing": {"value": "150"},
|
||||
|
||||
"infill_sparse_density": {"value": 30},
|
||||
"infill_sparse_density": {"value": 100},
|
||||
"infill_pattern": {"value": "'lines'"},
|
||||
"infill_before_walls": {"value": true},
|
||||
|
||||
|
@ -248,7 +248,7 @@
|
||||
|
||||
"support_angle": { "value": "math.floor(math.degrees(math.atan(line_width/2.0/layer_height)))" },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_infill_rate": { "value": "0 if support_tree_enable else 20" },
|
||||
"support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" },
|
||||
"support_use_towers": { "value": false },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
|
||||
|
@ -143,7 +143,7 @@
|
||||
|
||||
"support_angle": { "value": "math.floor(math.degrees(math.atan(line_width/2.0/layer_height)))" },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_infill_rate": { "value": "0 if support_tree_enable else 20" },
|
||||
"support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" },
|
||||
"support_use_towers": { "value": false },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
|
||||
|
@ -0,0 +1,26 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "cubicon_style_neo_a22",
|
||||
"position": "0"
|
||||
},
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 0
|
||||
},
|
||||
"machine_nozzle_size": {
|
||||
"default_value": 0.4
|
||||
},
|
||||
"machine_nozzle_offset_x": {
|
||||
"default_value": -3.20
|
||||
},
|
||||
"machine_nozzle_offset_y": {
|
||||
"default_value": -4.70
|
||||
},
|
||||
"material_diameter": {
|
||||
"default_value": 1.75
|
||||
}
|
||||
}
|
||||
}
|
15
resources/extruders/diy220_extruder_0.def.json
Normal file
15
resources/extruders/diy220_extruder_0.def.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "diy220",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Cura 4.6\n"
|
||||
"Project-Id-Version: Cura 4.7\n"
|
||||
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
|
||||
"POT-Creation-Date: 2020-04-06 16:33+0000\n"
|
||||
"POT-Creation-Date: 2020-07-31 12:48+0000\n"
|
||||
"PO-Revision-Date: 2020-02-20 17:30+0100\n"
|
||||
"Last-Translator: DenyCZ <www.github.com/DenyCZ>\n"
|
||||
"Language-Team: DenyCZ <www.github.com/DenyCZ>\n"
|
||||
|
@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Cura 4.6\n"
|
||||
"Project-Id-Version: Cura 4.7\n"
|
||||
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
|
||||
"POT-Creation-Date: 2020-04-06 16:33+0000\n"
|
||||
"POT-Creation-Date: 2020-07-31 14:10+0000\n"
|
||||
"PO-Revision-Date: 2020-04-07 11:21+0200\n"
|
||||
"Last-Translator: DenyCZ <www.github.com/DenyCZ>\n"
|
||||
"Language-Team: DenyCZ <www.github.com/DenyCZ>\n"
|
||||
@ -223,6 +223,16 @@ msgctxt "machine_heated_build_volume description"
|
||||
msgid "Whether the machine is able to stabilize the build volume temperature."
|
||||
msgstr "Zda je zařízení schopno stabilizovat teplotu podložky."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "machine_always_write_active_tool label"
|
||||
msgid "Always Write Active Tool"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "machine_always_write_active_tool description"
|
||||
msgid "Write active tool after sending temp commands to inactive tool. Required for Dual Extruder printing with Smoothie or other firmware with modal tool commands."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "machine_center_is_zero label"
|
||||
msgid "Is Center Origin"
|
||||
@ -3472,6 +3482,76 @@ msgctxt "support_bottom_extruder_nr description"
|
||||
msgid "The extruder train to use for printing the floors of the support. This is used in multi-extrusion."
|
||||
msgstr "Vytlačovací stroj se používá pro tisk podlah podpěry. To se používá při vícenásobném vytlačování."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_structure label"
|
||||
msgid "Support Structure"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_structure description"
|
||||
msgid "Chooses between the techniques available to generate support. \"Normal\" support creates a support structure directly below the overhanging parts and drops those areas straight down. \"Tree\" support creates branches towards the overhanging areas that support the model on the tips of those branches, and allows the branches to crawl around the model to support it from the build plate as much as possible."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_structure option normal"
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_structure option tree"
|
||||
msgid "Tree"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_angle label"
|
||||
msgid "Tree Support Branch Angle"
|
||||
msgstr "Úhel větve stromové podpory"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_angle description"
|
||||
msgid "The angle of the branches. Use a lower angle to make them more vertical and more stable. Use a higher angle to be able to have more reach."
|
||||
msgstr "Úhel větví. Použijte nižší úhel, aby byly více vertikální a stabilnější. K dosažení většího dosahu použijte vyšší úhel."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_distance label"
|
||||
msgid "Tree Support Branch Distance"
|
||||
msgstr "Vzdálenost větví stromu"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_distance description"
|
||||
msgid "How far apart the branches need to be when they touch the model. Making this distance small will cause the tree support to touch the model at more points, causing better overhang but making support harder to remove."
|
||||
msgstr "Jak daleko od sebe musí být větve, když se dotýkají modelu. Zmenšení této vzdálenosti způsobí, že se stromová podpora dotkne modelu ve více bodech, což způsobí lepší přesah, ale těžší odstranění podpory."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_diameter label"
|
||||
msgid "Tree Support Branch Diameter"
|
||||
msgstr "Průměr větve podpěry stromu"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_diameter description"
|
||||
msgid "The diameter of the thinnest branches of tree support. Thicker branches are more sturdy. Branches towards the base will be thicker than this."
|
||||
msgstr "Průměr větve stromu podpory Průměr nejtenčí větve stromu podpory. Silnější větve jsou odolnější. Větve směrem k základně budou silnější než tato."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_diameter_angle label"
|
||||
msgid "Tree Support Branch Diameter Angle"
|
||||
msgstr "Průměr úhlu větve podpěry stromu"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_diameter_angle description"
|
||||
msgid "The angle of the branches' diameter as they gradually become thicker towards the bottom. An angle of 0 will cause the branches to have uniform thickness over their length. A bit of an angle can increase stability of the tree support."
|
||||
msgstr "The angle of the branches' diameter as they gradually become thicker towards the bottom. An angle of 0 will cause the branches to have uniform thickness over their length. A bit of an angle can increase stability of the tree support."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_collision_resolution label"
|
||||
msgid "Tree Support Collision Resolution"
|
||||
msgstr "Stromová podpora - rozlišení kolize"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_collision_resolution description"
|
||||
msgid "Resolution to compute collisions with to avoid hitting the model. Setting this lower will produce more accurate trees that fail less often, but increases slicing time dramatically."
|
||||
msgstr "Rozlišení pro výpočet kolizí, aby nedošlo k nárazu do modelu. Nastavením této nižší se vytvoří přesnější stromy, které selhávají méně často, ale dramaticky se zvyšuje doba slicování."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_type label"
|
||||
msgid "Support Placement"
|
||||
@ -3737,6 +3817,16 @@ msgctxt "support_bottom_stair_step_width description"
|
||||
msgid "The maximum width of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures."
|
||||
msgstr "Maximální šířka schodů schodišťového dna podpory spočívá na modelu. Nízká hodnota ztěžuje odstranění podpory, ale příliš vysoké hodnoty mohou vést k nestabilním podpůrným strukturám."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_bottom_stair_step_min_slope label"
|
||||
msgid "Support Stair Step Minimum Slope Angle"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_bottom_stair_step_min_slope description"
|
||||
msgid "The minimum slope of the area for stair-stepping to take effect. Low values should make support easier to remove on shallower slopes, but really low values may result in some very counter-intuitive results on other parts of the model."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_join_distance label"
|
||||
msgid "Support Join Distance"
|
||||
@ -4182,6 +4272,16 @@ msgctxt "support_mesh_drop_down description"
|
||||
msgid "Make support everywhere below the support mesh, so that there's no overhang in the support mesh."
|
||||
msgstr "Podpořte všude pod podpůrnou sítí, aby v podpůrné síti nebyl přesah."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_meshes_present label"
|
||||
msgid "Scene Has Support Meshes"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_meshes_present description"
|
||||
msgid "There are support meshes present in the scene. This setting is controlled by Cura."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "platform_adhesion label"
|
||||
msgid "Build Plate Adhesion"
|
||||
@ -4943,8 +5043,8 @@ msgstr "Tisková sekvence"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "print_sequence description"
|
||||
msgid "Whether to print all models one layer at a time or to wait for one model to finish, before moving on to the next. One at a time mode is possible if a) only one extruder is enabled and b) all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes. "
|
||||
msgstr "Zda se mají tisknout všechny modely po jedné vrstvě najednou, nebo počkat na dokončení jednoho modelu, než se přesunete na další. Jeden za časovým režimem je možný, pokud a) je povolen pouze jeden extruder ab) všechny modely jsou odděleny tak, že celá tisková hlava se může pohybovat mezi a všechny modely jsou menší než vzdálenost mezi tryskou a X / Osy Y. "
|
||||
msgid "Whether to print all models one layer at a time or to wait for one model to finish, before moving on to the next. One at a time mode is possible if a) only one extruder is enabled and b) all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "print_sequence option all_at_once"
|
||||
@ -4968,13 +5068,13 @@ msgstr "Pomocí této mřížky můžete upravit výplň dalších sítí, s nim
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "infill_mesh_order label"
|
||||
msgid "Infill Mesh Order"
|
||||
msgstr "Pořadí sítě výplně"
|
||||
msgid "Mesh Processing Rank"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "infill_mesh_order description"
|
||||
msgid "Determines which infill mesh is inside the infill of another infill mesh. An infill mesh with a higher order will modify the infill of infill meshes with lower order and normal meshes."
|
||||
msgstr "Určuje, která výplň je uvnitř výplně jiné výplně. Výplňová síť s vyšším pořádkem upraví výplň síťových výplní s nižším řádem a normálními oky."
|
||||
msgid "Determines the priority of this mesh when considering overlapping volumes. Areas where multiple meshes reside will be won by the lower rank mesh. An infill mesh with a higher order will modify the infill of infill meshes with lower order and normal meshes."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "cutting_mesh label"
|
||||
@ -5111,66 +5211,6 @@ msgctxt "experimental description"
|
||||
msgid "Features that haven't completely been fleshed out yet."
|
||||
msgstr "Nové vychytávky, které ještě nejsou venku."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_enable label"
|
||||
msgid "Tree Support"
|
||||
msgstr "Stromová podpora"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_enable description"
|
||||
msgid "Generate a tree-like support with branches that support your print. This may reduce material usage and print time, but greatly increases slicing time."
|
||||
msgstr "Vygenerujte stromovou podporu s větvemi, které podporují váš tisk. To může snížit spotřebu materiálu a dobu tisku, ale výrazně prodlužuje dobu slicování."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_angle label"
|
||||
msgid "Tree Support Branch Angle"
|
||||
msgstr "Úhel větve stromové podpory"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_angle description"
|
||||
msgid "The angle of the branches. Use a lower angle to make them more vertical and more stable. Use a higher angle to be able to have more reach."
|
||||
msgstr "Úhel větví. Použijte nižší úhel, aby byly více vertikální a stabilnější. K dosažení většího dosahu použijte vyšší úhel."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_distance label"
|
||||
msgid "Tree Support Branch Distance"
|
||||
msgstr "Vzdálenost větví stromu"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_distance description"
|
||||
msgid "How far apart the branches need to be when they touch the model. Making this distance small will cause the tree support to touch the model at more points, causing better overhang but making support harder to remove."
|
||||
msgstr "Jak daleko od sebe musí být větve, když se dotýkají modelu. Zmenšení této vzdálenosti způsobí, že se stromová podpora dotkne modelu ve více bodech, což způsobí lepší přesah, ale těžší odstranění podpory."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_diameter label"
|
||||
msgid "Tree Support Branch Diameter"
|
||||
msgstr "Průměr větve podpěry stromu"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_diameter description"
|
||||
msgid "The diameter of the thinnest branches of tree support. Thicker branches are more sturdy. Branches towards the base will be thicker than this."
|
||||
msgstr "Průměr větve stromu podpory Průměr nejtenčí větve stromu podpory. Silnější větve jsou odolnější. Větve směrem k základně budou silnější než tato."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_diameter_angle label"
|
||||
msgid "Tree Support Branch Diameter Angle"
|
||||
msgstr "Průměr úhlu větve podpěry stromu"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_branch_diameter_angle description"
|
||||
msgid "The angle of the branches' diameter as they gradually become thicker towards the bottom. An angle of 0 will cause the branches to have uniform thickness over their length. A bit of an angle can increase stability of the tree support."
|
||||
msgstr "The angle of the branches' diameter as they gradually become thicker towards the bottom. An angle of 0 will cause the branches to have uniform thickness over their length. A bit of an angle can increase stability of the tree support."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_collision_resolution label"
|
||||
msgid "Tree Support Collision Resolution"
|
||||
msgstr "Stromová podpora - rozlišení kolize"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_tree_collision_resolution description"
|
||||
msgid "Resolution to compute collisions with to avoid hitting the model. Setting this lower will produce more accurate trees that fail less often, but increases slicing time dramatically."
|
||||
msgstr "Rozlišení pro výpočet kolizí, aby nedošlo k nárazu do modelu. Nastavením této nižší se vytvoří přesnější stromy, které selhávají méně často, ale dramaticky se zvyšuje doba slicování."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "slicing_tolerance label"
|
||||
msgid "Slicing Tolerance"
|
||||
@ -5178,8 +5218,8 @@ msgstr "Tolerance slicování"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "slicing_tolerance description"
|
||||
msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process."
|
||||
msgstr "Jak krájet vrstvy s diagonálními povrchy. Oblasti vrstvy mohou být generovány na základě toho, kde střed vrstvy protíná povrch (Střední). Alternativně každá vrstva může mít oblasti, které padají uvnitř objemu po celé výšce vrstvy (Exkluzivní), nebo vrstva má oblasti, které padají dovnitř kdekoli v rámci vrstvy (Inkluzivní). Exkluzivní zachovává co nejvíce podrobností, Inkluzivní dělá to nejlepší a Střední trvá zpracování nejméně času."
|
||||
msgid "Vertical tolerance in the sliced layers. The contours of a layer are normally generated by taking cross sections through the middle of each layer's thickness (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the entire thickness of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Inclusive retains the most details, Exclusive makes for the best fit and Middle stays closest to the original surface."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "slicing_tolerance option middle"
|
||||
@ -5451,76 +5491,6 @@ msgctxt "cross_support_density_image description"
|
||||
msgid "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the support."
|
||||
msgstr "Umístění souboru obrázku, jehož hodnoty jasu určují minimální hustotu na odpovídajícím místě v podpoře."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_infill_enabled label"
|
||||
msgid "Spaghetti Infill"
|
||||
msgstr "Špagetová výplň"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_infill_enabled description"
|
||||
msgid "Print the infill every so often, so that the filament will curl up chaotically inside the object. This reduces print time, but the behaviour is rather unpredictable."
|
||||
msgstr "Výplň tiskněte tak často, aby se vlákno chaoticky stočilo uvnitř objektu. To zkracuje dobu tisku, ale chování je spíše nepředvídatelné."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_infill_stepped label"
|
||||
msgid "Spaghetti Infill Stepping"
|
||||
msgstr "Krokování při špagetové výplni"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_infill_stepped description"
|
||||
msgid "Whether to print spaghetti infill in steps or extrude all the infill filament at the end of the print."
|
||||
msgstr "Zda se má tisknout špagetová výplň po krocích, nebo se vytlačí veškeré výplňové vlákno na konci tisku."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_max_infill_angle label"
|
||||
msgid "Spaghetti Maximum Infill Angle"
|
||||
msgstr "Maximální úhel špagetové výplně"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_max_infill_angle description"
|
||||
msgid "The maximum angle w.r.t. the Z axis of the inside of the print for areas which are to be filled with spaghetti infill afterwards. Lowering this value causes more angled parts in your model to be filled on each layer."
|
||||
msgstr "Maximální úhel osy Z uvnitř tisku pro oblasti, které mají být poté vyplněny špagetovou výplní. Snížení této hodnoty způsobí, že se na každé vrstvě vyplní více šikmých částí modelu."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_max_height label"
|
||||
msgid "Spaghetti Infill Maximum Height"
|
||||
msgstr "Maximální výška špagetové výplně"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_max_height description"
|
||||
msgid "The maximum height of inside space which can be combined and filled from the top."
|
||||
msgstr "Maximální výška vnitřního prostoru, kterou lze kombinovat a naplnit shora."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_inset label"
|
||||
msgid "Spaghetti Inset"
|
||||
msgstr "Špagetová výplň"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_inset description"
|
||||
msgid "The offset from the walls from where the spaghetti infill will be printed."
|
||||
msgstr "Odsazení od stěn, odkud bude vytištěna výplň špaget."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_flow label"
|
||||
msgid "Spaghetti Flow"
|
||||
msgstr "Průtok při špagetové výplni"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_flow description"
|
||||
msgid "Adjusts the density of the spaghetti infill. Note that the Infill Density only controls the line spacing of the filling pattern, not the amount of extrusion for spaghetti infill."
|
||||
msgstr "Upravuje hustotu výplně špaget. Mějte na paměti, že hustota výplně řídí pouze rozteč linií výplňového vzoru, nikoli velikost výtluku pro výplň špaget."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_infill_extra_volume label"
|
||||
msgid "Spaghetti Infill Extra Volume"
|
||||
msgstr "Objem navíc při špagetové výplni"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "spaghetti_infill_extra_volume description"
|
||||
msgid "A correction term to adjust the total volume being extruded each time when filling spaghetti."
|
||||
msgstr "Korekční termín pro úpravu celkového objemu, který se vytlačuje pokaždé, když se plní špagety."
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_conical_enabled label"
|
||||
msgid "Enable Conical Support"
|
||||
@ -6390,6 +6360,86 @@ msgctxt "mesh_rotation_matrix description"
|
||||
msgid "Transformation matrix to be applied to the model when loading it from file."
|
||||
msgstr "Transformační matice, která se použije na model při načítání ze souboru."
|
||||
|
||||
#~ msgctxt "print_sequence description"
|
||||
#~ msgid "Whether to print all models one layer at a time or to wait for one model to finish, before moving on to the next. One at a time mode is possible if a) only one extruder is enabled and b) all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes. "
|
||||
#~ msgstr "Zda se mají tisknout všechny modely po jedné vrstvě najednou, nebo počkat na dokončení jednoho modelu, než se přesunete na další. Jeden za časovým režimem je možný, pokud a) je povolen pouze jeden extruder ab) všechny modely jsou odděleny tak, že celá tisková hlava se může pohybovat mezi a všechny modely jsou menší než vzdálenost mezi tryskou a X / Osy Y. "
|
||||
|
||||
#~ msgctxt "infill_mesh_order label"
|
||||
#~ msgid "Infill Mesh Order"
|
||||
#~ msgstr "Pořadí sítě výplně"
|
||||
|
||||
#~ msgctxt "infill_mesh_order description"
|
||||
#~ msgid "Determines which infill mesh is inside the infill of another infill mesh. An infill mesh with a higher order will modify the infill of infill meshes with lower order and normal meshes."
|
||||
#~ msgstr "Určuje, která výplň je uvnitř výplně jiné výplně. Výplňová síť s vyšším pořádkem upraví výplň síťových výplní s nižším řádem a normálními oky."
|
||||
|
||||
#~ msgctxt "support_tree_enable label"
|
||||
#~ msgid "Tree Support"
|
||||
#~ msgstr "Stromová podpora"
|
||||
|
||||
#~ msgctxt "support_tree_enable description"
|
||||
#~ msgid "Generate a tree-like support with branches that support your print. This may reduce material usage and print time, but greatly increases slicing time."
|
||||
#~ msgstr "Vygenerujte stromovou podporu s větvemi, které podporují váš tisk. To může snížit spotřebu materiálu a dobu tisku, ale výrazně prodlužuje dobu slicování."
|
||||
|
||||
#~ msgctxt "slicing_tolerance description"
|
||||
#~ msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process."
|
||||
#~ msgstr "Jak krájet vrstvy s diagonálními povrchy. Oblasti vrstvy mohou být generovány na základě toho, kde střed vrstvy protíná povrch (Střední). Alternativně každá vrstva může mít oblasti, které padají uvnitř objemu po celé výšce vrstvy (Exkluzivní), nebo vrstva má oblasti, které padají dovnitř kdekoli v rámci vrstvy (Inkluzivní). Exkluzivní zachovává co nejvíce podrobností, Inkluzivní dělá to nejlepší a Střední trvá zpracování nejméně času."
|
||||
|
||||
#~ msgctxt "spaghetti_infill_enabled label"
|
||||
#~ msgid "Spaghetti Infill"
|
||||
#~ msgstr "Špagetová výplň"
|
||||
|
||||
#~ msgctxt "spaghetti_infill_enabled description"
|
||||
#~ msgid "Print the infill every so often, so that the filament will curl up chaotically inside the object. This reduces print time, but the behaviour is rather unpredictable."
|
||||
#~ msgstr "Výplň tiskněte tak často, aby se vlákno chaoticky stočilo uvnitř objektu. To zkracuje dobu tisku, ale chování je spíše nepředvídatelné."
|
||||
|
||||
#~ msgctxt "spaghetti_infill_stepped label"
|
||||
#~ msgid "Spaghetti Infill Stepping"
|
||||
#~ msgstr "Krokování při špagetové výplni"
|
||||
|
||||
#~ msgctxt "spaghetti_infill_stepped description"
|
||||
#~ msgid "Whether to print spaghetti infill in steps or extrude all the infill filament at the end of the print."
|
||||
#~ msgstr "Zda se má tisknout špagetová výplň po krocích, nebo se vytlačí veškeré výplňové vlákno na konci tisku."
|
||||
|
||||
#~ msgctxt "spaghetti_max_infill_angle label"
|
||||
#~ msgid "Spaghetti Maximum Infill Angle"
|
||||
#~ msgstr "Maximální úhel špagetové výplně"
|
||||
|
||||
#~ msgctxt "spaghetti_max_infill_angle description"
|
||||
#~ msgid "The maximum angle w.r.t. the Z axis of the inside of the print for areas which are to be filled with spaghetti infill afterwards. Lowering this value causes more angled parts in your model to be filled on each layer."
|
||||
#~ msgstr "Maximální úhel osy Z uvnitř tisku pro oblasti, které mají být poté vyplněny špagetovou výplní. Snížení této hodnoty způsobí, že se na každé vrstvě vyplní více šikmých částí modelu."
|
||||
|
||||
#~ msgctxt "spaghetti_max_height label"
|
||||
#~ msgid "Spaghetti Infill Maximum Height"
|
||||
#~ msgstr "Maximální výška špagetové výplně"
|
||||
|
||||
#~ msgctxt "spaghetti_max_height description"
|
||||
#~ msgid "The maximum height of inside space which can be combined and filled from the top."
|
||||
#~ msgstr "Maximální výška vnitřního prostoru, kterou lze kombinovat a naplnit shora."
|
||||
|
||||
#~ msgctxt "spaghetti_inset label"
|
||||
#~ msgid "Spaghetti Inset"
|
||||
#~ msgstr "Špagetová výplň"
|
||||
|
||||
#~ msgctxt "spaghetti_inset description"
|
||||
#~ msgid "The offset from the walls from where the spaghetti infill will be printed."
|
||||
#~ msgstr "Odsazení od stěn, odkud bude vytištěna výplň špaget."
|
||||
|
||||
#~ msgctxt "spaghetti_flow label"
|
||||
#~ msgid "Spaghetti Flow"
|
||||
#~ msgstr "Průtok při špagetové výplni"
|
||||
|
||||
#~ msgctxt "spaghetti_flow description"
|
||||
#~ msgid "Adjusts the density of the spaghetti infill. Note that the Infill Density only controls the line spacing of the filling pattern, not the amount of extrusion for spaghetti infill."
|
||||
#~ msgstr "Upravuje hustotu výplně špaget. Mějte na paměti, že hustota výplně řídí pouze rozteč linií výplňového vzoru, nikoli velikost výtluku pro výplň špaget."
|
||||
|
||||
#~ msgctxt "spaghetti_infill_extra_volume label"
|
||||
#~ msgid "Spaghetti Infill Extra Volume"
|
||||
#~ msgstr "Objem navíc při špagetové výplni"
|
||||
|
||||
#~ msgctxt "spaghetti_infill_extra_volume description"
|
||||
#~ msgid "A correction term to adjust the total volume being extruded each time when filling spaghetti."
|
||||
#~ msgstr "Korekční termín pro úpravu celkového objemu, který se vytlačuje pokaždé, když se plní špagety."
|
||||
|
||||
#~ msgctxt "material_guid description"
|
||||
#~ msgid "GUID of the material. This is set automatically. "
|
||||
#~ msgstr "GUID materiálu. Toto je nastaveno automaticky. "
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user