Merge branch 'master' into feature_prime_tower_purge

This commit is contained in:
Tim Kuipers 2017-06-26 16:11:41 +02:00
commit e1d98d22f0
75 changed files with 2570 additions and 625 deletions

3
.gitignore vendored
View File

@ -30,9 +30,6 @@ cura.desktop
.pydevproject
.settings
# Debian packaging
debian*
#Externally located plug-ins.
plugins/Doodle3D-cura-plugin
plugins/GodMode

View File

@ -104,7 +104,6 @@ class BuildVolume(SceneNode):
# but it does not update the disallowed areas after material change
Application.getInstance().getMachineManager().activeStackChanged.connect(self._onStackChanged)
def _onSceneChanged(self, source):
if self._global_container_stack:
self._change_timer.start()
@ -637,7 +636,7 @@ class BuildVolume(SceneNode):
result[extruder.getId()] = []
#Currently, the only normally printed object is the prime tower.
if ExtruderManager.getInstance().getResolveOrValue("prime_tower_enable") == True:
if ExtruderManager.getInstance().getResolveOrValue("prime_tower_enable"):
prime_tower_size = self._global_container_stack.getProperty("prime_tower_size", "value")
machine_width = self._global_container_stack.getProperty("machine_width", "value")
machine_depth = self._global_container_stack.getProperty("machine_depth", "value")
@ -717,6 +716,11 @@ class BuildVolume(SceneNode):
polygon = polygon.getMinkowskiHull(Polygon.approximatedCircle(border_size))
machine_disallowed_polygons.append(polygon)
# For certain machines we don't need to compute disallowed areas for each nozzle.
# So we check here and only do the nozzle offsetting if needed.
no_nozzle_offsetting_for_disallowed_areas = self._global_container_stack.getMetaDataEntry(
"no_nozzle_offsetting_for_disallowed_areas", False)
result = {}
for extruder in used_extruders:
extruder_id = extruder.getId()
@ -736,14 +740,17 @@ class BuildVolume(SceneNode):
right_unreachable_border = 0
top_unreachable_border = 0
bottom_unreachable_border = 0
#The build volume is defined as the union of the area that all extruders can reach, so we need to know the relative offset to all extruders.
for other_extruder in ExtruderManager.getInstance().getActiveExtruderStacks():
other_offset_x = other_extruder.getProperty("machine_nozzle_offset_x", "value")
other_offset_y = other_extruder.getProperty("machine_nozzle_offset_y", "value")
left_unreachable_border = min(left_unreachable_border, other_offset_x - offset_x)
right_unreachable_border = max(right_unreachable_border, other_offset_x - offset_x)
top_unreachable_border = min(top_unreachable_border, other_offset_y - offset_y)
bottom_unreachable_border = max(bottom_unreachable_border, other_offset_y - offset_y)
# Only do nozzle offsetting if needed
if not no_nozzle_offsetting_for_disallowed_areas:
#The build volume is defined as the union of the area that all extruders can reach, so we need to know the relative offset to all extruders.
for other_extruder in ExtruderManager.getInstance().getActiveExtruderStacks():
other_offset_x = other_extruder.getProperty("machine_nozzle_offset_x", "value")
other_offset_y = other_extruder.getProperty("machine_nozzle_offset_y", "value")
left_unreachable_border = min(left_unreachable_border, other_offset_x - offset_x)
right_unreachable_border = max(right_unreachable_border, other_offset_x - offset_x)
top_unreachable_border = min(top_unreachable_border, other_offset_y - offset_y)
bottom_unreachable_border = max(bottom_unreachable_border, other_offset_y - offset_y)
half_machine_width = self._global_container_stack.getProperty("machine_width", "value") / 2
half_machine_depth = self._global_container_stack.getProperty("machine_depth", "value") / 2

View File

@ -1,5 +1,6 @@
# Copyright (c) 2015 Ultimaker B.V.
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the AGPLv3 or higher.
from PyQt5.QtNetwork import QLocalServer
from PyQt5.QtNetwork import QLocalSocket
@ -47,6 +48,7 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.SettingFunction import SettingFunction
from cura.Settings.MachineNameValidator import MachineNameValidator
from cura.Settings.ProfilesModel import ProfilesModel
from cura.Settings.MaterialsModel import MaterialsModel
from cura.Settings.QualityAndUserProfilesModel import QualityAndUserProfilesModel
from cura.Settings.SettingInheritanceManager import SettingInheritanceManager
from cura.Settings.UserProfilesModel import UserProfilesModel
@ -62,6 +64,7 @@ from . import CameraImageProvider
from . import MachineActionManager
from cura.Settings.MachineManager import MachineManager
from cura.Settings.MaterialManager import MaterialManager
from cura.Settings.ExtruderManager import ExtruderManager
from cura.Settings.UserChangesModel import UserChangesModel
from cura.Settings.ExtrudersModel import ExtrudersModel
@ -189,6 +192,7 @@ class CuraApplication(QtApplication):
self._machine_action_manager = MachineActionManager.MachineActionManager()
self._machine_manager = None # This is initialized on demand.
self._material_manager = None
self._setting_inheritance_manager = None
self._additional_components = {} # Components to add to certain areas in the interface
@ -640,6 +644,7 @@ class CuraApplication(QtApplication):
# Initialise extruder so as to listen to global container stack changes before the first global container stack is set.
ExtruderManager.getInstance()
qmlRegisterSingletonType(MachineManager, "Cura", 1, 0, "MachineManager", self.getMachineManager)
qmlRegisterSingletonType(MaterialManager, "Cura", 1, 0, "MaterialManager", self.getMaterialManager)
qmlRegisterSingletonType(SettingInheritanceManager, "Cura", 1, 0, "SettingInheritanceManager",
self.getSettingInheritanceManager)
@ -665,6 +670,11 @@ class CuraApplication(QtApplication):
self._machine_manager = MachineManager.createMachineManager()
return self._machine_manager
def getMaterialManager(self, *args):
if self._material_manager is None:
self._material_manager = MaterialManager.createMaterialManager()
return self._material_manager
def getSettingInheritanceManager(self, *args):
if self._setting_inheritance_manager is None:
self._setting_inheritance_manager = SettingInheritanceManager.createSettingInheritanceManager()
@ -708,6 +718,7 @@ class CuraApplication(QtApplication):
qmlRegisterType(ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel")
qmlRegisterSingletonType(ProfilesModel, "Cura", 1, 0, "ProfilesModel", ProfilesModel.createProfilesModel)
qmlRegisterType(MaterialsModel, "Cura", 1, 0, "MaterialsModel")
qmlRegisterType(QualityAndUserProfilesModel, "Cura", 1, 0, "QualityAndUserProfilesModel")
qmlRegisterType(UserProfilesModel, "Cura", 1, 0, "UserProfilesModel")
qmlRegisterType(MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler")

View File

@ -235,7 +235,7 @@ class ContainerManager(QObject):
return True
## Set a setting property value of the specified container.
## Set a setting property of the specified container.
#
# This will set the specified property of the specified setting of the container
# and all containers that share the same base_file (if any). The latter only
@ -269,6 +269,29 @@ class ContainerManager(QObject):
return True
## Get a setting property of the specified container.
#
# This will get the specified property of the specified setting of the
# specified container.
#
# \param container_id The ID of the container to get the setting property
# of.
# \param setting_key The key of the setting to get the property of.
# \param property_name The property to obtain.
# \return The value of the specified property. The type of this property
# value depends on the type of the property. For instance, the "value"
# property of an integer setting will be a Python int, but the "value"
# property of an enum setting will be a Python str.
@pyqtSlot(str, str, str, result = QVariant)
def getContainerProperty(self, container_id: str, setting_key: str, property_name: str):
containers = self._container_registry.findContainers(id = container_id)
if not containers:
Logger.log("w", "Could not get properties of container %s because it was not found.", container_id)
return ""
container = containers[0]
return container.getProperty(setting_key, property_name)
## Set the name of the specified container.
@pyqtSlot(str, str, result = bool)
def setContainerName(self, container_id, new_name):

View File

@ -78,8 +78,9 @@ class ExtruderManager(QObject):
def extruderIds(self):
map = {}
global_stack_id = Application.getInstance().getGlobalContainerStack().getId()
for position in self._extruder_trains[global_stack_id]:
map[position] = self._extruder_trains[global_stack_id][position].getId()
if global_stack_id in self._extruder_trains:
for position in self._extruder_trains[global_stack_id]:
map[position] = self._extruder_trains[global_stack_id][position].getId()
return map
@pyqtSlot(str, result = str)

View File

@ -107,6 +107,21 @@ class GlobalStack(CuraContainerStack):
def setNextStack(self, next_stack: ContainerStack) -> None:
raise Exceptions.InvalidOperationError("Global stack cannot have a next stack!")
## Gets the approximate filament diameter that the machine requires.
#
# The approximate material diameter is the material diameter rounded to
# the nearest millimetre.
#
# If the machine has no requirement for the diameter, -1 is returned.
#
# \return The approximate filament diameter for the printer, as a string.
@pyqtProperty(str)
def approximateMaterialDiameter(self) -> str:
material_diameter = self.definition.getProperty("material_diameter", "value")
if material_diameter is None:
return "-1"
return str(round(float(material_diameter))) #Round, then convert back to string.
# protected:
# Determine whether or not we should try to get the "resolve" property instead of the

View File

@ -11,6 +11,7 @@ from UM.Application import Application
from UM.Preferences import Preferences
from UM.Logger import Logger
from UM.Message import Message
from UM.Decorators import deprecated
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.ContainerStack import ContainerStack
@ -1121,6 +1122,7 @@ class MachineManager(QObject):
def createMachineManager(engine=None, script_engine=None):
return MachineManager()
@deprecated("Use ExtruderStack.material = ... and it won't be necessary", "2.7")
def _updateMaterialContainer(self, definition: "DefinitionContainer", stack: "ContainerStack", variant_container: Optional["InstanceContainer"] = None, preferred_material_name: Optional[str] = None):
if not definition.getMetaDataEntry("has_materials"):
return self._empty_material_container

View File

@ -0,0 +1,54 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the AGPLv3 or higher.
from PyQt5.QtCore import QObject, pyqtSlot #To expose data to QML.
from cura.Settings.ContainerManager import ContainerManager
from UM.Logger import Logger
from UM.Message import Message #To create a warning message about material diameter.
from UM.i18n import i18nCatalog #Translated strings.
catalog = i18nCatalog("cura")
## Handles material-related data, processing requests to change them and
# providing data for the GUI.
#
# TODO: Move material-related managing over from the machine manager to here.
class MaterialManager(QObject):
## Creates the global values for the material manager to use.
def __init__(self, parent = None):
super().__init__(parent)
#Material diameter changed warning message.
self._material_diameter_warning_message = Message(catalog.i18nc("@info:status Has a cancel button next to it.",
"The selected material diameter causes the material to become incompatible with the current printer."))
self._material_diameter_warning_message.addAction("Undo", catalog.i18nc("@action:button", "Undo"), None, catalog.i18nc("@action", "Undo changing the material diameter."))
self._material_diameter_warning_message.actionTriggered.connect(self._materialWarningMessageAction)
## Creates an instance of the MaterialManager.
#
# This should only be called by PyQt to create the singleton instance of
# this class.
@staticmethod
def createMaterialManager(engine = None, script_engine = None):
return MaterialManager()
@pyqtSlot(str, str)
def showMaterialWarningMessage(self, material_id, previous_diameter):
self._material_diameter_warning_message.previous_diameter = previous_diameter #Make sure that the undo button can properly undo the action.
self._material_diameter_warning_message.material_id = material_id
self._material_diameter_warning_message.show()
## Called when clicking "undo" on the warning dialogue for disappeared
# materials.
#
# This executes the undo action, restoring the material diameter.
#
# \param button The identifier of the button that was pressed.
def _materialWarningMessageAction(self, message, button):
if button == "Undo":
container_manager = ContainerManager.getInstance()
container_manager.setContainerMetaDataEntry(self._material_diameter_warning_message.material_id, "properties/diameter", self._material_diameter_warning_message.previous_diameter)
message.hide()
else:
Logger.log("w", "Unknown button action for material diameter warning message: {action}".format(action = button))

View File

@ -0,0 +1,21 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the AGPLv3 or higher.
from UM.Settings.ContainerRegistry import ContainerRegistry #To listen for changes to the materials.
from UM.Settings.Models.InstanceContainersModel import InstanceContainersModel #We're extending this class.
## A model that shows a list of currently valid materials.
class MaterialsModel(InstanceContainersModel):
def __init__(self, parent = None):
super().__init__(parent)
ContainerRegistry.getInstance().containerMetaDataChanged.connect(self._onContainerMetaDataChanged)
## Called when the metadata of the container was changed.
#
# This makes sure that we only update when it was a material that changed.
#
# \param container The container whose metadata was changed.
def _onContainerMetaDataChanged(self, container):
if container.getMetaDataEntry("type") == "material": #Only need to update if a material was changed.
self._update()

View File

@ -1,6 +1,10 @@
[2.6.1]
*New profiles
The Polypropylene material is added and supported with the Ultimaker 3. Support for CPE+ and PC with 0.8mm nozzles is added as well.
[2.6.0]
*Cura versions
Cura 2.6 beta has local version folders, which means the new version wont overwrite the existing configuration and profiles from older versions, but can create a new folder instead. You can now safely check out new beta versions and, if necessary, start up an older version without the danger of losing your profiles.
Cura 2.6 has local version folders, which means the new version wont overwrite the existing configuration and profiles from older versions, but can create a new folder instead. You can now safely check out new beta versions and, if necessary, start up an older version without the danger of losing your profiles.
*Better support adhesion
Weve added extra support settings to allow the creation of improved support profiles with better PVA/PLA adhesion. The Support Interface settings, such as speed and density, are now split up into Support Roof and Support Floor settings.
@ -9,7 +13,7 @@ Weve added extra support settings to allow the creation of improved support p
Custom third-party printers and Ultimaker modifications now have multi-extrusion support. Thanks to Aldo Hoeben for this feature.
*Model auto-arrange
Weve improved placing multiple models or multiplying the same ones, making it easier to arrange your build plate. If theres not enough build plate space or the model is placed beyond the build plate, you can rectify this by selecting Arrange all models in the context menu or by pressing Command+R (MacOS) or Ctrl+R (Windows and Linux). Cura 2.6 beta will then find a better solution for model positioning.
Weve improved placing multiple models or multiplying the same ones, making it easier to arrange your build plate. If theres not enough build plate space or the model is placed beyond the build plate, you can rectify this by selecting Arrange all models in the context menu or by pressing Command+R (MacOS) or Ctrl+R (Windows and Linux). Cura 2.6 will then find a better solution for model positioning.
*Gradual infill
You can now find the Gradual Infill button in Recommended mode. This setting makes the infill concentrated near the top of the model so that we can save time and material for the lower parts of the model. This functionality is especially useful when printing with flexible materials.
@ -42,27 +46,16 @@ Its a lot simpler to save and open files, and Cura will know if its a proj
If you have a custom theme, you can now apply it more easily in the preferences screen.
*Time estimates per feature
<<<<<<< HEAD
You can hover over the print time estimate in the lower right corner to see how the printing time is divided over the printing features (walls, infill, etc.).
=======
You can hover over the print time estimate in the lower right corner to see how the printing time is divided over the printing features (walls, infill, etc.). Thanks to 14bitVoid for this feature.
>>>>>>> 2.6
*Invert the direction of camera zoom
Weve added an option to invert mouse direction for a better user experience.
*Olsson block upgrade
<<<<<<< HEAD
Ultimaker 2 users can now specify if they have the Olsson block installed on their machine.
*OctoPrint plugin
Cura 2.6 beta allows users to send prints to OctoPrint.
=======
Ultimaker 2 users can now specify if they have the Olsson block installed on their machine. Thanks to Aldo Hoeben for this feature.
*OctoPrint plugin
Cura 2.6 beta allows users to send prints to OctoPrint. Thanks to Aldo Hoeben for this feature.
>>>>>>> 2.6
Cura 2.6 allows users to send prints to OctoPrint. Thanks to Aldo Hoeben for this feature.
*Bug fixes
- Post Processing plugin

View File

@ -154,6 +154,8 @@ class StartSliceJob(Job):
if stack.getProperty("machine_extruder_count", "value") > 1:
for extruder_stack in ExtruderManager.getInstance().getMachineExtruders(stack.getId()):
self._buildExtruderMessage(extruder_stack)
else:
self._buildExtruderMessageFromGlobalStack(stack)
for group in object_groups:
group_message = self._slice_message.addRepeatedMessage("object_lists")
@ -215,7 +217,7 @@ class StartSliceJob(Job):
for key in stack.getAllKeys():
# Do not send settings that are not settable_per_extruder.
if stack.getProperty(key, "settable_per_extruder") == False:
if not stack.getProperty(key, "settable_per_extruder"):
continue
setting = message.getMessage("settings").addRepeatedMessage("settings")
setting.name = key
@ -226,6 +228,19 @@ class StartSliceJob(Job):
setting.value = str(stack.getProperty(key, "value")).encode("utf-8")
Job.yieldThread()
## Create extruder message from global stack
def _buildExtruderMessageFromGlobalStack(self, stack):
message = self._slice_message.addRepeatedMessage("extruders")
for key in stack.getAllKeys():
# Do not send settings that are not settable_per_extruder.
if not stack.getProperty(key, "settable_per_extruder"):
continue
setting = message.getMessage("settings").addRepeatedMessage("settings")
setting.name = key
setting.value = str(stack.getProperty(key, "value")).encode("utf-8")
Job.yieldThread()
## Sends all global settings to the engine.
#
# The settings are taken from the global stack. This does not include any

View File

@ -11,6 +11,7 @@ import Cura 1.0 as Cura
Item
{
id: base
width: {
if (UM.LayerView.compatibilityMode) {
return UM.Theme.getSize("layerview_menu_size_compatibility").width;
@ -25,8 +26,12 @@ Item
return UM.Theme.getSize("layerview_menu_size").height + UM.LayerView.extruderCount * (UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("layerview_row_spacing").height)
}
}
property var buttonTarget: {
var force_binding = parent.y; // ensure this gets reevaluated when the panel moves
return base.mapFromItem(parent.parent, parent.buttonTarget.x, parent.buttonTarget.y);
}
Rectangle {
UM.PointingRectangle {
id: layerViewMenu
anchors.left: parent.left
anchors.top: parent.top
@ -35,6 +40,9 @@ Item
z: slider.z - 1
color: UM.Theme.getColor("tool_panel_background")
target: parent.buttonTarget
arrowSize: UM.Theme.getSize("default_arrow").width
ColumnLayout {
id: view_settings

View File

@ -130,9 +130,9 @@ geometry41core =
// fixed size for movements
size_x = 0.05;
} else {
size_x = v_line_dim[0].x / 2 + 0.01; // radius, and make it nicely overlapping
size_x = v_line_dim[1].x / 2 + 0.01; // radius, and make it nicely overlapping
}
size_y = v_line_dim[0].y / 2 + 0.01;
size_y = v_line_dim[1].y / 2 + 0.01;
g_vertex_delta = gl_in[1].gl_Position - gl_in[0].gl_Position;
g_vertex_normal_horz_head = normalize(vec3(-g_vertex_delta.x, -g_vertex_delta.y, -g_vertex_delta.z));

View File

@ -0,0 +1,201 @@
# Copyright (c) 2017 Ultimaker B.V.
# PluginBrowser is released under the terms of the AGPLv3 or higher.
from UM.Extension import Extension
from UM.i18n import i18nCatalog
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
from UM.PluginRegistry import PluginRegistry
from UM.Application import Application
from UM.Version import Version
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
from PyQt5.QtCore import QUrl, QObject, Qt, pyqtProperty, pyqtSignal, pyqtSlot
from PyQt5.QtQml import QQmlComponent, QQmlContext
import json
import os
import tempfile
i18n_catalog = i18nCatalog("cura")
class PluginBrowser(QObject, Extension):
def __init__(self, parent = None):
super().__init__(parent)
self.addMenuItem(i18n_catalog.i18n("Browse plugins"), self.browsePlugins)
self._api_version = 1
self._api_url = "http://software.ultimaker.com/cura/v%s/" % self._api_version
self._plugin_list_request = None
self._download_plugin_request = None
self._download_plugin_reply = None
self._network_manager = None
self._plugins_metadata = []
self._plugins_model = None
self._qml_component = None
self._qml_context = None
self._dialog = None
self._download_progress = 0
self._is_downloading = False
self._request_header = [b"User-Agent", str.encode("%s - %s" % (Application.getInstance().getApplicationName(), Application.getInstance().getVersion()))]
# Installed plugins are really installed after reboot. In order to prevent the user from downloading the
# same file over and over again, we keep track of the upgraded plugins.
self._newly_installed_plugin_ids = []
pluginsMetadataChanged = pyqtSignal()
onDownloadProgressChanged = pyqtSignal()
onIsDownloadingChanged = pyqtSignal()
@pyqtProperty(bool, notify = onIsDownloadingChanged)
def isDownloading(self):
return self._is_downloading
def browsePlugins(self):
self._createNetworkManager()
self.requestPluginList()
if not self._dialog:
self._createDialog()
self._dialog.show()
def requestPluginList(self):
url = QUrl(self._api_url + "plugins")
self._plugin_list_request = QNetworkRequest(url)
self._plugin_list_request.setRawHeader(*self._request_header)
self._network_manager.get(self._plugin_list_request)
def _createDialog(self):
Logger.log("d", "PluginBrowser")
path = QUrl.fromLocalFile(os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), "PluginBrowser.qml"))
self._qml_component = QQmlComponent(Application.getInstance()._engine, path)
# We need access to engine (although technically we can't)
self._qml_context = QQmlContext(Application.getInstance()._engine.rootContext())
self._qml_context.setContextProperty("manager", self)
self._dialog = self._qml_component.create(self._qml_context)
if self._dialog is None:
Logger.log("e", "QQmlComponent status %s", self._qml_component.status())
Logger.log("e", "QQmlComponent errorString %s", self._qml_component.errorString())
def setIsDownloading(self, is_downloading):
if self._is_downloading != is_downloading:
self._is_downloading = is_downloading
self.onIsDownloadingChanged.emit()
def _onDownloadPluginProgress(self, bytes_sent, bytes_total):
if bytes_total > 0:
new_progress = bytes_sent / bytes_total * 100
if new_progress > self._download_progress:
self._download_progress = new_progress
self.onDownloadProgressChanged.emit()
self._download_progress = new_progress
if new_progress == 100.0:
self.setIsDownloading(False)
self._download_plugin_reply.downloadProgress.disconnect(self._onDownloadPluginProgress)
self._temp_plugin_file = tempfile.NamedTemporaryFile(suffix = ".curaplugin")
self._temp_plugin_file.write(self._download_plugin_reply.readAll())
result = PluginRegistry.getInstance().installPlugin("file://" + self._temp_plugin_file.name)
self._newly_installed_plugin_ids.append(result["id"])
self.pluginsMetadataChanged.emit()
Application.getInstance().messageBox(i18n_catalog.i18nc("@window:title", "Plugin browser"), result["message"])
self._temp_plugin_file.close() # Plugin was installed, delete temp file
@pyqtProperty(int, notify = onDownloadProgressChanged)
def downloadProgress(self):
return self._download_progress
@pyqtSlot(str)
def downloadAndInstallPlugin(self, url):
Logger.log("i", "Attempting to download & install plugin from %s", url)
url = QUrl(url)
self._download_plugin_request = QNetworkRequest(url)
self._download_plugin_request.setRawHeader(*self._request_header)
self._download_plugin_reply = self._network_manager.get(self._download_plugin_request)
self._download_progress = 0
self.setIsDownloading(True)
self.onDownloadProgressChanged.emit()
self._download_plugin_reply.downloadProgress.connect(self._onDownloadPluginProgress)
@pyqtProperty(QObject, notify=pluginsMetadataChanged)
def pluginsModel(self):
if self._plugins_model is None:
self._plugins_model = ListModel()
self._plugins_model.addRoleName(Qt.UserRole + 1, "name")
self._plugins_model.addRoleName(Qt.UserRole + 2, "version")
self._plugins_model.addRoleName(Qt.UserRole + 3, "short_description")
self._plugins_model.addRoleName(Qt.UserRole + 4, "author")
self._plugins_model.addRoleName(Qt.UserRole + 5, "already_installed")
self._plugins_model.addRoleName(Qt.UserRole + 6, "file_location")
self._plugins_model.addRoleName(Qt.UserRole + 7, "can_upgrade")
else:
self._plugins_model.clear()
items = []
for metadata in self._plugins_metadata:
items.append({
"name": metadata["label"],
"version": metadata["version"],
"short_description": metadata["short_description"],
"author": metadata["author"],
"already_installed": self._checkAlreadyInstalled(metadata["id"]),
"file_location": metadata["file_location"],
"can_upgrade": self._checkCanUpgrade(metadata["id"], metadata["version"])
})
self._plugins_model.setItems(items)
return self._plugins_model
def _checkCanUpgrade(self, id, version):
plugin_registry = PluginRegistry.getInstance()
metadata = plugin_registry.getMetaData(id)
if metadata != {}:
if id in self._newly_installed_plugin_ids:
return False # We already updated this plugin.
current_version = Version(metadata["plugin"]["version"])
new_version = Version(version)
if new_version > current_version:
return True
return False
def _checkAlreadyInstalled(self, id):
plugin_registry = PluginRegistry.getInstance()
metadata = plugin_registry.getMetaData(id)
if metadata != {}:
return True
else:
if id in self._newly_installed_plugin_ids:
return True # We already installed this plugin, but the registry just doesn't know it yet.
return False
def _onRequestFinished(self, reply):
reply_url = reply.url().toString()
if reply.operation() == QNetworkAccessManager.GetOperation:
if reply_url == self._api_url + "plugins":
try:
json_data = json.loads(bytes(reply.readAll()).decode("utf-8"))
self._plugins_metadata = json_data
self.pluginsMetadataChanged.emit()
except json.decoder.JSONDecodeError:
Logger.log("w", "Received an invalid print job state message: Not valid JSON.")
return
else:
# Ignore any operation that is not a get operation
pass
def _createNetworkManager(self):
if self._network_manager:
self._network_manager.finished.disconnect(self._onRequestFinished)
self._network_manager = QNetworkAccessManager()
self._network_manager.finished.connect(self._onRequestFinished)

View File

@ -0,0 +1,105 @@
import UM 1.1 as UM
import QtQuick 2.2
import QtQuick.Dialogs 1.1
import QtQuick.Window 2.2
import QtQuick.Controls 1.1
UM.Dialog
{
id: base
title: catalog.i18nc("@title:window", "Find & Update plugins")
width: 600
height: 450
Item
{
anchors.fill: parent
Label
{
id: introText
text: catalog.i18nc("@label", "Here you can find a list of Third Party plugins.")
width: parent.width
height: 30
}
ScrollView
{
width: parent.width
anchors.top: introText.bottom
anchors.bottom: progressbar.top
anchors.bottomMargin: UM.Theme.getSize("default_margin").height
frameVisible: true
ListView
{
id: pluginList
model: manager.pluginsModel
anchors.fill: parent
delegate: pluginDelegate
}
}
ProgressBar
{
id: progressbar
anchors.bottom: parent.bottom
style: UM.Theme.styles.progressbar
minimumValue: 0;
maximumValue: 100
width: parent.width
height: 10
value: manager.downloadProgress
}
Item
{
SystemPalette { id: palette }
Component
{
id: pluginDelegate
Rectangle
{
width: pluginList.width;
height: childrenRect.height;
color: index % 2 ? palette.base : palette.alternateBase
Column
{
width: parent.width
height: childrenRect.height
anchors.left: parent.left
anchors.leftMargin: UM.Theme.getSize("default_margin").width
anchors.right: downloadButton.left
anchors.rightMargin: UM.Theme.getSize("default_margin").width
Label
{
text: "<b>" + model.name + "</b> - " + model.author
width: contentWidth
height: contentHeight + UM.Theme.getSize("default_margin").height
verticalAlignment: Text.AlignVCenter
}
Label
{
text: model.short_description
width: parent.width
height: contentHeight + UM.Theme.getSize("default_margin").height
wrapMode: Text.WordWrap
verticalAlignment: Text.AlignVCenter
}
}
Button
{
id: downloadButton
text: !model.already_installed ? catalog.i18nc("@action:button", "Download") : model.can_upgrade ? catalog.i18nc("@action:button", "Upgrade") : catalog.i18nc("@action:button", "Download")
onClicked: manager.downloadAndInstallPlugin(model.file_location)
anchors.right: parent.right
anchors.rightMargin: UM.Theme.getSize("default_margin").width
anchors.verticalCenter: parent.verticalCenter
enabled: (!model.already_installed || model.can_upgrade) && !manager.isDownloading
}
}
}
}
UM.I18nCatalog { id: catalog; name:"cura" }
}
}

View File

@ -0,0 +1,12 @@
# Copyright (c) 2017 Ultimaker B.V.
# PluginBrowser is released under the terms of the AGPLv3 or higher.
from . import PluginBrowser
def getMetaData():
return {}
def register(app):
return {"extension": PluginBrowser.PluginBrowser()}

View File

@ -0,0 +1,7 @@
{
"name": "Plugin Browser",
"author": "Ultimaker",
"version": "1.0.0",
"api": 4,
"description": "Find, manage and install new plugins."
}

View File

@ -0,0 +1,60 @@
{
"id": "Dagoma_discoeasy200",
"name": "Dagoma DiscoEasy200",
"version": 2,
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Dagoma",
"manufacturer": "Dagoma",
"category": "Other",
"file_formats": "text/x-gcode",
"icon": "icon_ultimaker2.png",
"platform": "discoeasy200.stl",
"platform_offset": [ 105, -59, 280]
},
"overrides": {
"machine_width": {
"default_value": 211
},
"machine_height": {
"default_value": 205
},
"machine_depth": {
"default_value": 211
},
"machine_center_is_zero": {
"default_value": false
},
"machine_nozzle_size": {
"default_value": 0.4
},
"machine_head_with_fans_polygon": {
"default_value": [
[16, 37],
[16, -65],
[-16, -65],
[16, 37]
]
},
"machine_nozzle_gantry_distance": {
"default_value": 55
},
"machine_nozzle_offset_x_1": {
"default_value": 18
},
"machine_nozzle_offset_y_1": {
"default_value": 0
},
"machine_gcode_flavor": {
"default_value": "RepRap"
},
"machine_start_gcode": {
"default_value": ";Gcode by Cura\nG90 ;absolute positioning\nM106 S250 ;fan on for the palpeur\nG28 X Y\nG1 X50\nM109 S180\nG28\nM104 S{print_temperature}\n;Activation palpeur\n;bloc palpeur\nG29 ;Auto level\nM107 ;start with the fan off\nG1 X100 Y20 F3000\nG1 Z0.5\nM109 S{print_temperature}\nM140 S{material_bed_temperature}\nM82 ;set extruder to absolute mode\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 Z3\nG1 F3000\n"
},
"machine_end_gcode": {
"default_value": "\nM104 S0\nM106 S255 ;start fan full power\nM140 S0 ;heated bed heater off (if you have it)\n;Home machine\nG91 ;relative positioning\nG1 E-1 F{retraction_speed} ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+3 F3000 ;move Z up a bit and retract filament even more\nG90\nG28 X Y\n;Ventilation forcee\nM107 ;stop fan\n;Shut down motor\nM84 ;shut down motors\n"
}
}
}

View File

@ -30,6 +30,15 @@
"settable_per_meshgroup": false,
"settable_globally": false
},
"machine_nozzle_id":
{
"label": "Nozzle ID",
"description": "The nozzle ID for an extruder train, such as \"AA 0.4\" and \"BB 0.8\".",
"type": "str",
"default_value": "unknown",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"machine_nozzle_size":
{
"label": "Nozzle Diameter",

View File

@ -407,6 +407,15 @@
"settable_per_extruder": false,
"settable_per_meshgroup": false
},
"machine_nozzle_id":
{
"label": "Nozzle ID",
"description": "The nozzle ID for an extruder train, such as \"AA 0.4\" and \"BB 0.8\".",
"type": "str",
"default_value": "unknown",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"machine_nozzle_size":
{
"label": "Nozzle Diameter",

View File

@ -8,183 +8,184 @@ msgstr ""
"Project-Id-Version: Cura 2.6\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
"POT-Creation-Date: 2017-05-30 15:32+0000\n"
"PO-Revision-Date: 2017-03-27 17:27+0000\n"
"PO-Revision-Date: 2017-06-19 17:36+0900\n"
"Last-Translator: None\n"
"Language-Team: None\n"
"Language: Korean\n"
"Language: ko\n"
"Lang-Code: ko\n"
"Country-Code: KR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.0.1\n"
#: fdmextruder.def.json
msgctxt "machine_settings label"
msgid "Machine"
msgstr ""
msgstr "장비 "
#: fdmextruder.def.json
msgctxt "machine_settings description"
msgid "Machine specific settings"
msgstr ""
msgstr "장비 별 설정 "
#: fdmextruder.def.json
msgctxt "extruder_nr label"
msgid "Extruder"
msgstr ""
msgstr "압출기 "
#: fdmextruder.def.json
msgctxt "extruder_nr description"
msgid "The extruder train used for printing. This is used in multi-extrusion."
msgstr ""
msgstr "인쇄에 사용되는 압출기 트레인. 이것은 다중 압출에 사용됩니다. "
#: fdmextruder.def.json
msgctxt "machine_nozzle_size label"
msgid "Nozzle Diameter"
msgstr ""
msgstr "노즐 지름"
#: fdmextruder.def.json
msgctxt "machine_nozzle_size description"
msgid "The inner diameter of the nozzle. Change this setting when using a non-standard nozzle size."
msgstr ""
msgstr "노즐의 내경. 비표준 노즐 크기를 사용할 때, 본 설정을 변경하십시오. "
#: fdmextruder.def.json
msgctxt "machine_nozzle_offset_x label"
msgid "Nozzle X Offset"
msgstr ""
msgstr "노즐 X 오프셋 "
#: fdmextruder.def.json
msgctxt "machine_nozzle_offset_x description"
msgid "The x-coordinate of the offset of the nozzle."
msgstr ""
msgstr "노즐 오프셋의 x 좌표입니다. "
#: fdmextruder.def.json
msgctxt "machine_nozzle_offset_y label"
msgid "Nozzle Y Offset"
msgstr ""
msgstr "노즐 Y 오프셋"
#: fdmextruder.def.json
msgctxt "machine_nozzle_offset_y description"
msgid "The y-coordinate of the offset of the nozzle."
msgstr ""
msgstr "노즐 오프셋의 y 좌표입니다. "
#: fdmextruder.def.json
msgctxt "machine_extruder_start_code label"
msgid "Extruder Start G-Code"
msgstr ""
msgstr "압출기 시작 G 코드"
#: fdmextruder.def.json
msgctxt "machine_extruder_start_code description"
msgid "Start g-code to execute whenever turning the extruder on."
msgstr ""
msgstr "압출기를 켤 때마다 실행할 g 코드를 시작하십시오. "
#: fdmextruder.def.json
msgctxt "machine_extruder_start_pos_abs label"
msgid "Extruder Start Position Absolute"
msgstr ""
msgstr "압출기 시작 위치의 절대 값 "
#: fdmextruder.def.json
msgctxt "machine_extruder_start_pos_abs description"
msgid "Make the extruder starting position absolute rather than relative to the last-known location of the head."
msgstr ""
msgstr "압출기 시작 위치를 헤드의 마지막으로 알려진 위치에 상대적이 아닌 절대 위치로 만듭니다."
#: fdmextruder.def.json
msgctxt "machine_extruder_start_pos_x label"
msgid "Extruder Start Position X"
msgstr ""
msgstr "압출기 시작 X의 위치 "
#: fdmextruder.def.json
msgctxt "machine_extruder_start_pos_x description"
msgid "The x-coordinate of the starting position when turning the extruder on."
msgstr ""
msgstr "압출기를 켤 때 시작 위치의 x 좌표. "
#: fdmextruder.def.json
msgctxt "machine_extruder_start_pos_y label"
msgid "Extruder Start Position Y"
msgstr ""
msgstr "압출기 시작 위치 Y "
#: fdmextruder.def.json
msgctxt "machine_extruder_start_pos_y description"
msgid "The y-coordinate of the starting position when turning the extruder on."
msgstr ""
msgstr "압출기를 켤 때 시작 위치의 y 좌표입니다. "
#: fdmextruder.def.json
msgctxt "machine_extruder_end_code label"
msgid "Extruder End G-Code"
msgstr ""
msgstr "압출기 최종 G 코드 "
#: fdmextruder.def.json
msgctxt "machine_extruder_end_code description"
msgid "End g-code to execute whenever turning the extruder off."
msgstr ""
msgstr "압출기를 끌 때마다 실행할 g 코드를 종료하십시오. "
#: fdmextruder.def.json
msgctxt "machine_extruder_end_pos_abs label"
msgid "Extruder End Position Absolute"
msgstr ""
msgstr "압출기 끝 절대 위치 "
#: fdmextruder.def.json
msgctxt "machine_extruder_end_pos_abs description"
msgid "Make the extruder ending position absolute rather than relative to the last-known location of the head."
msgstr ""
msgstr "압출 성형기가 헤드의 마지막으로 알려진 위치에 상대적이 아닌 절대 위치로 끝나도록하십시오. "
#: fdmextruder.def.json
msgctxt "machine_extruder_end_pos_x label"
msgid "Extruder End Position X"
msgstr ""
msgstr "압출기 끝 X 위치 "
#: fdmextruder.def.json
msgctxt "machine_extruder_end_pos_x description"
msgid "The x-coordinate of the ending position when turning the extruder off."
msgstr ""
msgstr "압출기를 끌 때 끝 위치의 x 좌표."
#: fdmextruder.def.json
msgctxt "machine_extruder_end_pos_y label"
msgid "Extruder End Position Y"
msgstr ""
msgstr "압출기 끝 Y 위치 "
#: fdmextruder.def.json
msgctxt "machine_extruder_end_pos_y description"
msgid "The y-coordinate of the ending position when turning the extruder off."
msgstr ""
msgstr "압출기를 끌 때 종료 위치의 y 좌표입니다. "
#: fdmextruder.def.json
msgctxt "extruder_prime_pos_z label"
msgid "Extruder Prime Z Position"
msgstr ""
msgstr "압출기 프라임 Z 위치 "
#: fdmextruder.def.json
msgctxt "extruder_prime_pos_z description"
msgid "The Z coordinate of the position where the nozzle primes at the start of printing."
msgstr ""
msgstr "인쇄가 시작될 때 노즐이 끝나는 위치의 Z 좌표입니다. "
#: fdmextruder.def.json
msgctxt "platform_adhesion label"
msgid "Build Plate Adhesion"
msgstr ""
msgstr "플레이트 접착력 강화 "
#: fdmextruder.def.json
msgctxt "platform_adhesion description"
msgid "Adhesion"
msgstr ""
msgstr "부착 "
#: fdmextruder.def.json
msgctxt "extruder_prime_pos_x label"
msgid "Extruder Prime X Position"
msgstr ""
msgstr "압출기 프라임 X 위치 "
#: fdmextruder.def.json
msgctxt "extruder_prime_pos_x description"
msgid "The X coordinate of the position where the nozzle primes at the start of printing."
msgstr ""
msgstr "인쇄가 시작될 때 노즐이 끝내는 위치의 X 좌표입니다. "
#: fdmextruder.def.json
msgctxt "extruder_prime_pos_y label"
msgid "Extruder Prime Y Position"
msgstr ""
msgstr "압출기 프라임 Y 위치 "
#: fdmextruder.def.json
msgctxt "extruder_prime_pos_y description"
msgid "The Y coordinate of the position where the nozzle primes at the start of printing."
msgstr ""
msgstr "인쇄가 시작될 때 노즐이 끝내는 위치의 Y 좌표입니다. "

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -306,9 +306,14 @@ UM.MainWindow
{
id: view_panel
anchors.top: viewModeButton.bottom
anchors.topMargin: UM.Theme.getSize("default_margin").height;
property bool hugBottom: parent.height < viewModeButton.y + viewModeButton.height + height + UM.Theme.getSize("default_margin").height
anchors.bottom: parent.bottom // panel is always anchored to the bottom only, because dynamically switching between bottom and top results in stretching the height
anchors.bottomMargin: hugBottom ? 0 : parent.height - (viewModeButton.y + viewModeButton.height + height + UM.Theme.getSize("default_margin").height)
anchors.left: viewModeButton.left;
anchors.leftMargin: hugBottom ? viewModeButton.width + UM.Theme.getSize("default_margin").width : 0
property var buttonTarget: Qt.point(viewModeButton.x + viewModeButton.width / 2, viewModeButton.y + viewModeButton.height / 2)
height: childrenRect.height;

View File

@ -153,7 +153,7 @@ UM.PreferencesPage
append({ text: "Français", code: "fr" })
append({ text: "Italiano", code: "it" })
append({ text: "日本語", code: "jp" })
//append({ text: "", code: "ko" })
append({ text: "한국어", code: "ko" })
append({ text: "Nederlands", code: "nl" })
append({ text: "Português do Brasil", code: "ptbr" })
append({ text: "Русский", code: "ru" })
@ -237,6 +237,7 @@ UM.PreferencesPage
return i
}
}
return 0;
}
onActivated: UM.Preferences.setValue("general/theme", model.get(index).code)

View File

@ -1,5 +1,5 @@
// Copyright (c) 2016 Ultimaker B.V.
// Uranium is released under the terms of the AGPLv3 or higher.
// Copyright (c) 2017 Ultimaker B.V.
// Cura is released under the terms of the AGPLv3 or higher.
import QtQuick 2.1
import QtQuick.Controls 1.3
@ -168,8 +168,13 @@ TabView
{
// This does not use a SettingPropertyProvider, because we need to make the change to all containers
// which derive from the same base_file
var old_diameter = Cura.ContainerManager.getContainerProperty(base.containerId, "material_diameter", "value").toString();
base.setMetaDataEntry("approximate_diameter", properties.approximate_diameter, Math.round(value).toString());
base.setMetaDataEntry("properties/diameter", properties.diameter, value);
if (Cura.MachineManager.filterMaterialsByMachine && properties.approximate_diameter != Cura.MachineManager.activeMachine.approximateMaterialDiameter)
{
Cura.MaterialManager.showMaterialWarningMessage(base.containerId, old_diameter);
}
Cura.ContainerManager.setContainerProperty(base.containerId, "material_diameter", "value", value);
}
onValueChanged: updateCostPerMeter()

View File

@ -20,7 +20,7 @@ UM.ManagementPage
objectList.positionViewAtBeginning();
}
model: UM.InstanceContainersModel
model: Cura.MaterialsModel
{
filter:
{

View File

@ -320,7 +320,17 @@ Column
Rectangle //Input field for pre-heat temperature.
{
id: preheatTemperatureControl
color: !enabled ? UM.Theme.getColor("setting_control_disabled") : UM.Theme.getColor("setting_validation_ok")
color: !enabled ? UM.Theme.getColor("setting_control_disabled") : showError ? UM.Theme.getColor("setting_validation_error") : UM.Theme.getColor("setting_validation_ok")
property var showError:
{
if(bedTemperature.properties.maximum_value != "None" && bedTemperature.properties.maximum_value < parseInt(preheatTemperatureInput.text))
{
return true;
} else
{
return false;
}
}
enabled:
{
if (connectedPrinter == null)

View File

@ -14,10 +14,14 @@ Button {
style: UM.Theme.styles.sidebar_category;
signal showTooltip(string text);
signal hideTooltip();
signal showTooltip(string text)
signal hideTooltip()
signal contextMenuRequested()
signal showAllHiddenInheritedSettings(string category_id)
signal focusReceived()
signal setActiveFocusToNextSetting(bool forward)
property var focusItem: base
text: definition.label
iconSource: UM.Theme.getIcon(definition.icon)
@ -25,7 +29,33 @@ Button {
checkable: true
checked: definition.expanded
onClicked: { forceActiveFocus(); definition.expanded ? settingDefinitionsModel.collapse(definition.key) : settingDefinitionsModel.expandAll(definition.key) }
onClicked:
{
forceActiveFocus();
if(definition.expanded)
{
settingDefinitionsModel.collapse(definition.key);
} else {
settingDefinitionsModel.expandAll(definition.key);
}
}
onActiveFocusChanged:
{
if(activeFocus)
{
base.focusReceived();
}
}
Keys.onTabPressed:
{
base.setActiveFocusToNextSetting(true)
}
Keys.onBacktabPressed:
{
base.setActiveFocusToNextSetting(false)
}
UM.SimpleButton
{
id: settingsButton

View File

@ -11,6 +11,7 @@ import UM 1.2 as UM
SettingItem
{
id: base
property var focusItem: control
contents: MouseArea
{
@ -49,12 +50,35 @@ SettingItem
}
}
Keys.onSpacePressed:
{
forceActiveFocus();
propertyProvider.setPropertyValue("value", !checked);
}
onClicked:
{
forceActiveFocus();
propertyProvider.setPropertyValue("value", !checked);
}
Keys.onTabPressed:
{
base.setActiveFocusToNextSetting(true)
}
Keys.onBacktabPressed:
{
base.setActiveFocusToNextSetting(false)
}
onActiveFocusChanged:
{
if(activeFocus)
{
base.focusReceived();
}
}
Rectangle
{
anchors
@ -67,7 +91,7 @@ SettingItem
color:
{
if (!enabled)
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled")
}
@ -75,14 +99,22 @@ SettingItem
{
return UM.Theme.getColor("setting_control_highlight")
}
else
{
return UM.Theme.getColor("setting_control")
}
return UM.Theme.getColor("setting_control")
}
border.width: UM.Theme.getSize("default_lining").width
border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : control.containsMouse ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border")
border.color:
{
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled_border")
}
if(control.containsMouse || control.activeFocus)
{
return UM.Theme.getColor("setting_control_border_highlight")
}
return UM.Theme.getColor("setting_control_border")
}
UM.RecolorImage {
anchors.verticalCenter: parent.verticalCenter

View File

@ -10,6 +10,7 @@ import UM 1.1 as UM
SettingItem
{
id: base
property var focusItem: control
contents: ComboBox
{
@ -33,21 +34,29 @@ SettingItem
{
color:
{
if (!enabled)
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled")
}
if(control.hovered || base.activeFocus)
if(control.hovered || control.activeFocus)
{
return UM.Theme.getColor("setting_control_highlight")
}
else
{
return UM.Theme.getColor("setting_control")
}
return UM.Theme.getColor("setting_control")
}
border.width: UM.Theme.getSize("default_lining").width
border.color:
{
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled_border")
}
if(control.hovered || control.activeFocus)
{
return UM.Theme.getColor("setting_control_border_highlight")
}
return UM.Theme.getColor("setting_control_border")
}
border.width: UM.Theme.getSize("default_lining").width;
border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : control.hovered ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border");
}
label: Item
{
@ -86,7 +95,28 @@ SettingItem
}
}
onActivated: { forceActiveFocus(); propertyProvider.setPropertyValue("value", definition.options[index].key) }
onActivated:
{
forceActiveFocus();
propertyProvider.setPropertyValue("value", definition.options[index].key);
}
onActiveFocusChanged:
{
if(activeFocus)
{
base.focusReceived();
}
}
Keys.onTabPressed:
{
base.setActiveFocusToNextSetting(true)
}
Keys.onBacktabPressed:
{
base.setActiveFocusToNextSetting(false)
}
Binding
{

View File

@ -11,6 +11,7 @@ import Cura 1.0 as Cura
SettingItem
{
id: base
property var focusItem: control
contents: ComboBox
{
@ -27,6 +28,23 @@ SettingItem
propertyProvider.setPropertyValue("value", model.getItem(index).index);
}
onActiveFocusChanged:
{
if(activeFocus)
{
base.focusReceived();
}
}
Keys.onTabPressed:
{
base.setActiveFocusToNextSetting(true)
}
Keys.onBacktabPressed:
{
base.setActiveFocusToNextSetting(false)
}
currentIndex: propertyProvider.properties.value
MouseArea
@ -53,7 +71,7 @@ SettingItem
{
color:
{
if (!enabled)
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled");
}
@ -61,23 +79,19 @@ SettingItem
{
return UM.Theme.getColor("setting_control_highlight");
}
else
{
return UM.Theme.getColor("setting_control");
}
return UM.Theme.getColor("setting_control");
}
border.width: UM.Theme.getSize("default_lining").width
border.color:
{
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled_border");
return UM.Theme.getColor("setting_control_disabled_border")
}
if(control.hovered || base.activeFocus)
if(control.hovered || control.activeFocus)
{
UM.Theme.getColor("setting_control_border_highlight")
return UM.Theme.getColor("setting_control_border_highlight")
}
return UM.Theme.getColor("setting_control_border")
}
}

View File

@ -32,9 +32,11 @@ Item {
property var stackLevels: propertyProvider.stackLevels
property var stackLevel: stackLevels[0]
signal focusReceived()
signal setActiveFocusToNextSetting(bool forward)
signal contextMenuRequested()
signal showTooltip(string text);
signal hideTooltip();
signal showTooltip(string text)
signal hideTooltip()
signal showAllHiddenInheritedSettings(string category_id)
property string tooltipText:
{

View File

@ -11,6 +11,7 @@ import Cura 1.0 as Cura
SettingItem
{
id: base
property var focusItem: control
contents: ComboBox
{
@ -31,6 +32,23 @@ SettingItem
propertyProvider.setPropertyValue("value", model.getItem(index).index);
}
onActiveFocusChanged:
{
if(activeFocus)
{
base.focusReceived();
}
}
Keys.onTabPressed:
{
base.setActiveFocusToNextSetting(true)
}
Keys.onBacktabPressed:
{
base.setActiveFocusToNextSetting(false)
}
Binding
{
target: control
@ -72,31 +90,27 @@ SettingItem
{
color:
{
if (!enabled)
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled");
}
if(control.hovered || base.activeFocus)
if(control.hovered || control.activeFocus)
{
return UM.Theme.getColor("setting_control_highlight");
}
else
{
return UM.Theme.getColor("setting_control");
}
return UM.Theme.getColor("setting_control");
}
border.width: UM.Theme.getSize("default_lining").width
border.color:
{
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled_border");
return UM.Theme.getColor("setting_control_disabled_border")
}
if(control.hovered || base.activeFocus)
if(control.hovered || control.activeFocus)
{
UM.Theme.getColor("setting_control_border_highlight")
return UM.Theme.getColor("setting_control_border_highlight")
}
return UM.Theme.getColor("setting_control_border")
}
}

View File

@ -9,6 +9,7 @@ import UM 1.1 as UM
SettingItem
{
id: base
property var focusItem: input
contents: Rectangle
{
@ -17,10 +18,21 @@ SettingItem
anchors.fill: parent
border.width: UM.Theme.getSize("default_lining").width
border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : hovered ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border")
border.color:
{
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled_border")
}
if(hovered || input.activeFocus)
{
return UM.Theme.getColor("setting_control_border_highlight")
}
return UM.Theme.getColor("setting_control_border")
}
color: {
if (!enabled)
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled")
}
@ -83,6 +95,15 @@ SettingItem
verticalCenter: parent.verticalCenter
}
Keys.onTabPressed:
{
base.setActiveFocusToNextSetting(true)
}
Keys.onBacktabPressed:
{
base.setActiveFocusToNextSetting(false)
}
Keys.onReleased:
{
propertyProvider.setPropertyValue("value", text)
@ -93,6 +114,14 @@ SettingItem
propertyProvider.setPropertyValue("value", text)
}
onActiveFocusChanged:
{
if(activeFocus)
{
base.focusReceived();
}
}
color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text")
font: UM.Theme.getFont("default");

View File

@ -168,6 +168,8 @@ Item
onVisibilityChanged: Cura.SettingInheritanceManager.forceUpdate()
}
property var indexWithFocus: -1
delegate: Loader
{
id: delegate
@ -298,11 +300,53 @@ Item
}
Cura.SettingInheritanceManager.manualRemoveOverride(category_id)
}
onFocusReceived:
{
contents.indexWithFocus = index;
animateContentY.from = contents.contentY;
contents.positionViewAtIndex(index, ListView.Contain);
animateContentY.to = contents.contentY;
animateContentY.running = true;
}
onSetActiveFocusToNextSetting:
{
if(forward == undefined || forward)
{
contents.currentIndex = contents.indexWithFocus + 1;
while(contents.currentItem && contents.currentItem.height <= 0)
{
contents.currentIndex++;
}
if(contents.currentItem)
{
contents.currentItem.item.focusItem.forceActiveFocus();
}
}
else
{
contents.currentIndex = contents.indexWithFocus - 1;
while(contents.currentItem && contents.currentItem.height <= 0)
{
contents.currentIndex--;
}
if(contents.currentItem)
{
contents.currentItem.item.focusItem.forceActiveFocus();
}
}
}
}
}
UM.I18nCatalog { id: catalog; name: "cura"; }
NumberAnimation {
id: animateContentY
target: contents
property: "contentY"
duration: 50
}
add: Transition {
SequentialAnimation {
NumberAnimation { properties: "height"; from: 0; duration: 100 }

View File

@ -0,0 +1,76 @@
[general]
version = 2
name = Normal
definition = ultimaker2_plus
[metadata]
type = quality
material = generic_polypropylene_ultimaker2_plus_0.4_mm
weight = -1
quality_type = fast
setting_version = 1
[values]
acceleration_enabled = True
acceleration_layer_0 = =acceleration_topbottom
acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_print = 4000
acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_support_interface = =acceleration_topbottom
acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
brim_width = 20
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 20
gradual_infill_step_height = =layer_height * 2
gradual_infill_steps = 3
infill_line_width = =round(line_width * 0.4 / 0.38, 2)
infill_overlap = 0
infill_pattern = cubic
infill_sparse_density = 96
infill_wipe_dist = 0
jerk_enabled = True
jerk_layer_0 = =jerk_topbottom
jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
jerk_print = 25
jerk_support = =math.ceil(jerk_print * 15 / 25)
jerk_support_interface = =jerk_topbottom
jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
jerk_wall = =math.ceil(jerk_print * 10 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
layer_height = 0.15
line_width = =machine_nozzle_size * 0.95
multiple_mesh_overlap = 0
retraction_count_max = 12
retraction_extrusion_window = 1
retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.5
retraction_prime_speed = 15
skin_overlap = 10
speed_layer_0 = 25
speed_prime_tower = =speed_topbottom
speed_print = 25
speed_support_interface = =speed_topbottom
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 250
speed_travel_layer_0 = 50
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
support_angle = 60
support_bottom_distance = =support_z_distance / 2
support_top_distance = =support_z_distance
support_xy_distance = =wall_line_width_0 * 2.5
support_xy_distance_overhang = =wall_line_width_0
support_z_distance = =layer_height * 2
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =round(line_width * 0.38 / 0.38, 2)
wall_thickness = 0.76

View File

@ -0,0 +1,75 @@
[general]
version = 2
name = Fine
definition = ultimaker2_plus
[metadata]
type = quality
material = generic_polypropylene_ultimaker2_plus_0.4_mm
weight = 0
quality_type = normal
setting_version = 1
[values]
acceleration_enabled = True
acceleration_layer_0 = =acceleration_topbottom
acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_print = 4000
acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_support_interface = =acceleration_topbottom
acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
brim_width = 20
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 20
gradual_infill_step_height = =layer_height * 2
gradual_infill_steps = 3
infill_line_width = =round(line_width * 0.4 / 0.38, 2)
infill_overlap = 0
infill_pattern = cubic
infill_sparse_density = 96
infill_wipe_dist = 0
jerk_enabled = True
jerk_layer_0 = =jerk_topbottom
jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
jerk_print = 25
jerk_support = =math.ceil(jerk_print * 15 / 25)
jerk_support_interface = =jerk_topbottom
jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
jerk_wall = =math.ceil(jerk_print * 10 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
line_width = =machine_nozzle_size * 0.95
multiple_mesh_overlap = 0
retraction_count_max = 12
retraction_extrusion_window = 1
retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.5
retraction_prime_speed = 15
skin_overlap = 10
speed_layer_0 = 25
speed_prime_tower = =speed_topbottom
speed_print = 25
speed_support_interface = =speed_topbottom
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 250
speed_travel_layer_0 = 50
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
support_angle = 60
support_bottom_distance = =support_z_distance / 2
support_top_distance = =support_z_distance
support_xy_distance = =wall_line_width_0 * 2.5
support_xy_distance_overhang = =wall_line_width_0
support_z_distance = =layer_height * 2
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =round(line_width * 0.38 / 0.38, 2)
wall_thickness = 0.76

View File

@ -0,0 +1,79 @@
[general]
version = 2
name = Fast
definition = ultimaker2_plus
[metadata]
type = quality
material = generic_polypropylene_ultimaker2_plus_0.6_mm
weight = -2
quality_type = draft
setting_version = 1
[values]
acceleration_enabled = True
acceleration_layer_0 = =acceleration_topbottom
acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_print = 4000
acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_support_interface = =acceleration_topbottom
acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
brim_width = 20
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 20
gradual_infill_step_height = =layer_height * 2
gradual_infill_steps = 3
infill_line_width = =round(line_width * 0.6 / 0.57, 2)
infill_overlap = 0
infill_overlap_mm = 0
infill_pattern = cubic
infill_sparse_density = 96
infill_wipe_dist = 0
jerk_enabled = True
jerk_layer_0 = =jerk_topbottom
jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
jerk_print = 25
jerk_support = =math.ceil(jerk_print * 15 / 25)
jerk_support_interface = =jerk_topbottom
jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
jerk_wall = =math.ceil(jerk_print * 10 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
layer_height = 0.2
line_width = =machine_nozzle_size * 0.95
multiple_mesh_overlap = 0
retraction_count_max = 12
retraction_extrusion_window = 1
retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.5
retraction_prime_speed = 15
skin_overlap = 10
skirt_brim_line_width = 0.6
speed_layer_0 = 25
speed_prime_tower = =speed_topbottom
speed_print = 25
speed_support_interface = =speed_topbottom
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 250
speed_travel_layer_0 = 50
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
support_angle = 60
support_bottom_distance = =support_z_distance / 2
support_top_distance = =support_z_distance
support_xy_distance = =wall_line_width_0 * 2.5
support_xy_distance_overhang = =wall_line_width_0
support_z_distance = =layer_height * 2
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
top_bottom_thickness = 1.1
travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =round(line_width * 0.57 / 0.57, 2)
wall_thickness = 1.14

View File

@ -0,0 +1,79 @@
[general]
version = 2
name = Normal
definition = ultimaker2_plus
[metadata]
type = quality
material = generic_polypropylene_ultimaker2_plus_0.6_mm
weight = -1
quality_type = fast
setting_version = 1
[values]
acceleration_enabled = True
acceleration_layer_0 = =acceleration_topbottom
acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_print = 4000
acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_support_interface = =acceleration_topbottom
acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
brim_width = 20
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 20
gradual_infill_step_height = =layer_height * 2
gradual_infill_steps = 3
infill_line_width = =round(line_width * 0.6 / 0.57, 2)
infill_overlap = 0
infill_overlap_mm = 0
infill_pattern = cubic
infill_sparse_density = 96
infill_wipe_dist = 0
jerk_enabled = True
jerk_layer_0 = =jerk_topbottom
jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
jerk_print = 25
jerk_support = =math.ceil(jerk_print * 15 / 25)
jerk_support_interface = =jerk_topbottom
jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
jerk_wall = =math.ceil(jerk_print * 10 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
layer_height = 0.15
line_width = =machine_nozzle_size * 0.95
multiple_mesh_overlap = 0
retraction_count_max = 12
retraction_extrusion_window = 1
retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.5
retraction_prime_speed = 15
skin_overlap = 10
skirt_brim_line_width = 0.6
speed_layer_0 = 25
speed_prime_tower = =speed_topbottom
speed_print = 25
speed_support_interface = =speed_topbottom
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 250
speed_travel_layer_0 = 50
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
support_angle = 60
support_bottom_distance = =support_z_distance / 2
support_top_distance = =support_z_distance
support_xy_distance = =wall_line_width_0 * 2.5
support_xy_distance_overhang = =wall_line_width_0
support_z_distance = =layer_height * 2
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
top_bottom_thickness = 1.1
travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =round(line_width * 0.57 / 0.57, 2)
wall_thickness = 1.14

View File

@ -0,0 +1,79 @@
[general]
version = 2
name = Fast
definition = ultimaker2_plus
[metadata]
type = quality
material = generic_polypropylene_ultimaker2_plus_0.8_mm
weight = -2
quality_type = fast
setting_version = 1
[values]
acceleration_enabled = True
acceleration_layer_0 = =acceleration_topbottom
acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_print = 4000
acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_support_interface = =acceleration_topbottom
acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
brim_width = 20
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 20
gradual_infill_step_height = =layer_height * 3
gradual_infill_steps = 3
infill_line_width = =round(line_width * 0.8 / 0.76, 2)
infill_overlap = 0
infill_overlap_mm = 0
infill_pattern = cubic
infill_sparse_density = 96
infill_wipe_dist = 0
jerk_enabled = True
jerk_layer_0 = =jerk_topbottom
jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
jerk_print = 25
jerk_support = =math.ceil(jerk_print * 15 / 25)
jerk_support_interface = =jerk_topbottom
jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
jerk_wall = =math.ceil(jerk_print * 10 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
layer_height = 0.2
line_width = =machine_nozzle_size * 0.95
multiple_mesh_overlap = 0
retraction_count_max = 12
retraction_extrusion_window = 1
retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.5
retraction_prime_speed = 15
skin_overlap = 10
skirt_brim_line_width = 0.8
speed_layer_0 = 25
speed_prime_tower = =speed_topbottom
speed_print = 25
speed_support_interface = =speed_topbottom
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 250
speed_travel_layer_0 = 50
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
support_angle = 60
support_bottom_distance = =support_z_distance / 2
support_top_distance = =support_z_distance
support_xy_distance = =wall_line_width_0 * 2.5
support_xy_distance_overhang = =wall_line_width_0
support_z_distance = =layer_height * 2
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
top_bottom_thickness = 1.5
travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =round(line_width * 0.76 / 0.76, 2)
wall_thickness = 1.52

View File

@ -0,0 +1,79 @@
[general]
version = 2
name = Extra Fast
definition = ultimaker2_plus
[metadata]
type = quality
material = generic_polypropylene_ultimaker2_plus_0.8_mm
weight = -3
quality_type = draft
setting_version = 1
[values]
acceleration_enabled = True
acceleration_layer_0 = =acceleration_topbottom
acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_print = 4000
acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
acceleration_support_interface = =acceleration_topbottom
acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
brim_width = 20
cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 20
gradual_infill_step_height = =layer_height * 2
gradual_infill_steps = 3
infill_line_width = =round(line_width * 0.8 / 0.76, 2)
infill_overlap = 0
infill_overlap_mm = 0
infill_pattern = cubic
infill_sparse_density = 96
infill_wipe_dist = 0
jerk_enabled = True
jerk_layer_0 = =jerk_topbottom
jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
jerk_print = 25
jerk_support = =math.ceil(jerk_print * 15 / 25)
jerk_support_interface = =jerk_topbottom
jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
jerk_wall = =math.ceil(jerk_print * 10 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
layer_height = 0.3
line_width = =machine_nozzle_size * 0.95
multiple_mesh_overlap = 0
retraction_count_max = 12
retraction_extrusion_window = 1
retraction_hop = 0.15
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.5
retraction_prime_speed = 15
skin_overlap = 10
skirt_brim_line_width = 0.8
speed_layer_0 = 25
speed_prime_tower = =speed_topbottom
speed_print = 25
speed_support_interface = =speed_topbottom
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 250
speed_travel_layer_0 = 50
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
support_angle = 60
support_bottom_distance = =support_z_distance / 2
support_top_distance = =support_z_distance
support_xy_distance = =wall_line_width_0 * 2.5
support_xy_distance_overhang = =wall_line_width_0
support_z_distance = =layer_height * 2
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
top_bottom_thickness = 1.5
travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =round(line_width * 0.76 / 0.76, 2)
wall_thickness = 1.52

View File

@ -0,0 +1,65 @@
[general]
version = 2
name = Fast
definition = ultimaker3
[metadata]
type = quality
quality_type = draft
material = generic_polypropylene_ultimaker3_AA_0.4
weight = -2
setting_version = 1
[values]
acceleration_enabled = True
acceleration_print = 4000
brim_width = 20
cool_fan_speed_max = 100
cool_min_layer_time = 7
cool_min_layer_time_fan_speed_max = 7
cool_min_speed = 2.5
infill_line_width = =round(line_width * 0.38 / 0.38, 2)
infill_overlap = 0
infill_pattern = tetrahedral
infill_wipe_dist = 0.1
jerk_enabled = True
jerk_print = 25
layer_height = 0.2
line_width = =machine_nozzle_size * 0.95
machine_min_cool_heat_time_window = 15
machine_nozzle_cool_down_speed = 0.85
machine_nozzle_heat_up_speed = 1.5
material_bed_temperature_layer_0 = 90
material_final_print_temperature = 205
material_initial_print_temperature = 210
material_print_temperature = 215
material_print_temperature_layer_0 = 220
multiple_mesh_overlap = 0
prime_tower_enable = False
prime_tower_size = 16
prime_tower_wipe_enabled = True
retraction_amount = 6.5
retraction_count_max = 12
retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
retraction_prime_speed = 18
speed_equalize_flow_enabled = True
speed_layer_0 = 15
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 300
speed_travel_layer_0 = 50
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =line_width
wall_thickness = =line_width * 3

View File

@ -0,0 +1,65 @@
[general]
version = 2
name = Normal
definition = ultimaker3
[metadata]
type = quality
quality_type = fast
material = generic_polypropylene_ultimaker3_AA_0.4
weight = -1
setting_version = 1
[values]
acceleration_enabled = True
acceleration_print = 4000
brim_width = 20
cool_fan_speed_max = 100
cool_min_layer_time = 7
cool_min_layer_time_fan_speed_max = 7
cool_min_speed = 2.5
infill_line_width = =round(line_width * 0.38 / 0.38, 2)
infill_overlap = 0
infill_pattern = tetrahedral
infill_wipe_dist = 0.1
jerk_enabled = True
jerk_print = 25
layer_height = 0.15
line_width = =machine_nozzle_size * 0.95
machine_min_cool_heat_time_window = 15
machine_nozzle_cool_down_speed = 0.85
machine_nozzle_heat_up_speed = 1.5
material_bed_temperature_layer_0 = 90
material_final_print_temperature = 195
material_initial_print_temperature = 205
material_print_temperature = 207
material_print_temperature_layer_0 = 210
multiple_mesh_overlap = 0
prime_tower_enable = False
prime_tower_size = 16
prime_tower_wipe_enabled = True
retraction_count_max = 12
retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
retraction_prime_speed = 18
speed_equalize_flow_enabled = True
speed_layer_0 = 15
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 300
speed_travel_layer_0 = 50
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
top_bottom_thickness = 1.1
travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =line_width
wall_thickness = =line_width * 3

View File

@ -0,0 +1,64 @@
[general]
version = 2
name = Fine
definition = ultimaker3
[metadata]
type = quality
quality_type = normal
material = generic_polypropylene_ultimaker3_AA_0.4
weight = 0
setting_version = 1
[values]
acceleration_enabled = True
acceleration_print = 4000
brim_width = 20
cool_fan_speed_max = 100
cool_min_layer_time = 7
cool_min_layer_time_fan_speed_max = 7
cool_min_speed = 2.5
infill_line_width = =round(line_width * 0.38 / 0.38, 2)
infill_overlap = 0
infill_pattern = tetrahedral
infill_wipe_dist = 0.1
jerk_enabled = True
jerk_print = 25
line_width = =machine_nozzle_size * 0.95
machine_min_cool_heat_time_window = 15
machine_nozzle_cool_down_speed = 0.85
machine_nozzle_heat_up_speed = 1.5
material_bed_temperature_layer_0 = 90
material_final_print_temperature = 195
material_initial_print_temperature = 200
material_print_temperature = 205
material_print_temperature_layer_0 = 208
multiple_mesh_overlap = 0
prime_tower_enable = False
prime_tower_size = 16
prime_tower_wipe_enabled = True
retraction_count_max = 12
retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
retraction_prime_speed = 18
speed_equalize_flow_enabled = True
speed_layer_0 = 15
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 300
speed_travel_layer_0 = 50
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
top_bottom_thickness = 1
travel_avoid_distance = 3
wall_0_inset = 0
wall_line_width_x = =line_width
wall_thickness = =line_width * 3

View File

@ -29,25 +29,24 @@ jerk_print = 25
layer_height = 0.2
line_width = =machine_nozzle_size * 0.95
machine_min_cool_heat_time_window = 15
machine_nozzle_cool_down_speed = 0.85
machine_nozzle_heat_up_speed = 1.5
material_final_print_temperature = =material_print_temperature - 10
machine_nozzle_cool_down_speed = 0.5
machine_nozzle_heat_up_speed = 2.5
material_final_print_temperature = =material_print_temperature - 21
material_flow = 106
material_initial_print_temperature = =material_print_temperature - 5
material_initial_print_temperature = =material_print_temperature - 16
material_print_temperature = =default_material_print_temperature + 2
material_print_temperature_layer_0 = =default_material_print_temperature + 2
material_standby_temperature = 100
multiple_mesh_overlap = 0
prime_tower_enable = True
prime_tower_wipe_enabled = True
retraction_count_max = 12
retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_enabled = False
retraction_hop = 1.5
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
retraction_prime_speed = 15
skin_overlap = 5
speed_equalize_flow_enabled = True
speed_layer_0 = 18
speed_print = 25
@ -56,12 +55,11 @@ speed_travel = 300
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
skin_overlap = 5
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
top_bottom_thickness = 0.7
travel_avoid_distance = 0.5
travel_avoid_distance = 1.5
wall_0_inset = 0
wall_line_width_x = =line_width
wall_thickness = 0.76
wall_thickness = 0.76

View File

@ -29,23 +29,21 @@ jerk_print = 25
layer_height = 0.15
line_width = =machine_nozzle_size * 0.95
machine_min_cool_heat_time_window = 15
machine_nozzle_cool_down_speed = 0.85
machine_nozzle_heat_up_speed = 1.5
material_final_print_temperature = =material_print_temperature - 10
machine_nozzle_cool_down_speed = 0.5
machine_nozzle_heat_up_speed = 2.5
material_final_print_temperature = =material_print_temperature - 21
material_flow = 106
material_initial_print_temperature = =material_print_temperature - 5
material_initial_print_temperature = =material_print_temperature - 16
material_print_temperature = =default_material_print_temperature + 2
material_print_temperature_layer_0 = =default_material_print_temperature + 2
material_standby_temperature = 100
multiple_mesh_overlap = 0
prime_tower_enable = True
prime_tower_wipe_enabled = True
retraction_amount = 7
retraction_count_max = 12
retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_enabled = False
retraction_hop = 1.5
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
retraction_prime_speed = 15
@ -62,7 +60,7 @@ switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
top_bottom_thickness = 0.7
travel_avoid_distance = 0.5
travel_avoid_distance = 1.5
wall_0_inset = 0
wall_line_width_x = =line_width
wall_thickness = 0.76
wall_thickness = 0.76

View File

@ -28,21 +28,19 @@ jerk_enabled = True
jerk_print = 25
line_width = =machine_nozzle_size * 0.95
machine_min_cool_heat_time_window = 15
machine_nozzle_cool_down_speed = 0.85
machine_nozzle_heat_up_speed = 1.5
material_final_print_temperature = =material_print_temperature - 10
machine_nozzle_cool_down_speed = 0.5
machine_nozzle_heat_up_speed = 2.5
material_final_print_temperature = =material_print_temperature - 21
material_flow = 106
material_initial_print_temperature = =material_print_temperature - 10
material_initial_print_temperature = =material_print_temperature - 16
material_print_temperature_layer_0 = =default_material_print_temperature
material_standby_temperature = 100
multiple_mesh_overlap = 0
prime_tower_enable = True
prime_tower_wipe_enabled = True
retraction_count_max = 12
retraction_extra_prime_amount = 0.8
retraction_extrusion_window = 1
retraction_hop = 2
retraction_hop_enabled = False
retraction_hop = 1.5
retraction_hop_enabled = True
retraction_hop_only_when_collides = True
retraction_min_travel = 0.8
retraction_prime_speed = 15
@ -59,7 +57,7 @@ switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 35
top_bottom_thickness = 0.7
travel_avoid_distance = 0.5
travel_avoid_distance = 1.5
wall_0_inset = 0
wall_line_width_x = =line_width
wall_thickness = 0.76
wall_thickness = 0.76

View File

@ -0,0 +1,36 @@
[general]
version = 2
name = Fast - Experimental
definition = ultimaker3
[metadata]
type = quality
quality_type = draft
material = generic_cpe_plus_ultimaker3_AA_0.8
weight = -2
setting_version = 1
[values]
brim_width = 14
cool_fan_full_at_height = =layer_height_0 + 14 * layer_height
infill_before_walls = True
line_width = =machine_nozzle_size * 0.9375
machine_nozzle_cool_down_speed = 0.9
machine_nozzle_heat_up_speed = 1.4
material_print_temperature = =default_material_print_temperature - 10
material_print_temperature_layer_0 = =material_print_temperature
retraction_combing = off
retraction_hop = 0.1
retraction_hop_enabled = False
skin_overlap = 0
speed_layer_0 = 15
speed_print = 50
speed_slowdown_layers = 15
speed_topbottom = =math.ceil(speed_print * 35 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 35 / 40)
support_bottom_distance = =support_z_distance
support_line_width = =round(line_width * 0.6 / 0.7, 2)
support_z_distance = =layer_height
top_bottom_thickness = 1.2
travel_avoid_distance = 1.5

View File

@ -1,14 +0,0 @@
[general]
version = 2
name = Not Supported
definition = ultimaker3
[metadata]
type = quality
quality_type = normal
material = generic_cpe_plus_ultimaker3_AA_0.8
weight = 0
supported = False
setting_version = 1
[values]

View File

@ -1,14 +0,0 @@
[general]
version = 2
name = Not Supported
definition = ultimaker3
[metadata]
type = quality
quality_type = superdraft
material = generic_cpe_plus_ultimaker3_AA_0.8
weight = 0
supported = False
setting_version = 1
[values]

View File

@ -0,0 +1,38 @@
[general]
version = 2
name = Sprint - Experimental
definition = ultimaker3
[metadata]
type = quality
quality_type = superdraft
material = generic_cpe_plus_ultimaker3_AA_0.8
weight = -2
setting_version = 1
[values]
brim_width = 14
cool_fan_full_at_height = =layer_height_0 + 7 * layer_height
infill_before_walls = True
layer_height = 0.4
line_width = =machine_nozzle_size * 0.9375
machine_nozzle_cool_down_speed = 0.9
machine_nozzle_heat_up_speed = 1.4
material_print_temperature = =default_material_print_temperature - 5
material_print_temperature_layer_0 = =material_print_temperature
prime_tower_enable = True
retraction_combing = off
retraction_hop = 0.1
retraction_hop_enabled = False
skin_overlap = 0
speed_layer_0 = 15
speed_print = 50
speed_slowdown_layers = 8
speed_topbottom = =math.ceil(speed_print * 35 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 35 / 40)
support_bottom_distance = =support_z_distance
support_line_width = =round(line_width * 0.6 / 0.7, 2)
support_z_distance = =layer_height
top_bottom_thickness = 1.2
travel_avoid_distance = 1.5

View File

@ -0,0 +1,38 @@
[general]
version = 2
name = Extra Fast - Experimental
definition = ultimaker3
[metadata]
type = quality
quality_type = verydraft
material = generic_cpe_plus_ultimaker3_AA_0.8
weight = -1
setting_version = 1
[values]
brim_width = 14
cool_fan_full_at_height = =layer_height_0 + 9 * layer_height
infill_before_walls = True
layer_height = 0.3
line_width = =machine_nozzle_size * 0.9375
machine_nozzle_cool_down_speed = 0.9
machine_nozzle_heat_up_speed = 1.4
material_print_temperature = =default_material_print_temperature - 7
material_print_temperature_layer_0 = =material_print_temperature
prime_tower_enable = True
retraction_combing = off
retraction_hop = 0.1
retraction_hop_enabled = False
skin_overlap = 0
speed_layer_0 = 15
speed_print = 50
speed_slowdown_layers = 10
speed_topbottom = =math.ceil(speed_print * 35 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 35 / 40)
support_bottom_distance = =support_z_distance
support_line_width = =round(line_width * 0.6 / 0.7, 2)
support_z_distance = =layer_height
top_bottom_thickness = 1.2
travel_avoid_distance = 1.5

View File

@ -0,0 +1,30 @@
[general]
version = 2
name = Fast - Experimental
definition = ultimaker3
[metadata]
type = quality
quality_type = draft
material = generic_pc_ultimaker3_AA_0.8
weight = 0
setting_version = 1
[values]
brim_width = 14
cool_fan_full_at_height = =layer_height_0 + 14 * layer_height
infill_before_walls = True
line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature - 5
material_print_temperature_layer_0 = =material_print_temperature
raft_airgap = 0.5
raft_margin = 15
skin_overlap = 0
speed_layer_0 = 15
speed_print = 50
speed_slowdown_layers = 15
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
support_line_width = =round(line_width * 0.6 / 0.7, 2)
travel_avoid_distance = 3

View File

@ -1,14 +0,0 @@
[general]
version = 2
name = Not Supported
definition = ultimaker3
[metadata]
weight = 0
type = quality
quality_type = normal
material = generic_pc_ultimaker3_AA_0.8
supported = False
setting_version = 1
[values]

View File

@ -1,14 +0,0 @@
[general]
version = 2
name = Not Supported
definition = ultimaker3
[metadata]
weight = 0
type = quality
quality_type = superdraft
material = generic_pc_ultimaker3_AA_0.8
supported = False
setting_version = 1
[values]

View File

@ -0,0 +1,30 @@
[general]
version = 2
name = Sprint - Experimental
definition = ultimaker3
[metadata]
type = quality
quality_type = superdraft
material = generic_pc_ultimaker3_AA_0.8
weight = -2
setting_version = 1
[values]
brim_width = 14
cool_fan_full_at_height = =layer_height_0 + 7 * layer_height
infill_before_walls = True
layer_height = 0.4
line_width = =machine_nozzle_size * 0.875
material_print_temperature_layer_0 = =material_print_temperature
raft_airgap = 0.5
raft_margin = 15
skin_overlap = 0
speed_layer_0 = 15
speed_print = 50
speed_slowdown_layers = 8
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
support_line_width = =round(line_width * 0.6 / 0.7, 2)
travel_avoid_distance = 3

View File

@ -0,0 +1,31 @@
[general]
version = 2
name = Extra Fast - Experimental
definition = ultimaker3
[metadata]
type = quality
quality_type = verydraft
material = generic_pc_ultimaker3_AA_0.8
weight = -1
setting_version = 1
[values]
brim_width = 14
cool_fan_full_at_height = =layer_height_0 + 9 * layer_height
infill_before_walls = True
layer_height = 0.3
line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature - 2
material_print_temperature_layer_0 = =material_print_temperature
raft_airgap = 0.5
raft_margin = 15
skin_overlap = 0
speed_layer_0 = 15
speed_print = 50
speed_slowdown_layers = 10
speed_topbottom = =math.ceil(speed_print * 25 / 50)
speed_wall = =math.ceil(speed_print * 40 / 50)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
support_line_width = =round(line_width * 0.6 / 0.7, 2)
travel_avoid_distance = 3

View File

@ -0,0 +1,52 @@
[general]
version = 2
name = Fast
definition = ultimaker3
[metadata]
type = quality
quality_type = draft
material = generic_polypropylene_ultimaker3_AA_0.8
weight = -2
setting_version = 1
[values]
brim_width = 25
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 17
expand_skins_expand_distance = =line_width * 2
expand_skins_into_infill = True
expand_upper_skins = True
infill_before_walls = True
infill_line_width = =round(line_width * 0.7 / 0.8, 2)
infill_pattern = tetrahedral
jerk_prime_tower = =math.ceil(jerk_print * 25 / 25)
jerk_support = =math.ceil(jerk_print * 25 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25)
material_bed_temperature_layer_0 = =material_bed_temperature
material_print_temperature = =default_material_print_temperature - 2
material_print_temperature_layer_0 = =default_material_print_temperature + 2
multiple_mesh_overlap = 0.2
prime_tower_enable = True
prime_tower_flow = 100
prime_tower_wall_thickness = =prime_tower_line_width * 2
retract_at_layer_change = False
retraction_count_max = 12
retraction_extra_prime_amount = 0.5
retraction_hop = 0.5
retraction_min_travel = 1.5
retraction_prime_speed = 15
skin_line_width = =round(line_width * 0.78 / 0.8, 2)
speed_travel = 300
speed_wall_x = =math.ceil(speed_wall * 30 / 30)
support_bottom_distance = =support_z_distance
support_line_width = =round(line_width * 0.7 / 0.8, 2)
support_offset = =line_width
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 45
top_bottom_thickness = 1.6
travel_compensate_overlapping_walls_0_enabled = False
wall_0_wipe_dist = =line_width * 2
wall_line_width_x = =round(line_width * 0.8 / 0.8, 2)
wall_thickness = 1.6

View File

@ -0,0 +1,52 @@
[general]
version = 2
name = Sprint
definition = ultimaker3
[metadata]
type = quality
quality_type = superdraft
material = generic_polypropylene_ultimaker3_AA_0.8
weight = -4
setting_version = 1
[values]
brim_width = 25
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 17
expand_skins_expand_distance = =line_width * 2
expand_skins_into_infill = True
expand_upper_skins = True
infill_before_walls = True
infill_line_width = =round(line_width * 0.7 / 0.8, 2)
infill_pattern = tetrahedral
jerk_prime_tower = =math.ceil(jerk_print * 25 / 25)
jerk_support = =math.ceil(jerk_print * 25 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25)
material_bed_temperature_layer_0 = =material_bed_temperature
material_print_temperature = =default_material_print_temperature + 2
material_print_temperature_layer_0 = =default_material_print_temperature + 2
multiple_mesh_overlap = 0.2
prime_tower_enable = True
prime_tower_flow = 100
prime_tower_wall_thickness = =prime_tower_line_width * 2
retract_at_layer_change = False
retraction_count_max = 12
retraction_extra_prime_amount = 0.5
retraction_hop = 0.5
retraction_min_travel = 1.5
retraction_prime_speed = 15
skin_line_width = =round(line_width * 0.78 / 0.8, 2)
speed_travel = 300
speed_wall_x = =math.ceil(speed_wall * 30 / 30)
support_bottom_distance = =support_z_distance
support_line_width = =round(line_width * 0.7 / 0.8, 2)
support_offset = =line_width
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 45
top_bottom_thickness = 1.6
travel_compensate_overlapping_walls_0_enabled = False
wall_0_wipe_dist = =line_width * 2
wall_line_width_x = =round(line_width * 0.8 / 0.8, 2)
wall_thickness = 1.6

View File

@ -0,0 +1,52 @@
[general]
version = 2
name = Extra Fast
definition = ultimaker3
[metadata]
type = quality
quality_type = verydraft
material = generic_polypropylene_ultimaker3_AA_0.8
weight = -3
setting_version = 1
[values]
brim_width = 25
cool_min_layer_time_fan_speed_max = 6
cool_min_speed = 17
expand_skins_expand_distance = =line_width * 2
expand_skins_into_infill = True
expand_upper_skins = True
infill_before_walls = True
infill_line_width = =round(line_width * 0.7 / 0.8, 2)
infill_pattern = tetrahedral
jerk_prime_tower = =math.ceil(jerk_print * 25 / 25)
jerk_support = =math.ceil(jerk_print * 25 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25)
layer_height = 0.3
material_bed_temperature_layer_0 = =material_bed_temperature
material_print_temperature_layer_0 = =default_material_print_temperature + 2
multiple_mesh_overlap = 0.2
prime_tower_enable = True
prime_tower_flow = 100
prime_tower_wall_thickness = =prime_tower_line_width * 2
retract_at_layer_change = False
retraction_count_max = 12
retraction_extra_prime_amount = 0.5
retraction_hop = 0.5
retraction_min_travel = 1.5
retraction_prime_speed = 15
skin_line_width = =round(line_width * 0.78 / 0.8, 2)
speed_travel = 300
speed_wall_x = =math.ceil(speed_wall * 30 / 30)
support_bottom_distance = =support_z_distance
support_line_width = =round(line_width * 0.7 / 0.8, 2)
support_offset = =line_width
switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 45
top_bottom_thickness = 1.6
travel_compensate_overlapping_walls_0_enabled = False
wall_0_wipe_dist = =line_width * 2
wall_line_width_x = =round(line_width * 0.8 / 0.8, 2)
wall_thickness = 1.6

View File

@ -25,11 +25,14 @@ infill_sparse_density = 80
jerk_prime_tower = =math.ceil(jerk_print * 25 / 25)
jerk_support = =math.ceil(jerk_print * 25 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25)
machine_nozzle_cool_down_speed = 0.5
machine_nozzle_heat_up_speed = 2.5
material_bed_temperature_layer_0 = 0
material_final_print_temperature = =material_print_temperature - 21
material_flow = 105
material_initial_print_temperature = =material_print_temperature - 16
material_print_temperature = =default_material_print_temperature - 2
material_print_temperature_layer_0 = =default_material_print_temperature + 2
material_standby_temperature = 100
multiple_mesh_overlap = 0.2
prime_tower_enable = True
prime_tower_flow = 100
@ -37,8 +40,7 @@ prime_tower_wall_thickness = =prime_tower_line_width * 2
retract_at_layer_change = False
retraction_count_max = 12
retraction_extra_prime_amount = 0.5
retraction_hop = 0.5
retraction_hop_enabled = False
retraction_hop = 1.5
retraction_hop_only_when_collides = False
retraction_min_travel = 0.8
retraction_prime_speed = 15
@ -56,9 +58,8 @@ switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 45
top_bottom_thickness = 1.2
travel_avoid_distance = 0.5
travel_avoid_distance = 1.5
travel_compensate_overlapping_walls_0_enabled = False
wall_0_wipe_dist = =line_width * 2
wall_line_width_x = =round(line_width * 0.6 / 0.8, 2)
wall_thickness = 1.3
wall_thickness = 1.3

View File

@ -26,11 +26,14 @@ jerk_prime_tower = =math.ceil(jerk_print * 25 / 25)
jerk_support = =math.ceil(jerk_print * 25 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25)
layer_height = 0.4
machine_nozzle_cool_down_speed = 0.5
machine_nozzle_heat_up_speed = 2.5
material_bed_temperature_layer_0 = 0
material_final_print_temperature = =material_print_temperature - 21
material_flow = 105
material_initial_print_temperature = =material_print_temperature - 16
material_print_temperature = =default_material_print_temperature + 2
material_print_temperature_layer_0 = =default_material_print_temperature + 2
material_standby_temperature = 100
multiple_mesh_overlap = 0.2
prime_tower_enable = True
prime_tower_flow = 100
@ -38,8 +41,7 @@ prime_tower_wall_thickness = =prime_tower_line_width * 2
retract_at_layer_change = False
retraction_count_max = 12
retraction_extra_prime_amount = 0.5
retraction_hop = 0.5
retraction_hop_enabled = False
retraction_hop = 1.5
retraction_hop_only_when_collides = False
retraction_min_travel = 0.8
retraction_prime_speed = 15
@ -57,9 +59,8 @@ switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 45
top_bottom_thickness = 1.2
travel_avoid_distance = 0.5
travel_avoid_distance = 1.5
travel_compensate_overlapping_walls_0_enabled = False
wall_0_wipe_dist = =line_width * 2
wall_line_width_x = =round(line_width * 0.6 / 0.8, 2)
wall_thickness = 1.3
wall_thickness = 1.3

View File

@ -26,10 +26,13 @@ jerk_prime_tower = =math.ceil(jerk_print * 25 / 25)
jerk_support = =math.ceil(jerk_print * 25 / 25)
jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25)
layer_height = 0.3
machine_nozzle_cool_down_speed = 0.5
machine_nozzle_heat_up_speed = 2.5
material_bed_temperature_layer_0 = 0
material_final_print_temperature = =material_print_temperature - 21
material_flow = 105
material_initial_print_temperature = =material_print_temperature - 16
material_print_temperature_layer_0 = =default_material_print_temperature + 2
material_standby_temperature = 100
multiple_mesh_overlap = 0.2
prime_tower_enable = True
prime_tower_flow = 100
@ -37,8 +40,7 @@ prime_tower_wall_thickness = =prime_tower_line_width * 2
retract_at_layer_change = False
retraction_count_max = 12
retraction_extra_prime_amount = 0.5
retraction_hop = 0.5
retraction_hop_enabled = False
retraction_hop = 1.5
retraction_hop_only_when_collides = False
retraction_min_travel = 0.8
retraction_prime_speed = 15
@ -56,9 +58,8 @@ switch_extruder_prime_speed = 15
switch_extruder_retraction_amount = 20
switch_extruder_retraction_speeds = 45
top_bottom_thickness = 1.2
travel_avoid_distance = 0.5
travel_avoid_distance = 1.5
travel_compensate_overlapping_walls_0_enabled = False
wall_0_wipe_dist = =line_width * 2
wall_line_width_x = =round(line_width * 0.6 / 0.8, 2)
wall_thickness = 1.3
wall_thickness = 1.3

View File

@ -0,0 +1,186 @@
{
"metadata": {
"name": "Dark",
"inherits": "cura"
},
"colors": {
"sidebar": [83, 83, 83, 255],
"lining": [127, 127, 127, 255],
"viewport_overlay": [66, 66, 66, 255],
"primary": [12, 169, 227, 255],
"primary_hover": [48, 182, 231, 255],
"primary_text": [83, 83, 83, 255],
"border": [127, 127, 127, 255],
"secondary": [66, 66, 66, 255],
"text": [255, 255, 255, 255],
"text_detail": [174, 174, 174, 128],
"text_link": [12, 169, 227, 255],
"text_inactive": [174, 174, 174, 255],
"text_hover": [70, 84, 113, 255],
"text_pressed": [12, 169, 227, 255],
"text_reversed": [255, 255, 255, 255],
"text_subtext": [255, 255, 255, 255],
"error": [255, 140, 0, 255],
"sidebar_header_bar": [66, 66, 66, 255],
"sidebar_header_active": [83, 83, 83, 255],
"sidebar_header_hover": [83, 83, 83, 255],
"sidebar_header_highlight": [83, 83, 83, 255],
"sidebar_header_highlight_hover": [66, 66, 66, 255],
"sidebar_lining": [66, 66, 66, 255],
"button": [83, 83, 83, 255],
"button_hover": [83, 83, 83, 255],
"button_active": [32, 166, 219, 255],
"button_active_hover": [12, 169, 227, 255],
"button_text": [255, 255, 255, 255],
"button_disabled": [255, 255, 255, 255],
"button_disabled_text": [70, 84, 113, 255],
"button_tooltip": [83, 83, 83, 255],
"button_tooltip_border": [255, 255, 255, 255],
"button_tooltip_text": [255, 255, 255, 255],
"toggle_checked": [255, 255, 255, 255],
"toggle_checked_border": [255, 255, 255, 255],
"toggle_checked_text": [83, 83, 83, 255],
"toggle_unchecked": [83, 83, 83, 255],
"toggle_unchecked_border": [127, 127, 127, 255],
"toggle_unchecked_text": [255, 255, 255, 255],
"toggle_hovered": [83, 83, 83, 255],
"toggle_hovered_border": [32, 166, 219, 255],
"toggle_hovered_text": [255, 255, 255, 255],
"toggle_active": [32, 166, 219, 255],
"toggle_active_border": [32, 166, 219, 255],
"toggle_active_text": [255, 255, 255, 255],
"tab_checked": [83, 83, 83, 255],
"tab_checked_border": [83, 83, 83, 255],
"tab_checked_text": [255, 255, 255, 255],
"tab_unchecked": [66, 66, 66, 255],
"tab_unchecked_border": [66, 66, 66, 255],
"tab_unchecked_text": [127, 127, 127, 255],
"tab_hovered": [66, 66, 66, 255],
"tab_hovered_border": [66, 66, 66, 255],
"tab_hovered_text": [32, 166, 219, 255],
"tab_active": [83, 83, 83, 255],
"tab_active_border": [83, 83, 83, 255],
"tab_active_text": [255, 255, 255, 255],
"tab_background": [66, 66, 66, 255],
"action_button": [83, 83, 83, 255],
"action_button_text": [255, 255, 255, 255],
"action_button_border": [127, 127, 127, 255],
"action_button_hovered": [83, 83, 83, 255],
"action_button_hovered_text": [255, 255, 255, 255],
"action_button_hovered_border": [12, 169, 227, 255],
"action_button_active": [12, 169, 227, 255],
"action_button_active_text": [83, 83, 83, 255],
"action_button_active_border": [12, 169, 227, 255],
"action_button_disabled": [66, 66, 66, 255],
"action_button_disabled_text": [127, 127, 127, 255],
"action_button_disabled_border": [66, 66, 66, 255],
"scrollbar_background": [83, 83, 83, 255],
"scrollbar_handle": [255, 255, 255, 255],
"scrollbar_handle_hover": [12, 159, 227, 255],
"scrollbar_handle_down": [12, 159, 227, 255],
"setting_category": [66, 66, 66, 255],
"setting_category_disabled": [83, 83, 83, 255],
"setting_category_hover": [66, 66, 66, 255],
"setting_category_active": [66, 66, 66, 255],
"setting_category_active_hover": [66, 66, 66, 255],
"setting_category_text": [255, 255, 255, 255],
"setting_category_border": [66, 66, 66, 255],
"setting_category_disabled_border": [66, 66, 66, 255],
"setting_category_hover_border": [12, 159, 227, 255],
"setting_category_active_border": [66, 66, 66, 255],
"setting_category_active_hover_border": [12, 159, 227, 255],
"setting_control": [83, 83, 83, 255],
"setting_control_selected": [12, 159, 227, 255],
"setting_control_highlight": [83, 83, 83, 0],
"setting_control_border": [127, 127, 127, 255],
"setting_control_border_highlight": [12, 169, 227, 255],
"setting_control_text": [255, 255, 255, 255],
"setting_control_depth_line": [127, 127, 127, 255],
"setting_control_button": [127, 127, 127, 255],
"setting_control_button_hover": [70, 84, 113, 255],
"setting_control_disabled": [66, 66, 66, 255],
"setting_control_disabled_text": [127, 127, 127, 255],
"setting_control_disabled_border": [127, 127, 127, 255],
"setting_unit": [127, 127, 127, 255],
"setting_validation_error": [204, 37, 0, 255],
"setting_validation_warning": [204, 146, 0, 255],
"setting_validation_ok": [83, 83, 83, 255],
"progressbar_background": [66, 66, 66, 255],
"progressbar_control": [255, 255, 255, 255],
"slider_groove": [66, 66, 66, 255],
"slider_groove_border": [127, 127, 127, 255],
"slider_groove_fill": [127, 127, 127, 255],
"slider_handle": [32, 166, 219, 255],
"slider_handle_hover": [77, 182, 226, 255],
"slider_text_background": [83, 83, 83, 255],
"checkbox": [83, 83, 83, 255],
"checkbox_hover": [83, 83, 83, 255],
"checkbox_border": [127, 127, 127, 255],
"checkbox_border_hover": [12, 169, 227, 255],
"checkbox_mark": [255, 255, 255, 255],
"checkbox_text": [255, 255, 255, 255],
"mode_switch": [83, 83, 83, 255],
"mode_switch_hover": [83, 83, 83, 255],
"mode_switch_border": [127, 127, 127, 255],
"mode_switch_border_hover": [12, 169, 227, 255],
"mode_switch_handle": [255, 255, 255, 255],
"mode_switch_text": [255, 255, 255, 255],
"mode_switch_text_hover": [255, 255, 255, 255],
"mode_switch_text_checked": [12, 169, 227, 255],
"tooltip": [12, 169, 227, 255],
"tooltip_text": [255, 255, 255, 255],
"message_background": [255, 255, 255, 255],
"message_text": [83, 83, 83, 255],
"message_border": [255, 255, 255, 255],
"message_button": [83, 83, 83, 255],
"message_button_hover": [12, 169, 227, 255],
"message_button_active": [32, 166, 219, 255],
"message_button_text": [255, 255, 255, 255],
"message_button_text_hover": [83, 83, 83, 255],
"message_button_text_active": [83, 83, 83, 255],
"message_progressbar_background": [83, 83, 83, 255],
"message_progressbar_control": [12, 169, 227, 255],
"tool_panel_background": [83, 83, 83, 255],
"status_offline": [0, 0, 0, 255],
"status_ready": [0, 205, 0, 255],
"status_busy": [12, 169, 227, 255],
"status_paused": [255, 140, 0, 255],
"status_stopped": [236, 82, 80, 255],
"status_unknown": [127, 127, 127, 255],
"disabled_axis": [127, 127, 127, 255],
"x_axis": [255, 0, 0, 255],
"y_axis": [0, 0, 255, 255],
"z_axis": [0, 255, 0, 255],
"all_axis": [83, 83, 83, 255],
"viewport_background": [66, 66, 66, 255],
"volume_outline": [12, 169, 227, 255],
"buildplate": [169, 169, 169, 255],
"buildplate_alt": [204, 204, 204, 255],
"convex_hull": [35, 35, 35, 127],
"disallowed_area": [0, 0, 0, 40],
"error_area": [255, 0, 0, 127]
}
}

View File

@ -368,11 +368,11 @@ QtObject {
color: {
if(!control.enabled) {
return Theme.getColor("setting_category_disabled_border");
} else if(control.hovered && control.checkable && control.checked) {
} else if((control.hovered || control.activeFocus) && control.checkable && control.checked) {
return Theme.getColor("setting_category_active_hover_border");
} else if(control.pressed || (control.checkable && control.checked)) {
return Theme.getColor("setting_category_active_border");
} else if(control.hovered) {
} else if(control.hovered || control.activeFocus) {
return Theme.getColor("setting_category_hover_border");
} else {
return Theme.getColor("setting_category_border");
@ -508,7 +508,7 @@ QtObject {
{
color:
{
if (!enabled)
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled");
}

View File

@ -31,6 +31,7 @@ line_width = =machine_nozzle_size
machine_min_cool_heat_time_window = 15
machine_nozzle_cool_down_speed = 0.85
machine_nozzle_heat_up_speed = 1.5
machine_nozzle_id = AA 0.8
machine_nozzle_size = 0.8
machine_nozzle_tip_outer_diameter = 2.0
material_final_print_temperature = =material_print_temperature - 10

View File

@ -11,6 +11,7 @@ setting_version = 1
[values]
brim_width = 7
machine_nozzle_cool_down_speed = 0.9
machine_nozzle_id = AA 0.4
raft_acceleration = =acceleration_print
raft_airgap = 0.3
raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2

View File

@ -29,6 +29,7 @@ jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10)
layer_height = 0.2
machine_min_cool_heat_time_window = 15
machine_nozzle_heat_up_speed = 1.5
machine_nozzle_id = BB 0.8
machine_nozzle_size = 0.8
machine_nozzle_tip_outer_diameter = 2.0
material_print_temperature = =default_material_print_temperature + 10

View File

@ -17,6 +17,7 @@ jerk_support = =math.ceil(jerk_print * 15 / 25)
jerk_support_interface = =math.ceil(jerk_support * 10 / 15)
jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10)
machine_nozzle_heat_up_speed = 1.5
machine_nozzle_id = BB 0.4
material_print_temperature = 215
raft_base_speed = 20
raft_interface_speed = 20

View File

@ -31,6 +31,7 @@ line_width = =machine_nozzle_size
machine_min_cool_heat_time_window = 15
machine_nozzle_cool_down_speed = 0.85
machine_nozzle_heat_up_speed = 1.5
machine_nozzle_id = AA 0.8
machine_nozzle_size = 0.8
machine_nozzle_tip_outer_diameter = 2.0
material_final_print_temperature = =material_print_temperature - 10

View File

@ -11,6 +11,7 @@ setting_version = 1
[values]
brim_width = 7
machine_nozzle_cool_down_speed = 0.9
machine_nozzle_id = AA 0.4
machine_nozzle_size = 0.4
raft_airgap = 0.3
raft_base_speed = 15

View File

@ -29,6 +29,7 @@ jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10)
layer_height = 0.2
machine_min_cool_heat_time_window = 15
machine_nozzle_heat_up_speed = 1.5
machine_nozzle_id = BB 0.8
machine_nozzle_size = 0.8
machine_nozzle_tip_outer_diameter = 2.0
material_print_temperature = =default_material_print_temperature + 10

View File

@ -17,6 +17,7 @@ jerk_support = =math.ceil(jerk_print * 15 / 25)
jerk_support_interface = =math.ceil(jerk_support * 10 / 15)
jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10)
machine_nozzle_heat_up_speed = 1.5
machine_nozzle_id = BB 0.4
material_print_temperature = 215
raft_base_speed = 20
raft_interface_speed = 20

View File

@ -86,6 +86,28 @@ def test_addExtruder(global_stack):
# global_stack.addExtruder(unittest.mock.MagicMock())
assert len(global_stack.extruders) == 2 #Didn't add the faulty extruder.
## Tests getting the approximate material diameter.
@pytest.mark.parametrize("diameter, approximate_diameter", [
#Some real-life cases that are common in printers.
(2.85, 3),
(1.75, 2),
(3.0, 3),
(2.0, 2),
#Exceptional cases.
(0, 0),
(-10.1, -10),
(-1, -1)
])
def test_approximateMaterialDiameter(diameter, approximate_diameter, global_stack):
global_stack.definition = DefinitionContainer(container_id = "TestDefinition")
global_stack.definition._metadata["material_diameter"] = str(diameter)
assert float(global_stack.approximateMaterialDiameter) == approximate_diameter
## Tests getting the material diameter when there is no material diameter.
def test_approximateMaterialDiameterNoDiameter(global_stack):
global_stack.definition = DefinitionContainer(container_id = "TestDefinition")
assert global_stack.approximateMaterialDiameter == "-1"
#Tests setting user changes profiles to invalid containers.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "wrong container type"),