mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Merge remote-tracking branch 'origin/master' into WIP_improve_initialization
This commit is contained in:
commit
eb949472e8
28 changed files with 272 additions and 153 deletions
|
@ -19,7 +19,10 @@ endif()
|
||||||
|
|
||||||
set(CURA_VERSION "master" CACHE STRING "Version name of Cura")
|
set(CURA_VERSION "master" CACHE STRING "Version name of Cura")
|
||||||
set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'")
|
set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'")
|
||||||
set(CURA_PACKAGES_VERSION "" CACHE STRING "Packages version of Cura")
|
set(CURA_SDK_VERSION "" CACHE STRING "SDK version of Cura")
|
||||||
|
set(CURA_CLOUD_API_ROOT "" CACHE STRING "Alternative Cura cloud API root")
|
||||||
|
set(CURA_CLOUD_API_VERSION "" CACHE STRING "Alternative Cura cloud API version")
|
||||||
|
|
||||||
configure_file(${CMAKE_SOURCE_DIR}/cura.desktop.in ${CMAKE_BINARY_DIR}/cura.desktop @ONLY)
|
configure_file(${CMAKE_SOURCE_DIR}/cura.desktop.in ${CMAKE_BINARY_DIR}/cura.desktop @ONLY)
|
||||||
configure_file(cura/CuraVersion.py.in CuraVersion.py @ONLY)
|
configure_file(cura/CuraVersion.py.in CuraVersion.py @ONLY)
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,9 @@ class ArrangeObjectsJob(Job):
|
||||||
nodes_arr = [] # fill with (size, node, offset_shape_arr, hull_shape_arr)
|
nodes_arr = [] # fill with (size, node, offset_shape_arr, hull_shape_arr)
|
||||||
for node in self._nodes:
|
for node in self._nodes:
|
||||||
offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(node, min_offset = self._min_offset)
|
offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(node, min_offset = self._min_offset)
|
||||||
|
if offset_shape_arr is None:
|
||||||
|
Logger.log("w", "Node [%s] could not be converted to an array for arranging...", str(node))
|
||||||
|
continue
|
||||||
nodes_arr.append((offset_shape_arr.arr.shape[0] * offset_shape_arr.arr.shape[1], node, offset_shape_arr, hull_shape_arr))
|
nodes_arr.append((offset_shape_arr.arr.shape[0] * offset_shape_arr.arr.shape[1], node, offset_shape_arr, hull_shape_arr))
|
||||||
|
|
||||||
# Sort the nodes with the biggest area first.
|
# Sort the nodes with the biggest area first.
|
||||||
|
|
|
@ -539,7 +539,7 @@ class CuraApplication(QtApplication):
|
||||||
|
|
||||||
## A reusable dialogbox
|
## A reusable dialogbox
|
||||||
#
|
#
|
||||||
showMessageBox = pyqtSignal(str, str, str, str, str, int, int, arguments = ["title", "footer", "text", "informativeText", "detailedText", "buttons", "icon"])
|
showMessageBox = pyqtSignal(str, str, str, str, int, int, arguments = ["title", "text", "informativeText", "detailedText", "buttons", "icon"])
|
||||||
|
|
||||||
def messageBox(self, title, text, informativeText = "", detailedText = "", buttons = QMessageBox.Ok, icon = QMessageBox.NoIcon, callback = None, callback_arguments = []):
|
def messageBox(self, title, text, informativeText = "", detailedText = "", buttons = QMessageBox.Ok, icon = QMessageBox.NoIcon, callback = None, callback_arguments = []):
|
||||||
self._message_box_callback = callback
|
self._message_box_callback = callback
|
||||||
|
@ -1464,11 +1464,15 @@ class CuraApplication(QtApplication):
|
||||||
|
|
||||||
def _reloadMeshFinished(self, job):
|
def _reloadMeshFinished(self, job):
|
||||||
# TODO; This needs to be fixed properly. We now make the assumption that we only load a single mesh!
|
# TODO; This needs to be fixed properly. We now make the assumption that we only load a single mesh!
|
||||||
mesh_data = job.getResult()[0].getMeshData()
|
job_result = job.getResult()
|
||||||
if mesh_data:
|
if len(job_result) == 0:
|
||||||
job._node.setMeshData(mesh_data)
|
Logger.log("e", "Reloading the mesh failed.")
|
||||||
else:
|
return
|
||||||
|
mesh_data = job_result[0].getMeshData()
|
||||||
|
if not mesh_data:
|
||||||
Logger.log("w", "Could not find a mesh in reloaded node.")
|
Logger.log("w", "Could not find a mesh in reloaded node.")
|
||||||
|
return
|
||||||
|
job._node.setMeshData(mesh_data)
|
||||||
|
|
||||||
def _openFile(self, filename):
|
def _openFile(self, filename):
|
||||||
self.readLocalFile(QUrl.fromLocalFile(filename))
|
self.readLocalFile(QUrl.fromLocalFile(filename))
|
||||||
|
|
|
@ -4,4 +4,6 @@
|
||||||
CuraVersion = "@CURA_VERSION@"
|
CuraVersion = "@CURA_VERSION@"
|
||||||
CuraBuildType = "@CURA_BUILDTYPE@"
|
CuraBuildType = "@CURA_BUILDTYPE@"
|
||||||
CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False
|
CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False
|
||||||
CuraPackagesVersion = "@CURA_PACKAGES_VERSION@"
|
CuraSDKVersion = "@CURA_SDK_VERSION@"
|
||||||
|
CuraCloudAPIRoot = "@CURA_CLOUD_API_ROOT@"
|
||||||
|
CuraCloudAPIVersion = "@CURA_CLOUD_API_VERSION@"
|
||||||
|
|
|
@ -291,9 +291,10 @@ class MaterialManager(QObject):
|
||||||
material_id_metadata_dict = dict()
|
material_id_metadata_dict = dict()
|
||||||
for node in nodes_to_check:
|
for node in nodes_to_check:
|
||||||
if node is not None:
|
if node is not None:
|
||||||
|
# Only exclude the materials that are explicitly specified in the "exclude_materials" field.
|
||||||
|
# Do not exclude other materials that are of the same type.
|
||||||
for material_id, node in node.material_map.items():
|
for material_id, node in node.material_map.items():
|
||||||
fallback_id = self.getFallbackMaterialIdByMaterialType(node.metadata["material"])
|
if material_id in machine_exclude_materials:
|
||||||
if fallback_id in machine_exclude_materials:
|
|
||||||
Logger.log("d", "Exclude material [%s] for machine [%s]",
|
Logger.log("d", "Exclude material [%s] for machine [%s]",
|
||||||
material_id, machine_definition.getId())
|
material_id, machine_definition.getId())
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# Copyright (c) 2017 Ultimaker B.V.
|
# Copyright (c) 2018 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
|
import copy
|
||||||
|
|
||||||
from UM.Job import Job
|
from UM.Job import Job
|
||||||
from UM.Operations.GroupedOperation import GroupedOperation
|
from UM.Operations.GroupedOperation import GroupedOperation
|
||||||
from UM.Message import Message
|
from UM.Message import Message
|
||||||
|
@ -64,6 +66,8 @@ class MultiplyObjectsJob(Job):
|
||||||
# We do place the nodes one by one, as we want to yield in between.
|
# We do place the nodes one by one, as we want to yield in between.
|
||||||
if not node_too_big:
|
if not node_too_big:
|
||||||
new_node, solution_found = arranger.findNodePlacement(current_node, offset_shape_arr, hull_shape_arr)
|
new_node, solution_found = arranger.findNodePlacement(current_node, offset_shape_arr, hull_shape_arr)
|
||||||
|
else:
|
||||||
|
new_node = copy.deepcopy(node)
|
||||||
if node_too_big or not solution_found:
|
if node_too_big or not solution_found:
|
||||||
found_solution_for_all = False
|
found_solution_for_all = False
|
||||||
new_location = new_node.getPosition()
|
new_location = new_node.getPosition()
|
||||||
|
|
|
@ -329,6 +329,8 @@ class PrintInformation(QObject):
|
||||||
baseNameChanged = pyqtSignal()
|
baseNameChanged = pyqtSignal()
|
||||||
|
|
||||||
def setBaseName(self, base_name: str, is_project_file: bool = False):
|
def setBaseName(self, base_name: str, is_project_file: bool = False):
|
||||||
|
self._is_user_specified_job_name = False
|
||||||
|
|
||||||
# Ensure that we don't use entire path but only filename
|
# Ensure that we don't use entire path but only filename
|
||||||
name = os.path.basename(base_name)
|
name = os.path.basename(base_name)
|
||||||
|
|
||||||
|
|
|
@ -1031,6 +1031,10 @@ class MachineManager(QObject):
|
||||||
self.activeQualityChangesGroupChanged.emit()
|
self.activeQualityChangesGroupChanged.emit()
|
||||||
|
|
||||||
def _setQualityGroup(self, quality_group, empty_quality_changes: bool = True) -> None:
|
def _setQualityGroup(self, quality_group, empty_quality_changes: bool = True) -> None:
|
||||||
|
if quality_group is None:
|
||||||
|
self._setEmptyQuality()
|
||||||
|
return
|
||||||
|
|
||||||
if quality_group.node_for_global.getContainer() is None:
|
if quality_group.node_for_global.getContainer() is None:
|
||||||
return
|
return
|
||||||
for node in quality_group.nodes_for_extruders.values():
|
for node in quality_group.nodes_for_extruders.values():
|
||||||
|
@ -1041,10 +1045,6 @@ class MachineManager(QObject):
|
||||||
if empty_quality_changes:
|
if empty_quality_changes:
|
||||||
self._current_quality_changes_group = None
|
self._current_quality_changes_group = None
|
||||||
|
|
||||||
if quality_group is None:
|
|
||||||
self._setEmptyQuality()
|
|
||||||
return
|
|
||||||
|
|
||||||
# Set quality and quality_changes for the GlobalStack
|
# Set quality and quality_changes for the GlobalStack
|
||||||
self._global_container_stack.quality = quality_group.node_for_global.getContainer()
|
self._global_container_stack.quality = quality_group.node_for_global.getContainer()
|
||||||
if empty_quality_changes:
|
if empty_quality_changes:
|
||||||
|
@ -1330,6 +1330,10 @@ class MachineManager(QObject):
|
||||||
self._setMaterial(position, container_node)
|
self._setMaterial(position, container_node)
|
||||||
self._updateQualityWithMaterial()
|
self._updateQualityWithMaterial()
|
||||||
|
|
||||||
|
# See if we need to show the Discard or Keep changes screen
|
||||||
|
if self.hasUserSettings and Preferences.getInstance().getValue("cura/active_mode") == 1:
|
||||||
|
self._application.discardOrKeepProfileChanges()
|
||||||
|
|
||||||
@pyqtSlot(str, str)
|
@pyqtSlot(str, str)
|
||||||
def setVariantByName(self, position: str, variant_name: str) -> None:
|
def setVariantByName(self, position: str, variant_name: str) -> None:
|
||||||
machine_definition_id = self._global_container_stack.definition.id
|
machine_definition_id = self._global_container_stack.definition.id
|
||||||
|
@ -1345,6 +1349,10 @@ class MachineManager(QObject):
|
||||||
self._updateMaterialWithVariant(position)
|
self._updateMaterialWithVariant(position)
|
||||||
self._updateQualityWithMaterial()
|
self._updateQualityWithMaterial()
|
||||||
|
|
||||||
|
# See if we need to show the Discard or Keep changes screen
|
||||||
|
if self.hasUserSettings and Preferences.getInstance().getValue("cura/active_mode") == 1:
|
||||||
|
self._application.discardOrKeepProfileChanges()
|
||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def setQualityGroupByQualityType(self, quality_type: str) -> None:
|
def setQualityGroupByQualityType(self, quality_type: str) -> None:
|
||||||
if self._global_container_stack is None:
|
if self._global_container_stack is None:
|
||||||
|
|
|
@ -62,13 +62,26 @@ class FirmwareUpdateCheckerJob(Job):
|
||||||
# notify the user when no new firmware version is available.
|
# notify the user when no new firmware version is available.
|
||||||
if (checked_version != "") and (checked_version != current_version):
|
if (checked_version != "") and (checked_version != current_version):
|
||||||
Logger.log("i", "SHOWING FIRMWARE UPDATE MESSAGE")
|
Logger.log("i", "SHOWING FIRMWARE UPDATE MESSAGE")
|
||||||
message = Message(i18n_catalog.i18nc("@info Don't translate {machine_name}, since it gets replaced by a printer name!", "New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format(machine_name = machine_name),
|
|
||||||
title = i18n_catalog.i18nc("@info:title The %s gets replaced with the printer name.", "New %s firmware available") % machine_name)
|
message = Message(i18n_catalog.i18nc(
|
||||||
message.addAction("download", i18n_catalog.i18nc("@action:button", "How to update"), "[no_icon]", "[no_description]")
|
"@info Don't translate {machine_name}, since it gets replaced by a printer name!",
|
||||||
|
"New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format(
|
||||||
|
machine_name=machine_name),
|
||||||
|
title=i18n_catalog.i18nc(
|
||||||
|
"@info:title The %s gets replaced with the printer name.",
|
||||||
|
"New %s firmware available") % machine_name)
|
||||||
|
|
||||||
|
message.addAction("download",
|
||||||
|
i18n_catalog.i18nc("@action:button", "How to update"),
|
||||||
|
"[no_icon]",
|
||||||
|
"[no_description]",
|
||||||
|
button_style=Message.ActionButtonStyle.LINK,
|
||||||
|
button_align=Message.ActionButtonStyle.BUTTON_ALIGN_LEFT)
|
||||||
|
|
||||||
|
|
||||||
# If we do this in a cool way, the download url should be available in the JSON file
|
# If we do this in a cool way, the download url should be available in the JSON file
|
||||||
if self._set_download_url_callback:
|
if self._set_download_url_callback:
|
||||||
self._set_download_url_callback("https://ultimaker.com/en/resources/23129-updating-the-firmware?utm_source=cura&utm_medium=software&utm_campaign=hw-update")
|
self._set_download_url_callback("https://ultimaker.com/en/resources/20500-upgrade-firmware")
|
||||||
message.actionTriggered.connect(self._callback)
|
message.actionTriggered.connect(self._callback)
|
||||||
message.show()
|
message.show()
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ class ModelChecker(QObject, Extension):
|
||||||
|
|
||||||
self._caution_message = Message("", #Message text gets set when the message gets shown, to display the models in question.
|
self._caution_message = Message("", #Message text gets set when the message gets shown, to display the models in question.
|
||||||
lifetime = 0,
|
lifetime = 0,
|
||||||
title = catalog.i18nc("@info:title", "Model Checker Warning"))
|
title = catalog.i18nc("@info:title", "3D Model Assistant"))
|
||||||
|
|
||||||
Application.getInstance().initializationFinished.connect(self._pluginsInitialized)
|
Application.getInstance().initializationFinished.connect(self._pluginsInitialized)
|
||||||
Application.getInstance().getController().getScene().sceneChanged.connect(self._onChanged)
|
Application.getInstance().getController().getScene().sceneChanged.connect(self._onChanged)
|
||||||
|
|
|
@ -45,10 +45,11 @@ class SliceInfo(QObject, Extension):
|
||||||
dismissable = False,
|
dismissable = False,
|
||||||
title = catalog.i18nc("@info:title", "Collecting Data"))
|
title = catalog.i18nc("@info:title", "Collecting Data"))
|
||||||
|
|
||||||
self.send_slice_info_message.addAction("Dismiss", name = catalog.i18nc("@action:button", "Allow"), icon = None,
|
|
||||||
description = catalog.i18nc("@action:tooltip", "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing."))
|
|
||||||
self.send_slice_info_message.addAction("MoreInfo", name = catalog.i18nc("@action:button", "More info"), icon = None,
|
self.send_slice_info_message.addAction("MoreInfo", name = catalog.i18nc("@action:button", "More info"), icon = None,
|
||||||
description = catalog.i18nc("@action:tooltip", "See more information on what data Cura sends."), button_style = Message.ActionButtonStyle.LINK)
|
description = catalog.i18nc("@action:tooltip", "See more information on what data Cura sends."), button_style = Message.ActionButtonStyle.LINK)
|
||||||
|
|
||||||
|
self.send_slice_info_message.addAction("Dismiss", name = catalog.i18nc("@action:button", "Allow"), icon = None,
|
||||||
|
description = catalog.i18nc("@action:tooltip", "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing."))
|
||||||
self.send_slice_info_message.actionTriggered.connect(self.messageActionTriggered)
|
self.send_slice_info_message.actionTriggered.connect(self.messageActionTriggered)
|
||||||
self.send_slice_info_message.show()
|
self.send_slice_info_message.show()
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,9 @@ Item
|
||||||
frameVisible: false
|
frameVisible: false
|
||||||
selectionMode: 0
|
selectionMode: 0
|
||||||
model: packageData.supported_configs
|
model: packageData.supported_configs
|
||||||
headerDelegate: Item
|
headerDelegate: Rectangle
|
||||||
{
|
{
|
||||||
|
color: UM.Theme.getColor("sidebar")
|
||||||
height: UM.Theme.getSize("toolbox_chart_row").height
|
height: UM.Theme.getSize("toolbox_chart_row").height
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,6 +18,8 @@ ScrollView
|
||||||
spacing: UM.Theme.getSize("default_margin").height
|
spacing: UM.Theme.getSize("default_margin").height
|
||||||
padding: UM.Theme.getSize("wide_margin").height
|
padding: UM.Theme.getSize("wide_margin").height
|
||||||
height: childrenRect.height + 2 * padding
|
height: childrenRect.height + 2 * padding
|
||||||
|
|
||||||
|
/* Hide for 3.4
|
||||||
ToolboxDownloadsShowcase
|
ToolboxDownloadsShowcase
|
||||||
{
|
{
|
||||||
id: showcase
|
id: showcase
|
||||||
|
@ -29,6 +31,8 @@ ScrollView
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: UM.Theme.getSize("default_lining").height
|
height: UM.Theme.getSize("default_lining").height
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
ToolboxDownloadsGrid
|
ToolboxDownloadsGrid
|
||||||
{
|
{
|
||||||
id: allPlugins
|
id: allPlugins
|
||||||
|
|
|
@ -33,6 +33,8 @@ Item
|
||||||
toolbox.viewPage = "overview"
|
toolbox.viewPage = "overview"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Hide for 3.4
|
||||||
ToolboxTabButton
|
ToolboxTabButton
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@title:tab", "Materials")
|
text: catalog.i18nc("@title:tab", "Materials")
|
||||||
|
@ -45,6 +47,7 @@ Item
|
||||||
toolbox.viewPage = "overview"
|
toolbox.viewPage = "overview"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
ToolboxTabButton
|
ToolboxTabButton
|
||||||
{
|
{
|
||||||
|
|
|
@ -150,7 +150,7 @@ Item
|
||||||
{
|
{
|
||||||
id: loader
|
id: loader
|
||||||
visible: active
|
visible: active
|
||||||
source: "../images/loading.gif"
|
source: visible ? "../images/loading.gif" : ""
|
||||||
width: UM.Theme.getSize("toolbox_loader").width
|
width: UM.Theme.getSize("toolbox_loader").width
|
||||||
height: UM.Theme.getSize("toolbox_loader").height
|
height: UM.Theme.getSize("toolbox_loader").height
|
||||||
anchors.right: button.left
|
anchors.right: button.left
|
||||||
|
|
|
@ -28,7 +28,8 @@ i18n_catalog = i18nCatalog("cura")
|
||||||
## The Toolbox class is responsible of communicating with the server through the API
|
## The Toolbox class is responsible of communicating with the server through the API
|
||||||
class Toolbox(QObject, Extension):
|
class Toolbox(QObject, Extension):
|
||||||
|
|
||||||
DEFAULT_PACKAGES_API_ROOT = "https://api.ultimaker.com"
|
DEFAULT_CLOUD_API_ROOT = "https://api.ultimaker.com"
|
||||||
|
DEFAULT_CLOUD_API_VERSION = 1
|
||||||
|
|
||||||
def __init__(self, parent=None) -> None:
|
def __init__(self, parent=None) -> None:
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
@ -36,14 +37,11 @@ class Toolbox(QObject, Extension):
|
||||||
self._application = Application.getInstance()
|
self._application = Application.getInstance()
|
||||||
self._package_manager = None
|
self._package_manager = None
|
||||||
self._plugin_registry = Application.getInstance().getPluginRegistry()
|
self._plugin_registry = Application.getInstance().getPluginRegistry()
|
||||||
self._packages_api_root = self._getPackagesApiRoot()
|
|
||||||
self._packages_version = self._getPackagesVersion()
|
self._sdk_version = None
|
||||||
self._api_version = 1
|
self._cloud_api_version = None
|
||||||
self._api_url = "{api_root}/cura-packages/v{api_version}/cura/v{package_version}".format(
|
self._cloud_api_root = None
|
||||||
api_root = self._packages_api_root,
|
self._api_url = None
|
||||||
api_version = self._api_version,
|
|
||||||
package_version = self._packages_version
|
|
||||||
)
|
|
||||||
|
|
||||||
# Network:
|
# Network:
|
||||||
self._get_packages_request = None
|
self._get_packages_request = None
|
||||||
|
@ -64,12 +62,7 @@ class Toolbox(QObject, Extension):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
self._request_urls = {
|
self._request_urls = {}
|
||||||
"authors": QUrl("{base_url}/authors".format(base_url = self._api_url)),
|
|
||||||
"packages": QUrl("{base_url}/packages".format(base_url = self._api_url)),
|
|
||||||
"plugins_showcase": QUrl("{base_url}/showcase".format(base_url = self._api_url)),
|
|
||||||
"materials_showcase": QUrl("{base_url}/showcase".format(base_url = self._api_url))
|
|
||||||
}
|
|
||||||
self._to_update = [] # Package_ids that are waiting to be updated
|
self._to_update = [] # Package_ids that are waiting to be updated
|
||||||
|
|
||||||
# Data:
|
# Data:
|
||||||
|
@ -161,22 +154,50 @@ class Toolbox(QObject, Extension):
|
||||||
# this is initialized. Therefore, we wait until the application is ready.
|
# this is initialized. Therefore, we wait until the application is ready.
|
||||||
def _onAppInitialized(self) -> None:
|
def _onAppInitialized(self) -> None:
|
||||||
self._package_manager = Application.getInstance().getCuraPackageManager()
|
self._package_manager = Application.getInstance().getCuraPackageManager()
|
||||||
|
self._sdk_version = self._getSDKVersion()
|
||||||
|
self._cloud_api_version = self._getCloudAPIVersion()
|
||||||
|
self._cloud_api_root = self._getCloudAPIRoot()
|
||||||
|
self._api_url = "{cloud_api_root}/cura-packages/v{cloud_api_version}/cura/v{sdk_version}".format(
|
||||||
|
cloud_api_root=self._cloud_api_root,
|
||||||
|
cloud_api_version=self._cloud_api_version,
|
||||||
|
sdk_version=self._sdk_version
|
||||||
|
)
|
||||||
|
self._request_urls = {
|
||||||
|
"authors": QUrl("{base_url}/authors".format(base_url=self._api_url)),
|
||||||
|
"packages": QUrl("{base_url}/packages".format(base_url=self._api_url)),
|
||||||
|
"plugins_showcase": QUrl("{base_url}/showcase".format(base_url=self._api_url)),
|
||||||
|
"materials_showcase": QUrl("{base_url}/showcase".format(base_url=self._api_url))
|
||||||
|
}
|
||||||
|
|
||||||
# Get the API root for the packages API depending on Cura version settings.
|
# Get the API root for the packages API depending on Cura version settings.
|
||||||
def _getPackagesApiRoot(self) -> str:
|
def _getCloudAPIRoot(self) -> str:
|
||||||
if not hasattr(cura, "CuraVersion"):
|
if not hasattr(cura, "CuraVersion"):
|
||||||
return self.DEFAULT_PACKAGES_API_ROOT
|
return self.DEFAULT_CLOUD_API_ROOT
|
||||||
if not hasattr(cura.CuraVersion, "CuraPackagesApiRoot"):
|
if not hasattr(cura.CuraVersion, "CuraCloudAPIRoot"):
|
||||||
return self.DEFAULT_PACKAGES_API_ROOT
|
return self.DEFAULT_CLOUD_API_ROOT
|
||||||
return cura.CuraVersion.CuraPackagesApiRoot
|
if not cura.CuraVersion.CuraCloudAPIRoot:
|
||||||
|
return self.DEFAULT_CLOUD_API_ROOT
|
||||||
|
return cura.CuraVersion.CuraCloudAPIRoot
|
||||||
|
|
||||||
|
# Get the cloud API version from CuraVersion
|
||||||
|
def _getCloudAPIVersion(self) -> int:
|
||||||
|
if not hasattr(cura, "CuraVersion"):
|
||||||
|
return self.DEFAULT_CLOUD_API_VERSION
|
||||||
|
if not hasattr(cura.CuraVersion, "CuraCloudAPIVersion"):
|
||||||
|
return self.DEFAULT_CLOUD_API_VERSION
|
||||||
|
if not cura.CuraVersion.CuraCloudAPIVersion:
|
||||||
|
return self.DEFAULT_CLOUD_API_VERSION
|
||||||
|
return cura.CuraVersion.CuraCloudAPIVersion
|
||||||
|
|
||||||
# Get the packages version depending on Cura version settings.
|
# Get the packages version depending on Cura version settings.
|
||||||
def _getPackagesVersion(self) -> int:
|
def _getSDKVersion(self) -> int:
|
||||||
if not hasattr(cura, "CuraVersion"):
|
if not hasattr(cura, "CuraVersion"):
|
||||||
return self._plugin_registry.APIVersion
|
return self._plugin_registry.APIVersion
|
||||||
if not hasattr(cura.CuraVersion, "CuraPackagesVersion"):
|
if not hasattr(cura.CuraVersion, "CuraSDKVersion"):
|
||||||
return self._plugin_registry.APIVersion
|
return self._plugin_registry.APIVersion
|
||||||
return cura.CuraVersion.CuraPackagesVersion
|
if not cura.CuraVersion.CuraSDKVersion:
|
||||||
|
return self._plugin_registry.APIVersion
|
||||||
|
return cura.CuraVersion.CuraSDKVersion
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def browsePackages(self) -> None:
|
def browsePackages(self) -> None:
|
||||||
|
@ -383,7 +404,10 @@ class Toolbox(QObject, Extension):
|
||||||
|
|
||||||
def resetDownload(self) -> None:
|
def resetDownload(self) -> None:
|
||||||
if self._download_reply:
|
if self._download_reply:
|
||||||
|
try:
|
||||||
self._download_reply.downloadProgress.disconnect(self._onDownloadProgress)
|
self._download_reply.downloadProgress.disconnect(self._onDownloadProgress)
|
||||||
|
except TypeError: #Raised when the method is not connected to the signal yet.
|
||||||
|
pass #Don't need to disconnect.
|
||||||
self._download_reply.abort()
|
self._download_reply.abort()
|
||||||
self._download_reply = None
|
self._download_reply = None
|
||||||
self._download_request = None
|
self._download_request = None
|
||||||
|
|
|
@ -148,6 +148,10 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
|
||||||
def selectPrinter(self, target_printer: str = "") -> None:
|
def selectPrinter(self, target_printer: str = "") -> None:
|
||||||
self._sending_job.send(target_printer)
|
self._sending_job.send(target_printer)
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def cancelPrintSelection(self) -> None:
|
||||||
|
self._sending_gcode = False
|
||||||
|
|
||||||
## Greenlet to send a job to the printer over the network.
|
## Greenlet to send a job to the printer over the network.
|
||||||
#
|
#
|
||||||
# This greenlet gets called asynchronously in requestWrite. It is a
|
# This greenlet gets called asynchronously in requestWrite. It is a
|
||||||
|
|
|
@ -90,6 +90,7 @@ UM.Dialog
|
||||||
onClicked: {
|
onClicked: {
|
||||||
base.visible = false;
|
base.visible = false;
|
||||||
printerSelectionCombobox.currentIndex = 0
|
printerSelectionCombobox.currentIndex = 0
|
||||||
|
OutputDevice.cancelPrintSelection()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,6 +6,9 @@ import io #To serialise the preference files afterwards.
|
||||||
|
|
||||||
from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this.
|
from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this.
|
||||||
|
|
||||||
|
_renamed_settings = {
|
||||||
|
"infill_hollow": "infill_support_enabled"
|
||||||
|
}
|
||||||
|
|
||||||
## Upgrades configurations from the state they were in at version 3.3 to the
|
## Upgrades configurations from the state they were in at version 3.3 to the
|
||||||
# state they should be in at version 3.4.
|
# state they should be in at version 3.4.
|
||||||
|
@ -38,6 +41,17 @@ class VersionUpgrade33to34(VersionUpgrade):
|
||||||
# Update version number.
|
# Update version number.
|
||||||
parser["general"]["version"] = "4"
|
parser["general"]["version"] = "4"
|
||||||
|
|
||||||
|
if "values" in parser:
|
||||||
|
#If infill_hollow was enabled and the overhang angle was adjusted, copy that overhang angle to the new infill support angle.
|
||||||
|
if "infill_hollow" in parser["values"] and parser["values"]["infill_hollow"] and "support_angle" in parser["values"]:
|
||||||
|
parser["values"]["infill_support_angle"] = parser["values"]["support_angle"]
|
||||||
|
|
||||||
|
#Renamed settings.
|
||||||
|
for original, replacement in _renamed_settings.items():
|
||||||
|
if original in parser["values"]:
|
||||||
|
parser["values"][replacement] = parser["values"][original]
|
||||||
|
del parser["values"][original]
|
||||||
|
|
||||||
result = io.StringIO()
|
result = io.StringIO()
|
||||||
parser.write(result)
|
parser.write(result)
|
||||||
return [filename], [result.getvalue()]
|
return [filename], [result.getvalue()]
|
|
@ -6,7 +6,7 @@
|
||||||
"display_name": "3MF Reader",
|
"display_name": "3MF Reader",
|
||||||
"description": "Provides support for reading 3MF files.",
|
"description": "Provides support for reading 3MF files.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
"display_name": "3MF Writer",
|
"display_name": "3MF Writer",
|
||||||
"description": "Provides support for writing 3MF files.",
|
"description": "Provides support for writing 3MF files.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
"display_name": "Change Log",
|
"display_name": "Change Log",
|
||||||
"description": "Shows changes since latest checked version.",
|
"description": "Shows changes since latest checked version.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
"display_name": "CuraEngine Backend",
|
"display_name": "CuraEngine Backend",
|
||||||
"description": "Provides the link to the CuraEngine slicing backend.",
|
"description": "Provides the link to the CuraEngine slicing backend.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -74,7 +74,7 @@
|
||||||
"display_name": "Cura Profile Reader",
|
"display_name": "Cura Profile Reader",
|
||||||
"description": "Provides support for importing Cura profiles.",
|
"description": "Provides support for importing Cura profiles.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -91,7 +91,7 @@
|
||||||
"display_name": "Cura Profile Writer",
|
"display_name": "Cura Profile Writer",
|
||||||
"description": "Provides support for exporting Cura profiles.",
|
"description": "Provides support for exporting Cura profiles.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -108,7 +108,7 @@
|
||||||
"display_name": "Firmware Update Checker",
|
"display_name": "Firmware Update Checker",
|
||||||
"description": "Checks for firmware updates.",
|
"description": "Checks for firmware updates.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -125,7 +125,7 @@
|
||||||
"display_name": "Compressed G-code Reader",
|
"display_name": "Compressed G-code Reader",
|
||||||
"description": "Reads g-code from a compressed archive.",
|
"description": "Reads g-code from a compressed archive.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -142,7 +142,7 @@
|
||||||
"display_name": "Compressed G-code Writer",
|
"display_name": "Compressed G-code Writer",
|
||||||
"description": "Writes g-code to a compressed archive.",
|
"description": "Writes g-code to a compressed archive.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -159,7 +159,7 @@
|
||||||
"display_name": "G-Code Profile Reader",
|
"display_name": "G-Code Profile Reader",
|
||||||
"description": "Provides support for importing profiles from g-code files.",
|
"description": "Provides support for importing profiles from g-code files.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -176,7 +176,7 @@
|
||||||
"display_name": "G-Code Reader",
|
"display_name": "G-Code Reader",
|
||||||
"description": "Allows loading and displaying G-code files.",
|
"description": "Allows loading and displaying G-code files.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "VictorLarchenko",
|
"author_id": "VictorLarchenko",
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
"display_name": "G-Code Writer",
|
"display_name": "G-Code Writer",
|
||||||
"description": "Writes g-code to a file.",
|
"description": "Writes g-code to a file.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -210,7 +210,7 @@
|
||||||
"display_name": "Image Reader",
|
"display_name": "Image Reader",
|
||||||
"description": "Enables ability to generate printable geometry from 2D image files.",
|
"description": "Enables ability to generate printable geometry from 2D image files.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -227,7 +227,7 @@
|
||||||
"display_name": "Legacy Cura Profile Reader",
|
"display_name": "Legacy Cura Profile Reader",
|
||||||
"description": "Provides support for importing profiles from legacy Cura versions.",
|
"description": "Provides support for importing profiles from legacy Cura versions.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -244,7 +244,7 @@
|
||||||
"display_name": "Machine Settings Action",
|
"display_name": "Machine Settings Action",
|
||||||
"description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).",
|
"description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "fieldOfView",
|
"author_id": "fieldOfView",
|
||||||
|
@ -261,7 +261,7 @@
|
||||||
"display_name": "Model Checker",
|
"display_name": "Model Checker",
|
||||||
"description": "Checks models and print configuration for possible printing issues and give suggestions.",
|
"description": "Checks models and print configuration for possible printing issues and give suggestions.",
|
||||||
"package_version": "0.1.0",
|
"package_version": "0.1.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -278,7 +278,7 @@
|
||||||
"display_name": "Monitor Stage",
|
"display_name": "Monitor Stage",
|
||||||
"description": "Provides a monitor stage in Cura.",
|
"description": "Provides a monitor stage in Cura.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -295,7 +295,7 @@
|
||||||
"display_name": "Per-Object Settings Tool",
|
"display_name": "Per-Object Settings Tool",
|
||||||
"description": "Provides the per-model settings.",
|
"description": "Provides the per-model settings.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -312,7 +312,7 @@
|
||||||
"display_name": "Post Processing",
|
"display_name": "Post Processing",
|
||||||
"description": "Extension that allows for user created scripts for post processing.",
|
"description": "Extension that allows for user created scripts for post processing.",
|
||||||
"package_version": "2.2.0",
|
"package_version": "2.2.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -329,7 +329,7 @@
|
||||||
"display_name": "Prepare Stage",
|
"display_name": "Prepare Stage",
|
||||||
"description": "Provides a prepare stage in Cura.",
|
"description": "Provides a prepare stage in Cura.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -346,7 +346,7 @@
|
||||||
"display_name": "Removable Drive Output Device",
|
"display_name": "Removable Drive Output Device",
|
||||||
"description": "Provides removable drive hotplugging and writing support.",
|
"description": "Provides removable drive hotplugging and writing support.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -363,7 +363,7 @@
|
||||||
"display_name": "Simulation View",
|
"display_name": "Simulation View",
|
||||||
"description": "Provides the Simulation view.",
|
"description": "Provides the Simulation view.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -380,7 +380,7 @@
|
||||||
"display_name": "Slice Info",
|
"display_name": "Slice Info",
|
||||||
"description": "Submits anonymous slice info. Can be disabled through preferences.",
|
"description": "Submits anonymous slice info. Can be disabled through preferences.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -397,7 +397,7 @@
|
||||||
"display_name": "Solid View",
|
"display_name": "Solid View",
|
||||||
"description": "Provides a normal solid mesh view.",
|
"description": "Provides a normal solid mesh view.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -414,7 +414,7 @@
|
||||||
"display_name": "Support Eraser Tool",
|
"display_name": "Support Eraser Tool",
|
||||||
"description": "Creates an eraser mesh to block the printing of support in certain places.",
|
"description": "Creates an eraser mesh to block the printing of support in certain places.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -431,7 +431,7 @@
|
||||||
"display_name": "Toolbox",
|
"display_name": "Toolbox",
|
||||||
"description": "Find, manage and install new Cura packages.",
|
"description": "Find, manage and install new Cura packages.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -448,7 +448,7 @@
|
||||||
"display_name": "UFP Writer",
|
"display_name": "UFP Writer",
|
||||||
"description": "Provides support for writing Ultimaker Format Packages.",
|
"description": "Provides support for writing Ultimaker Format Packages.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -465,7 +465,7 @@
|
||||||
"display_name": "Ultimaker Machine Actions",
|
"display_name": "Ultimaker Machine Actions",
|
||||||
"description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).",
|
"description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -482,7 +482,7 @@
|
||||||
"display_name": "UM3 Network Printing",
|
"display_name": "UM3 Network Printing",
|
||||||
"description": "Manages network connections to Ultimaker 3 printers.",
|
"description": "Manages network connections to Ultimaker 3 printers.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -499,7 +499,7 @@
|
||||||
"display_name": "USB Printing",
|
"display_name": "USB Printing",
|
||||||
"description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.",
|
"description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -516,7 +516,7 @@
|
||||||
"display_name": "User Agreement",
|
"display_name": "User Agreement",
|
||||||
"description": "Ask the user once if he/she agrees with our license.",
|
"description": "Ask the user once if he/she agrees with our license.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -533,7 +533,7 @@
|
||||||
"display_name": "Version Upgrade 2.1 to 2.2",
|
"display_name": "Version Upgrade 2.1 to 2.2",
|
||||||
"description": "Upgrades configurations from Cura 2.1 to Cura 2.2.",
|
"description": "Upgrades configurations from Cura 2.1 to Cura 2.2.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -550,7 +550,7 @@
|
||||||
"display_name": "Version Upgrade 2.2 to 2.4",
|
"display_name": "Version Upgrade 2.2 to 2.4",
|
||||||
"description": "Upgrades configurations from Cura 2.2 to Cura 2.4.",
|
"description": "Upgrades configurations from Cura 2.2 to Cura 2.4.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -567,7 +567,7 @@
|
||||||
"display_name": "Version Upgrade 2.5 to 2.6",
|
"display_name": "Version Upgrade 2.5 to 2.6",
|
||||||
"description": "Upgrades configurations from Cura 2.5 to Cura 2.6.",
|
"description": "Upgrades configurations from Cura 2.5 to Cura 2.6.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -584,7 +584,7 @@
|
||||||
"display_name": "Version Upgrade 2.6 to 2.7",
|
"display_name": "Version Upgrade 2.6 to 2.7",
|
||||||
"description": "Upgrades configurations from Cura 2.6 to Cura 2.7.",
|
"description": "Upgrades configurations from Cura 2.6 to Cura 2.7.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -601,7 +601,7 @@
|
||||||
"display_name": "Version Upgrade 2.7 to 3.0",
|
"display_name": "Version Upgrade 2.7 to 3.0",
|
||||||
"description": "Upgrades configurations from Cura 2.7 to Cura 3.0.",
|
"description": "Upgrades configurations from Cura 2.7 to Cura 3.0.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -618,7 +618,7 @@
|
||||||
"display_name": "Version Upgrade 3.0 to 3.1",
|
"display_name": "Version Upgrade 3.0 to 3.1",
|
||||||
"description": "Upgrades configurations from Cura 3.0 to Cura 3.1.",
|
"description": "Upgrades configurations from Cura 3.0 to Cura 3.1.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -635,7 +635,7 @@
|
||||||
"display_name": "Version Upgrade 3.2 to 3.3",
|
"display_name": "Version Upgrade 3.2 to 3.3",
|
||||||
"description": "Upgrades configurations from Cura 3.2 to Cura 3.3.",
|
"description": "Upgrades configurations from Cura 3.2 to Cura 3.3.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -652,7 +652,7 @@
|
||||||
"display_name": "Version Upgrade 3.3 to 3.4",
|
"display_name": "Version Upgrade 3.3 to 3.4",
|
||||||
"description": "Upgrades configurations from Cura 3.3 to Cura 3.4.",
|
"description": "Upgrades configurations from Cura 3.3 to Cura 3.4.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -669,7 +669,7 @@
|
||||||
"display_name": "X3D Reader",
|
"display_name": "X3D Reader",
|
||||||
"description": "Provides support for reading X3D files.",
|
"description": "Provides support for reading X3D files.",
|
||||||
"package_version": "0.5.0",
|
"package_version": "0.5.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "SevaAlekseyev",
|
"author_id": "SevaAlekseyev",
|
||||||
|
@ -686,7 +686,7 @@
|
||||||
"display_name": "XML Material Profiles",
|
"display_name": "XML Material Profiles",
|
||||||
"description": "Provides capabilities to read and write XML-based material profiles.",
|
"description": "Provides capabilities to read and write XML-based material profiles.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -703,7 +703,7 @@
|
||||||
"display_name": "X-Ray View",
|
"display_name": "X-Ray View",
|
||||||
"description": "Provides the X-Ray view.",
|
"description": "Provides the X-Ray view.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com",
|
"website": "https://ultimaker.com",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -720,7 +720,7 @@
|
||||||
"display_name": "Dagoma Chromatik PLA",
|
"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.",
|
"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.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://dagoma.fr/boutique/filaments.html",
|
"website": "https://dagoma.fr/boutique/filaments.html",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Dagoma",
|
"author_id": "Dagoma",
|
||||||
|
@ -737,7 +737,7 @@
|
||||||
"display_name": "FABtotum ABS",
|
"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.",
|
"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.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=40",
|
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=40",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "FABtotum",
|
"author_id": "FABtotum",
|
||||||
|
@ -754,7 +754,7 @@
|
||||||
"display_name": "FABtotum Nylon",
|
"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.",
|
"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.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=53",
|
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=53",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "FABtotum",
|
"author_id": "FABtotum",
|
||||||
|
@ -771,7 +771,7 @@
|
||||||
"display_name": "FABtotum PLA",
|
"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°.",
|
"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.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=39",
|
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=39",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "FABtotum",
|
"author_id": "FABtotum",
|
||||||
|
@ -788,7 +788,7 @@
|
||||||
"display_name": "FABtotum TPU Shore 98A",
|
"display_name": "FABtotum TPU Shore 98A",
|
||||||
"description": "",
|
"description": "",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=66",
|
"website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=66",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "FABtotum",
|
"author_id": "FABtotum",
|
||||||
|
@ -805,7 +805,7 @@
|
||||||
"display_name": "Fiberlogy HD PLA",
|
"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.",
|
"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.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "http://fiberlogy.com/en/fiberlogy-filaments/filament-hd-pla/",
|
"website": "http://fiberlogy.com/en/fiberlogy-filaments/filament-hd-pla/",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Fiberlogy",
|
"author_id": "Fiberlogy",
|
||||||
|
@ -822,7 +822,7 @@
|
||||||
"display_name": "Filo3D PLA",
|
"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.",
|
"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.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://dagoma.fr",
|
"website": "https://dagoma.fr",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Dagoma",
|
"author_id": "Dagoma",
|
||||||
|
@ -839,7 +839,7 @@
|
||||||
"display_name": "IMADE3D JellyBOX PETG",
|
"display_name": "IMADE3D JellyBOX PETG",
|
||||||
"description": "",
|
"description": "",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "http://shop.imade3d.com/filament.html",
|
"website": "http://shop.imade3d.com/filament.html",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "IMADE3D",
|
"author_id": "IMADE3D",
|
||||||
|
@ -856,7 +856,7 @@
|
||||||
"display_name": "IMADE3D JellyBOX PLA",
|
"display_name": "IMADE3D JellyBOX PLA",
|
||||||
"description": "",
|
"description": "",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "http://shop.imade3d.com/filament.html",
|
"website": "http://shop.imade3d.com/filament.html",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "IMADE3D",
|
"author_id": "IMADE3D",
|
||||||
|
@ -873,7 +873,7 @@
|
||||||
"display_name": "Octofiber PLA",
|
"display_name": "Octofiber PLA",
|
||||||
"description": "PLA material from Octofiber.",
|
"description": "PLA material from Octofiber.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://nl.octofiber.com/3d-printing-filament/pla.html",
|
"website": "https://nl.octofiber.com/3d-printing-filament/pla.html",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Octofiber",
|
"author_id": "Octofiber",
|
||||||
|
@ -890,7 +890,7 @@
|
||||||
"display_name": "PolyFlex™ PLA",
|
"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.",
|
"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.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "http://www.polymaker.com/shop/polyflex/",
|
"website": "http://www.polymaker.com/shop/polyflex/",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Polymaker",
|
"author_id": "Polymaker",
|
||||||
|
@ -907,7 +907,7 @@
|
||||||
"display_name": "PolyMax™ PLA",
|
"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.",
|
"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.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "http://www.polymaker.com/shop/polymax/",
|
"website": "http://www.polymaker.com/shop/polymax/",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Polymaker",
|
"author_id": "Polymaker",
|
||||||
|
@ -924,7 +924,7 @@
|
||||||
"display_name": "PolyPlus™ PLA True Colour",
|
"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.",
|
"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.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "http://www.polymaker.com/shop/polyplus-true-colour/",
|
"website": "http://www.polymaker.com/shop/polyplus-true-colour/",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Polymaker",
|
"author_id": "Polymaker",
|
||||||
|
@ -941,7 +941,7 @@
|
||||||
"display_name": "PolyWood™ PLA",
|
"display_name": "PolyWood™ PLA",
|
||||||
"description": "PolyWood™ is a wood mimic printing material that contains no actual wood ensuring a clean Jam-Free™ printing experience.",
|
"description": "PolyWood™ is a wood mimic printing material that contains no actual wood ensuring a clean Jam-Free™ printing experience.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "http://www.polymaker.com/shop/polywood/",
|
"website": "http://www.polymaker.com/shop/polywood/",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Polymaker",
|
"author_id": "Polymaker",
|
||||||
|
@ -958,7 +958,7 @@
|
||||||
"display_name": "Ultimaker ABS",
|
"display_name": "Ultimaker ABS",
|
||||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com/products/materials/abs",
|
"website": "https://ultimaker.com/products/materials/abs",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -977,7 +977,7 @@
|
||||||
"display_name": "Ultimaker CPE",
|
"display_name": "Ultimaker CPE",
|
||||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com/products/materials/abs",
|
"website": "https://ultimaker.com/products/materials/abs",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -996,7 +996,7 @@
|
||||||
"display_name": "Ultimaker Nylon",
|
"display_name": "Ultimaker Nylon",
|
||||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com/products/materials/abs",
|
"website": "https://ultimaker.com/products/materials/abs",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -1015,7 +1015,7 @@
|
||||||
"display_name": "Ultimaker PC",
|
"display_name": "Ultimaker PC",
|
||||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com/products/materials/pc",
|
"website": "https://ultimaker.com/products/materials/pc",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -1034,7 +1034,7 @@
|
||||||
"display_name": "Ultimaker PLA",
|
"display_name": "Ultimaker PLA",
|
||||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com/products/materials/abs",
|
"website": "https://ultimaker.com/products/materials/abs",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -1053,7 +1053,7 @@
|
||||||
"display_name": "Ultimaker PVA",
|
"display_name": "Ultimaker PVA",
|
||||||
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
"description": "Example package for material and quality profiles for Ultimaker materials.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://ultimaker.com/products/materials/abs",
|
"website": "https://ultimaker.com/products/materials/abs",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Ultimaker",
|
"author_id": "Ultimaker",
|
||||||
|
@ -1072,7 +1072,7 @@
|
||||||
"display_name": "Vertex Delta ABS",
|
"display_name": "Vertex Delta ABS",
|
||||||
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://vertex3dprinter.eu",
|
"website": "https://vertex3dprinter.eu",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Velleman",
|
"author_id": "Velleman",
|
||||||
|
@ -1089,7 +1089,7 @@
|
||||||
"display_name": "Vertex Delta PET",
|
"display_name": "Vertex Delta PET",
|
||||||
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://vertex3dprinter.eu",
|
"website": "https://vertex3dprinter.eu",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Velleman",
|
"author_id": "Velleman",
|
||||||
|
@ -1106,7 +1106,7 @@
|
||||||
"display_name": "Vertex Delta PLA",
|
"display_name": "Vertex Delta PLA",
|
||||||
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://vertex3dprinter.eu",
|
"website": "https://vertex3dprinter.eu",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Velleman",
|
"author_id": "Velleman",
|
||||||
|
@ -1123,7 +1123,7 @@
|
||||||
"display_name": "Vertex Delta TPU",
|
"display_name": "Vertex Delta TPU",
|
||||||
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
"description": "ABS material and quality files for the Delta Vertex K8800.",
|
||||||
"package_version": "1.0.0",
|
"package_version": "1.0.0",
|
||||||
"cura_version": 4,
|
"sdk_version": 4,
|
||||||
"website": "https://vertex3dprinter.eu",
|
"website": "https://vertex3dprinter.eu",
|
||||||
"author": {
|
"author": {
|
||||||
"author_id": "Velleman",
|
"author_id": "Velleman",
|
||||||
|
|
|
@ -1274,6 +1274,29 @@
|
||||||
"value": "travel_compensate_overlapping_walls_enabled",
|
"value": "travel_compensate_overlapping_walls_enabled",
|
||||||
"limit_to_extruder": "wall_x_extruder_nr",
|
"limit_to_extruder": "wall_x_extruder_nr",
|
||||||
"settable_per_mesh": true
|
"settable_per_mesh": true
|
||||||
|
},
|
||||||
|
"wall_min_flow":
|
||||||
|
{
|
||||||
|
"label": "Minimum Wall Flow",
|
||||||
|
"description": "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls.",
|
||||||
|
"unit": "%",
|
||||||
|
"minimum_value": "0",
|
||||||
|
"maximum_value": "100",
|
||||||
|
"default_value": 0,
|
||||||
|
"type": "float",
|
||||||
|
"enabled": "travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled",
|
||||||
|
"settable_per_mesh": false,
|
||||||
|
"settable_per_extruder": true
|
||||||
|
},
|
||||||
|
"wall_min_flow_retract":
|
||||||
|
{
|
||||||
|
"label": "Prefer Retract",
|
||||||
|
"description": "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold.",
|
||||||
|
"type": "bool",
|
||||||
|
"default_value": false,
|
||||||
|
"enabled": "(travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled) and wall_min_flow > 0",
|
||||||
|
"settable_per_mesh": false,
|
||||||
|
"settable_per_extruder": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1807,6 +1830,30 @@
|
||||||
"limit_to_extruder": "infill_extruder_nr",
|
"limit_to_extruder": "infill_extruder_nr",
|
||||||
"settable_per_mesh": true
|
"settable_per_mesh": true
|
||||||
},
|
},
|
||||||
|
"infill_support_enabled":
|
||||||
|
{
|
||||||
|
"label": "Infill Support",
|
||||||
|
"description": "Print infill structures only where tops of the model should be supported. Enabling this reduces print time and material usage, but leads to ununiform object strength.",
|
||||||
|
"type": "bool",
|
||||||
|
"default_value": false,
|
||||||
|
"enabled": "infill_sparse_density > 0",
|
||||||
|
"limit_to_extruder": "infill_extruder_nr",
|
||||||
|
"settable_per_mesh": true
|
||||||
|
},
|
||||||
|
"infill_support_angle":
|
||||||
|
{
|
||||||
|
"label": "Infill Overhang Angle",
|
||||||
|
"description": "The minimum angle of internal overhangs for which infill is added. At a value of 0° objects are totally filled with infill, 90° will not provide any infill.",
|
||||||
|
"unit": "°",
|
||||||
|
"type": "float",
|
||||||
|
"minimum_value": "0",
|
||||||
|
"minimum_value_warning": "2",
|
||||||
|
"maximum_value": "90",
|
||||||
|
"default_value": 40,
|
||||||
|
"enabled": "infill_sparse_density > 0 and infill_support_enabled",
|
||||||
|
"limit_to_extruder": "infill_extruder_nr",
|
||||||
|
"settable_per_mesh": true
|
||||||
|
},
|
||||||
"skin_preshrink":
|
"skin_preshrink":
|
||||||
{
|
{
|
||||||
"label": "Skin Removal Width",
|
"label": "Skin Removal Width",
|
||||||
|
@ -5772,16 +5819,6 @@
|
||||||
"limit_to_extruder": "infill_extruder_nr",
|
"limit_to_extruder": "infill_extruder_nr",
|
||||||
"settable_per_mesh": true
|
"settable_per_mesh": true
|
||||||
},
|
},
|
||||||
"cross_infill_apply_pockets_alternatingly":
|
|
||||||
{
|
|
||||||
"label": "Alternate Cross 3D Pockets",
|
|
||||||
"description": "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself.",
|
|
||||||
"type": "bool",
|
|
||||||
"default_value": true,
|
|
||||||
"enabled": "infill_pattern == 'cross_3d'",
|
|
||||||
"limit_to_extruder": "infill_extruder_nr",
|
|
||||||
"settable_per_mesh": true
|
|
||||||
},
|
|
||||||
"cross_infill_density_image":
|
"cross_infill_density_image":
|
||||||
{
|
{
|
||||||
"label": "Cross Infill Density Image",
|
"label": "Cross Infill Density Image",
|
||||||
|
@ -5798,7 +5835,7 @@
|
||||||
"description": "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the support.",
|
"description": "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the support.",
|
||||||
"type": "str",
|
"type": "str",
|
||||||
"default_value": "",
|
"default_value": "",
|
||||||
"enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
|
"enabled": "support_pattern == 'cross' or support_pattern == 'cross_3d'",
|
||||||
"limit_to_extruder": "support_infill_extruder_nr",
|
"limit_to_extruder": "support_infill_extruder_nr",
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": true
|
"settable_per_extruder": true
|
||||||
|
@ -5928,14 +5965,6 @@
|
||||||
"limit_to_extruder": "support_infill_extruder_nr",
|
"limit_to_extruder": "support_infill_extruder_nr",
|
||||||
"settable_per_mesh": true
|
"settable_per_mesh": true
|
||||||
},
|
},
|
||||||
"infill_hollow":
|
|
||||||
{
|
|
||||||
"label": "Hollow Out Objects",
|
|
||||||
"description": "Remove all infill and make the inside of the object eligible for support.",
|
|
||||||
"type": "bool",
|
|
||||||
"default_value": false,
|
|
||||||
"settable_per_mesh": true
|
|
||||||
},
|
|
||||||
"magic_fuzzy_skin_enabled":
|
"magic_fuzzy_skin_enabled":
|
||||||
{
|
{
|
||||||
"label": "Fuzzy Skin",
|
"label": "Fuzzy Skin",
|
||||||
|
@ -6672,14 +6701,6 @@
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"enabled": "bridge_settings_enabled and bridge_enable_more_layers",
|
"enabled": "bridge_settings_enabled and bridge_enable_more_layers",
|
||||||
"settable_per_mesh": true
|
"settable_per_mesh": true
|
||||||
},
|
|
||||||
"wall_try_line_thickness":
|
|
||||||
{
|
|
||||||
"label": "Try Multiple Line Thicknesses",
|
|
||||||
"description": "When creating inner walls, try various line thicknesses to fit the wall lines better in narrow spaces. This reduces or increases the inner wall line width by up to 0.01mm.",
|
|
||||||
"default_value": false,
|
|
||||||
"type": "bool",
|
|
||||||
"settable_per_mesh": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -323,10 +323,11 @@ UM.MainWindow
|
||||||
{
|
{
|
||||||
if (drop.urls.length > 0)
|
if (drop.urls.length > 0)
|
||||||
{
|
{
|
||||||
// As the drop area also supports plugins, first check if it's a plugin that was dropped.
|
|
||||||
if (drop.urls.length == 1)
|
var nonPackages = [];
|
||||||
|
for (var i = 0; i < drop.urls.length; i++)
|
||||||
{
|
{
|
||||||
var filename = drop.urls[0];
|
var filename = drop.urls[i];
|
||||||
if (filename.endsWith(".curapackage"))
|
if (filename.endsWith(".curapackage"))
|
||||||
{
|
{
|
||||||
// Try to install plugin & close.
|
// Try to install plugin & close.
|
||||||
|
@ -334,11 +335,13 @@ UM.MainWindow
|
||||||
packageInstallDialog.text = catalog.i18nc("@label", "This package will be installed after restarting.");
|
packageInstallDialog.text = catalog.i18nc("@label", "This package will be installed after restarting.");
|
||||||
packageInstallDialog.icon = StandardIcon.Information;
|
packageInstallDialog.icon = StandardIcon.Information;
|
||||||
packageInstallDialog.open();
|
packageInstallDialog.open();
|
||||||
return;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nonPackages.push(filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
openDialog.handleOpenFileUrls(nonPackages);
|
||||||
openDialog.handleOpenFileUrls(drop.urls);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,10 +80,8 @@ Item {
|
||||||
property int unremovableSpacing: 5
|
property int unremovableSpacing: 5
|
||||||
text: PrintInformation.jobName
|
text: PrintInformation.jobName
|
||||||
horizontalAlignment: TextInput.AlignRight
|
horizontalAlignment: TextInput.AlignRight
|
||||||
onTextChanged: {
|
|
||||||
PrintInformation.setJobName(text, true);
|
|
||||||
}
|
|
||||||
onEditingFinished: {
|
onEditingFinished: {
|
||||||
|
PrintInformation.setJobName(text, true);
|
||||||
if (printJobTextfield.text != ''){
|
if (printJobTextfield.text != ''){
|
||||||
printJobTextfield.focus = false;
|
printJobTextfield.focus = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,6 +92,7 @@ Rectangle
|
||||||
anchors.verticalCenter: buildplateIcon.verticalCenter
|
anchors.verticalCenter: buildplateIcon.verticalCenter
|
||||||
anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").height / 2)
|
anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").height / 2)
|
||||||
text: configuration.buildplateConfiguration
|
text: configuration.buildplateConfiguration
|
||||||
|
renderType: Text.NativeRendering
|
||||||
color: textColor
|
color: textColor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ Column
|
||||||
{
|
{
|
||||||
id: extruderLabel
|
id: extruderLabel
|
||||||
text: catalog.i18nc("@label:extruder label", "Extruder")
|
text: catalog.i18nc("@label:extruder label", "Extruder")
|
||||||
|
renderType: Text.NativeRendering
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
font: UM.Theme.getFont("default")
|
font: UM.Theme.getFont("default")
|
||||||
|
@ -59,6 +60,7 @@ Column
|
||||||
id: extruderNumberText
|
id: extruderNumberText
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
text: printCoreConfiguration.position + 1
|
text: printCoreConfiguration.position + 1
|
||||||
|
renderType: Text.NativeRendering
|
||||||
font: UM.Theme.getFont("default")
|
font: UM.Theme.getFont("default")
|
||||||
color: mainColor
|
color: mainColor
|
||||||
}
|
}
|
||||||
|
@ -69,6 +71,7 @@ Column
|
||||||
{
|
{
|
||||||
id: materialLabel
|
id: materialLabel
|
||||||
text: printCoreConfiguration.material.name
|
text: printCoreConfiguration.material.name
|
||||||
|
renderType: Text.NativeRendering
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
width: parent.width
|
width: parent.width
|
||||||
font: UM.Theme.getFont("default_bold")
|
font: UM.Theme.getFont("default_bold")
|
||||||
|
@ -79,6 +82,7 @@ Column
|
||||||
{
|
{
|
||||||
id: printCoreTypeLabel
|
id: printCoreTypeLabel
|
||||||
text: printCoreConfiguration.hotendID
|
text: printCoreConfiguration.hotendID
|
||||||
|
renderType: Text.NativeRendering
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
width: parent.width
|
width: parent.width
|
||||||
font: UM.Theme.getFont("default")
|
font: UM.Theme.getFont("default")
|
||||||
|
|
|
@ -13,7 +13,7 @@ Button
|
||||||
id: base
|
id: base
|
||||||
property var outputDevice: null
|
property var outputDevice: null
|
||||||
property var matched: updateOnSync()
|
property var matched: updateOnSync()
|
||||||
text: matched == true ? "Yes" : "No"
|
text: matched == true ? catalog.i18nc("@label:extruder label", "Yes") : catalog.i18nc("@label:extruder label", "No")
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: parent.height
|
height: parent.height
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,7 @@ gradual_infill_steps
|
||||||
gradual_infill_step_height
|
gradual_infill_step_height
|
||||||
infill_before_walls
|
infill_before_walls
|
||||||
min_infill_area
|
min_infill_area
|
||||||
|
infill_support_enabled
|
||||||
skin_preshrink
|
skin_preshrink
|
||||||
top_skin_preshrink
|
top_skin_preshrink
|
||||||
bottom_skin_preshrink
|
bottom_skin_preshrink
|
||||||
|
@ -369,7 +370,6 @@ spaghetti_infill_extra_volume
|
||||||
support_conical_enabled
|
support_conical_enabled
|
||||||
support_conical_angle
|
support_conical_angle
|
||||||
support_conical_min_width
|
support_conical_min_width
|
||||||
infill_hollow
|
|
||||||
magic_fuzzy_skin_enabled
|
magic_fuzzy_skin_enabled
|
||||||
magic_fuzzy_skin_thickness
|
magic_fuzzy_skin_thickness
|
||||||
magic_fuzzy_skin_point_density
|
magic_fuzzy_skin_point_density
|
||||||
|
|
|
@ -532,7 +532,7 @@ QtObject {
|
||||||
|
|
||||||
SequentialAnimation on x {
|
SequentialAnimation on x {
|
||||||
id: xAnim
|
id: xAnim
|
||||||
property int animEndPoint: Theme.getSize("message").width - (Theme.getSize("default_margin").width * 2) - Theme.getSize("progressbar_control").width
|
property int animEndPoint: Theme.getSize("message").width - Math.round((Theme.getSize("default_margin").width * 2.5)) - Theme.getSize("progressbar_control").width
|
||||||
running: control.indeterminate && control.visible
|
running: control.indeterminate && control.visible
|
||||||
loops: Animation.Infinite
|
loops: Animation.Infinite
|
||||||
NumberAnimation { from: 0; to: xAnim.animEndPoint; duration: 2000;}
|
NumberAnimation { from: 0; to: xAnim.animEndPoint; duration: 2000;}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue