Resolve merge conflicts with master - CURA-4482

This commit is contained in:
Chris ter Beke 2017-10-31 09:22:03 +01:00
commit 9806ec7374
351 changed files with 1469 additions and 883 deletions

View file

@ -75,7 +75,6 @@ class CrashHandler:
## Creates a modal dialog. ## Creates a modal dialog.
def _createDialog(self): def _createDialog(self):
self.dialog = QDialog()
self.dialog.setMinimumWidth(640) self.dialog.setMinimumWidth(640)
self.dialog.setMinimumHeight(640) self.dialog.setMinimumHeight(640)
self.dialog.setWindowTitle(catalog.i18nc("@title:window", "Crash Report")) self.dialog.setWindowTitle(catalog.i18nc("@title:window", "Crash Report"))

View file

@ -105,7 +105,7 @@ class CuraApplication(QtApplication):
# SettingVersion represents the set of settings available in the machine/extruder definitions. # SettingVersion represents the set of settings available in the machine/extruder definitions.
# You need to make sure that this version number needs to be increased if there is any non-backwards-compatible # You need to make sure that this version number needs to be increased if there is any non-backwards-compatible
# changes of the settings. # changes of the settings.
SettingVersion = 3 SettingVersion = 4
class ResourceTypes: class ResourceTypes:
QmlFiles = Resources.UserType + 1 QmlFiles = Resources.UserType + 1
@ -216,6 +216,7 @@ class CuraApplication(QtApplication):
self.setRequiredPlugins([ self.setRequiredPlugins([
"CuraEngineBackend", "CuraEngineBackend",
"UserAgreement",
"SolidView", "SolidView",
"LayerView", "LayerView",
"STLReader", "STLReader",
@ -274,8 +275,9 @@ class CuraApplication(QtApplication):
empty_quality_container = copy.deepcopy(empty_container) empty_quality_container = copy.deepcopy(empty_container)
empty_quality_container._id = "empty_quality" empty_quality_container._id = "empty_quality"
empty_quality_container.setName("Not Supported") empty_quality_container.setName("Not Supported")
empty_quality_container.addMetaDataEntry("quality_type", "normal") empty_quality_container.addMetaDataEntry("quality_type", "not_supported")
empty_quality_container.addMetaDataEntry("type", "quality") empty_quality_container.addMetaDataEntry("type", "quality")
empty_quality_container.addMetaDataEntry("supported", False)
ContainerRegistry.getInstance().addContainer(empty_quality_container) ContainerRegistry.getInstance().addContainer(empty_quality_container)
empty_quality_changes_container = copy.deepcopy(empty_container) empty_quality_changes_container = copy.deepcopy(empty_container)
@ -308,6 +310,8 @@ class CuraApplication(QtApplication):
preferences.addPreference("view/invert_zoom", False) preferences.addPreference("view/invert_zoom", False)
self._need_to_show_user_agreement = not Preferences.getInstance().getValue("general/accepted_user_agreement")
for key in [ for key in [
"dialog_load_path", # dialog_save_path is in LocalFileOutputDevicePlugin "dialog_load_path", # dialog_save_path is in LocalFileOutputDevicePlugin
"dialog_profile_path", "dialog_profile_path",
@ -380,6 +384,14 @@ class CuraApplication(QtApplication):
def _onEngineCreated(self): def _onEngineCreated(self):
self._engine.addImageProvider("camera", CameraImageProvider.CameraImageProvider()) self._engine.addImageProvider("camera", CameraImageProvider.CameraImageProvider())
@pyqtProperty(bool)
def needToShowUserAgreement(self):
return self._need_to_show_user_agreement
def setNeedToShowUserAgreement(self, set_value = True):
self._need_to_show_user_agreement = set_value
## The "Quit" button click event handler. ## The "Quit" button click event handler.
@pyqtSlot() @pyqtSlot()
def closeApplication(self): def closeApplication(self):

View file

@ -313,7 +313,12 @@ class PrintInformation(QObject):
elif word.isdigit(): elif word.isdigit():
abbr_machine += word abbr_machine += word
else: else:
abbr_machine += self._stripAccents(word.strip("()[]{}#").upper())[0] stripped_word = self._stripAccents(word.strip("()[]{}#").upper())
# - use only the first character if the word is too long (> 3 characters)
# - use the whole word if it's not too long (<= 3 characters)
if len(stripped_word) > 3:
stripped_word = stripped_word[0]
abbr_machine += stripped_word
self._abbr_machine = abbr_machine self._abbr_machine = abbr_machine
@ -339,4 +344,3 @@ class PrintInformation(QObject):
temp_material_amounts = [0] temp_material_amounts = [0]
self._onPrintDurationMessage(temp_message, temp_material_amounts) self._onPrintDurationMessage(temp_message, temp_material_amounts)

View file

@ -87,7 +87,7 @@ class QualityManager:
qualities = set(quality_type_dict.values()) qualities = set(quality_type_dict.values())
for material_container in material_containers[1:]: for material_container in material_containers[1:]:
next_quality_type_dict = self.__fetchQualityTypeDictForMaterial(machine_definition, material_container) next_quality_type_dict = self.__fetchQualityTypeDictForMaterial(machine_definition, material_container)
qualities.update(set(next_quality_type_dict.values())) qualities.intersection_update(set(next_quality_type_dict.values()))
return list(qualities) return list(qualities)
@ -178,12 +178,25 @@ class QualityManager:
def findAllUsableQualitiesForMachineAndExtruders(self, global_container_stack: "GlobalStack", extruder_stacks: List["ExtruderStack"]) -> List[InstanceContainer]: def findAllUsableQualitiesForMachineAndExtruders(self, global_container_stack: "GlobalStack", extruder_stacks: List["ExtruderStack"]) -> List[InstanceContainer]:
global_machine_definition = global_container_stack.getBottom() global_machine_definition = global_container_stack.getBottom()
machine_manager = Application.getInstance().getMachineManager()
active_stack_id = machine_manager.activeStackId
materials = []
# TODO: fix this
if extruder_stacks: if extruder_stacks:
# Multi-extruder machine detected. # Multi-extruder machine detected
materials = [stack.material for stack in extruder_stacks] for stack in extruder_stacks:
if stack.getId() == active_stack_id and machine_manager.newMaterial:
materials.append(machine_manager.newMaterial)
else:
materials.append(stack.material)
else: else:
# Machine with one extruder. # Machine with one extruder
materials = [global_container_stack.material] if global_container_stack.getId() == active_stack_id and machine_manager.newMaterial:
materials.append(machine_manager.newMaterial)
else:
materials.append(global_container_stack.material)
quality_types = self.findAllQualityTypesForMachineAndMaterials(global_machine_definition, materials) quality_types = self.findAllQualityTypesForMachineAndMaterials(global_machine_definition, materials)

View file

@ -306,6 +306,9 @@ class CuraContainerRegistry(ContainerRegistry):
if "material" in quality_type_criteria: if "material" in quality_type_criteria:
materials = ContainerRegistry.getInstance().findInstanceContainers(id = quality_type_criteria["material"]) materials = ContainerRegistry.getInstance().findInstanceContainers(id = quality_type_criteria["material"])
del quality_type_criteria["material"] del quality_type_criteria["material"]
# Do not filter quality containers here with materials because we are trying to import a profile, so it should
# NOT be restricted by the active materials on the current machine.
materials = None
# Check to make sure the imported profile actually makes sense in context of the current configuration. # Check to make sure the imported profile actually makes sense in context of the current configuration.
# This prevents issues where importing a "draft" profile for a machine without "draft" qualities would report as # This prevents issues where importing a "draft" profile for a machine without "draft" qualities would report as

View file

@ -50,6 +50,7 @@ class MachineManager(QObject):
# Used to store the new containers until after confirming the dialog # Used to store the new containers until after confirming the dialog
self._new_variant_container = None self._new_variant_container = None
self._new_material_container = None self._new_material_container = None
self._new_quality_containers = []
self._error_check_timer = QTimer() self._error_check_timer = QTimer()
self._error_check_timer.setInterval(250) self._error_check_timer.setInterval(250)
@ -70,10 +71,10 @@ class MachineManager(QObject):
self._stacks_have_errors = None self._stacks_have_errors = None
self._empty_variant_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() self._empty_variant_container = ContainerRegistry.getInstance().findContainers(id = "empty_variant")[0]
self._empty_material_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() self._empty_material_container = ContainerRegistry.getInstance().findContainers(id = "empty_material")[0]
self._empty_quality_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() self._empty_quality_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0]
self._empty_quality_changes_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() self._empty_quality_changes_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality_changes")[0]
self._onGlobalContainerChanged() self._onGlobalContainerChanged()
@ -146,6 +147,14 @@ class MachineManager(QObject):
self.outputDevicesChanged.emit() self.outputDevicesChanged.emit()
@property
def newVariant(self):
return self._new_variant_container
@property
def newMaterial(self):
return self._new_material_container
@pyqtProperty("QVariantList", notify = outputDevicesChanged) @pyqtProperty("QVariantList", notify = outputDevicesChanged)
def printerOutputDevices(self): def printerOutputDevices(self):
return self._printer_output_devices return self._printer_output_devices
@ -838,8 +847,6 @@ class MachineManager(QObject):
if not containers or not self._global_container_stack: if not containers or not self._global_container_stack:
return return
Logger.log("d", "Attempting to change the active quality to %s", quality_id)
# Quality profile come in two flavours: type=quality and type=quality_changes # Quality profile come in two flavours: type=quality and type=quality_changes
# If we found a quality_changes profile then look up its parent quality profile. # If we found a quality_changes profile then look up its parent quality profile.
container_type = containers[0].getMetaDataEntry("type") container_type = containers[0].getMetaDataEntry("type")
@ -859,49 +866,73 @@ class MachineManager(QObject):
if new_quality_settings_list is None: if new_quality_settings_list is None:
return return
name_changed_connect_stacks = [] # Connect these stacks to the name changed callback # check if any of the stacks have a not supported profile
# if that is the case, all stacks should have a not supported state (otherwise it will show quality_type normal)
has_not_supported_quality = False
# check all stacks for not supported
for setting_info in new_quality_settings_list:
if setting_info["quality"].getMetaDataEntry("quality_type") == "not_supported":
has_not_supported_quality = True
break
# set all stacks to not supported if that's the case
if has_not_supported_quality:
for setting_info in new_quality_settings_list:
setting_info["quality"] = self._empty_quality_container
self._new_quality_containers.clear()
# store the upcoming quality profile changes per stack for later execution
# this prevents re-slicing before the user has made a choice in the discard or keep dialog
# (see _executeDelayedActiveContainerStackChanges)
for setting_info in new_quality_settings_list: for setting_info in new_quality_settings_list:
stack = setting_info["stack"] stack = setting_info["stack"]
stack_quality = setting_info["quality"] stack_quality = setting_info["quality"]
stack_quality_changes = setting_info["quality_changes"] stack_quality_changes = setting_info["quality_changes"]
name_changed_connect_stacks.append(stack_quality) self._new_quality_containers.append({
name_changed_connect_stacks.append(stack_quality_changes) "stack": stack,
self._replaceQualityOrQualityChangesInStack(stack, stack_quality, postpone_emit=True) "quality": stack_quality,
self._replaceQualityOrQualityChangesInStack(stack, stack_quality_changes, postpone_emit=True) "quality_changes": stack_quality_changes
})
# Connect to onQualityNameChanged
for stack in name_changed_connect_stacks:
stack.nameChanged.connect(self._onQualityNameChanged)
has_user_interaction = False has_user_interaction = False
if self.hasUserSettings and Preferences.getInstance().getValue("cura/active_mode") == 1: if self.hasUserSettings and Preferences.getInstance().getValue("cura/active_mode") == 1:
# Show the keep/discard user settings dialog # Show the keep/discard user settings dialog
has_user_interaction = Application.getInstance().discardOrKeepProfileChanges() has_user_interaction = Application.getInstance().discardOrKeepProfileChanges()
else:
# If the user doesn't have any of adjusted settings then slicing will be triggered by emit()
# Send emits that are postponed in replaceContainer.
# Here the stacks are finished replacing and every value can be resolved based on the current state.
for setting_info in new_quality_settings_list:
setting_info["stack"].sendPostponedEmits()
# If there is no interaction with the user (it means the dialog showing "keep" or "discard" was not shown)
# because either there are not user changes or because the used already decided to always keep or discard,
# then the quality instance container is replaced, in which case, the activeQualityChanged signal is emitted.
if not has_user_interaction: if not has_user_interaction:
self._executeDelayedActiveContainerStackChanges() self._executeDelayedActiveContainerStackChanges()
self.activeQualityChanged.emit()
## Used to update material and variant in the active container stack with a delay. ## Used to update material and variant in the active container stack with a delay.
# This delay prevents the stack from triggering a lot of signals (eventually resulting in slicing) # This delay prevents the stack from triggering a lot of signals (eventually resulting in slicing)
# before the user decided to keep or discard any of their changes using the dialog. # before the user decided to keep or discard any of their changes using the dialog.
# The Application.onDiscardOrKeepProfileChangesClosed signal triggers this method. # The Application.onDiscardOrKeepProfileChangesClosed signal triggers this method.
def _executeDelayedActiveContainerStackChanges(self): def _executeDelayedActiveContainerStackChanges(self):
if self._new_variant_container is not None:
self._active_container_stack.variant = self._new_variant_container
self._new_variant_container = None
if self._new_material_container is not None: if self._new_material_container is not None:
self._active_container_stack.material = self._new_material_container self._active_container_stack.material = self._new_material_container
self._new_material_container = None self._new_material_container = None
if self._new_variant_container is not None: # apply the new quality to all stacks
self._active_container_stack.variant = self._new_variant_container if self._new_quality_containers:
self._new_variant_container = None for new_quality in self._new_quality_containers:
self._replaceQualityOrQualityChangesInStack(new_quality["stack"], new_quality["quality"], postpone_emit = True)
self._replaceQualityOrQualityChangesInStack(new_quality["stack"], new_quality["quality_changes"], postpone_emit = True)
for new_quality in self._new_quality_containers:
new_quality["stack"].nameChanged.connect(self._onQualityNameChanged)
new_quality["stack"].sendPostponedEmits() # Send the signals that were postponed in _replaceQualityOrQualityChangesInStack
self._new_quality_containers.clear()
## Cancel set changes for material and variant in the active container stack. ## Cancel set changes for material and variant in the active container stack.
# Used for ignoring any changes when switching between printers (setActiveMachine) # Used for ignoring any changes when switching between printers (setActiveMachine)
@ -931,8 +962,14 @@ class MachineManager(QObject):
for stack in stacks: for stack in stacks:
material = stack.material material = stack.material
# TODO: fix this
if self._new_material_container and stack.getId() == self._active_container_stack.getId():
material = self._new_material_container
quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material])
if not quality: #No quality profile is found for this quality type. if not quality:
# No quality profile is found for this quality type.
quality = self._empty_quality_container quality = self._empty_quality_container
result.append({"stack": stack, "quality": quality, "quality_changes": empty_quality_changes}) result.append({"stack": stack, "quality": quality, "quality_changes": empty_quality_changes})
@ -970,6 +1007,11 @@ class MachineManager(QObject):
material = global_container_stack.material material = global_container_stack.material
# find a quality type that matches both machine and materials # find a quality type that matches both machine and materials
if self._new_material_container and self._active_container_stack.getId() == global_container_stack.getId():
material = self._new_material_container
# For the global stack, find a quality which matches the quality_type in
# the quality changes profile and also satisfies any material constraints.
quality_type = global_quality_changes.getMetaDataEntry("quality_type") quality_type = global_quality_changes.getMetaDataEntry("quality_type")
extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
@ -989,6 +1031,10 @@ class MachineManager(QObject):
quality_changes = self._empty_quality_changes_container quality_changes = self._empty_quality_changes_container
material = extruder_stack.material material = extruder_stack.material
if self._new_material_container and self._active_container_stack.getId() == stack.getId():
material = self._new_material_container
quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material])
if not quality: if not quality:

View file

@ -82,10 +82,18 @@ class ProfilesModel(InstanceContainersModel):
if quality.getMetaDataEntry("quality_type") not in quality_type_set: if quality.getMetaDataEntry("quality_type") not in quality_type_set:
result.append(quality) result.append(quality)
# if still profiles are found, add a single empty_quality ("Not supported") instance to the drop down list
if len(result) == 0:
# If not qualities are found we dynamically create a not supported container for this machine + material combination
not_supported_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0]
result.append(not_supported_container)
return result return result
## Re-computes the items in this model, and adds the layer height role. ## Re-computes the items in this model, and adds the layer height role.
def _recomputeItems(self): def _recomputeItems(self):
# Some globals that we can re-use.
global_container_stack = Application.getInstance().getGlobalContainerStack() global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack is None: if global_container_stack is None:
return return
@ -134,14 +142,24 @@ class ProfilesModel(InstanceContainersModel):
# Now all the containers are set # Now all the containers are set
for item in containers: for item in containers:
profile = container_registry.findContainers(id=item["id"]) profile = container_registry.findContainers(id = item["id"])
# When for some reason there is no profile container in the registry
if not profile: if not profile:
self._setItemLayerHeight(item, "", unit) self._setItemLayerHeight(item, "", "")
item["available"] = False item["available"] = False
yield item yield item
continue continue
profile = profile[0] profile = profile[0]
# When there is a profile but it's an empty quality should. It's shown in the list (they are "Not Supported" profiles)
if profile.getId() == "empty_quality":
self._setItemLayerHeight(item, "", "")
item["available"] = True
yield item
continue
item["available"] = profile in qualities item["available"] = profile in qualities
# Easy case: This profile defines its own layer height. # Easy case: This profile defines its own layer height.

View file

@ -21,6 +21,8 @@ from cura.Settings.CuraStackBuilder import CuraStackBuilder
from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.ExtruderManager import ExtruderManager
from cura.Settings.ExtruderStack import ExtruderStack from cura.Settings.ExtruderStack import ExtruderStack
from cura.Settings.GlobalStack import GlobalStack from cura.Settings.GlobalStack import GlobalStack
from cura.Settings.CuraContainerStack import _ContainerIndexes
from cura.QualityManager import QualityManager
from configparser import ConfigParser from configparser import ConfigParser
import zipfile import zipfile
@ -757,13 +759,37 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._container_registry.removeContainer(container.getId()) self._container_registry.removeContainer(container.getId())
return return
# Check quality profiles to make sure that if one stack has the "not supported" quality profile,
# all others should have the same.
#
# This block code tries to fix the following problems in Cura 3.0 and earlier:
# 1. The upgrade script can rename all "Not Supported" quality profiles to "empty_quality", but it cannot fix
# the problem that the global stack the extruder stacks may have different quality profiles. The code
# below loops over all stacks and make sure that if there is one stack with "Not Supported" profile, the
# rest should also use the "Not Supported" profile.
# 2. In earlier versions (at least 2.7 and 3.0), a wrong quality profile could be assigned to a stack. For
# example, a UM3 can have a BB 0.8 variant with "aa04_pla_fast" quality profile enabled. To fix this,
# in the code below we also check the actual available quality profiles for the machine.
#
has_not_supported = False
for stack in [global_stack] + extruder_stacks:
if stack.quality.getId() == "empty_quality":
has_not_supported = True
break
if not has_not_supported:
available_quality = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_stack, extruder_stacks)
has_not_supported = not available_quality
if has_not_supported:
empty_quality_container = self._container_registry.findInstanceContainers(id = "empty_quality")[0]
for stack in [global_stack] + extruder_stacks:
stack.replaceContainer(_ContainerIndexes.Quality, empty_quality_container)
# #
# Replacing the old containers if resolve is "new". # Replacing the old containers if resolve is "new".
# When resolve is "new", some containers will get renamed, so all the other containers that reference to those # When resolve is "new", some containers will get renamed, so all the other containers that reference to those
# MUST get updated too. # MUST get updated too.
# #
if self._resolve_strategies["machine"] == "new": if self._resolve_strategies["machine"] == "new":
# A new machine was made, but it was serialized with the wrong user container. Fix that now. # A new machine was made, but it was serialized with the wrong user container. Fix that now.
for container in user_instance_containers: for container in user_instance_containers:
# replacing the container ID for user instance containers for the extruders # replacing the container ID for user instance containers for the extruders

View file

@ -8,7 +8,6 @@ from UM.Application import Application
from UM.PluginRegistry import PluginRegistry from UM.PluginRegistry import PluginRegistry
from UM.Version import Version from UM.Version import Version
from PyQt5.QtQuick import QQuickView
from PyQt5.QtQml import QQmlComponent, QQmlContext from PyQt5.QtQml import QQmlComponent, QQmlContext
from PyQt5.QtCore import QUrl, pyqtSlot, QObject from PyQt5.QtCore import QUrl, pyqtSlot, QObject

View file

@ -147,6 +147,7 @@ class MachineSettingsAction(MachineAction):
for setting_instance in extruder_user_container.findInstances(): for setting_instance in extruder_user_container.findInstances():
setting_key = setting_instance.definition.key setting_key = setting_instance.definition.key
settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder") settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder")
if settable_per_extruder: if settable_per_extruder:
limit_to_extruder = self._global_container_stack.getProperty(setting_key, "limit_to_extruder") limit_to_extruder = self._global_container_stack.getProperty(setting_key, "limit_to_extruder")
@ -154,11 +155,16 @@ class MachineSettingsAction(MachineAction):
global_user_container.setProperty(setting_key, "value", extruder_user_container.getProperty(setting_key, "value")) global_user_container.setProperty(setting_key, "value", extruder_user_container.getProperty(setting_key, "value"))
extruder_user_container.removeInstance(setting_key) extruder_user_container.removeInstance(setting_key)
# Check to see if any features are set to print with an extruder that will no longer exist # reset all extruder number settings whose value is no longer valid
for setting_key in ["adhesion_extruder_nr", "support_extruder_nr", "support_extruder_nr_layer_0", "support_infill_extruder_nr", "support_interface_extruder_nr"]: for setting_instance in self._global_container_stack.userChanges.findInstances():
if int(self._global_container_stack.getProperty(setting_key, "value")) > extruder_count - 1: setting_key = setting_instance.definition.key
Logger.log("i", "Lowering %s setting to match number of extruders", setting_key) if not self._global_container_stack.getProperty(setting_key, "type") in ("extruder", "optional_extruder"):
self._global_container_stack.getTop().setProperty(setting_key, "value", extruder_count - 1) continue
old_value = int(self._global_container_stack.userChanges.getProperty(setting_key, "value"))
if old_value >= extruder_count:
self._global_container_stack.userChanges.removeInstance(setting_key)
Logger.log("d", "Reset [%s] because its old value [%s] is no longer valid ", setting_key, old_value)
# Check to see if any objects are set to print with an extruder that will no longer exist # Check to see if any objects are set to print with an extruder that will no longer exist
root_node = Application.getInstance().getController().getScene().getRoot() root_node = Application.getInstance().getController().getScene().getRoot()

View file

@ -119,11 +119,17 @@ Item
onClicked: manager.loadConfigurationFromPrinter() onClicked: manager.loadConfigurationFromPrinter()
function isClusterPrinter() { function isClusterPrinter() {
var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize if(Cura.MachineManager.printerOutputDevices.length == 0)
// This is a non cluster printer or the cluster it is just one printer {
if (clusterSize == undefined || clusterSize == 1) return false;
return false }
return true var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize;
// This is not a cluster printer or the cluster it is just one printer
if(clusterSize == undefined || clusterSize == 1)
{
return false;
}
return true;
} }
} }
} }

View file

@ -0,0 +1,53 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from UM.Extension import Extension
from UM.Preferences import Preferences
from UM.Application import Application
from UM.PluginRegistry import PluginRegistry
from UM.Logger import Logger
from cura.CuraApplication import CuraApplication
from PyQt5.QtQml import QQmlComponent, QQmlContext
from PyQt5.QtCore import QUrl, QObject, pyqtSlot
import os.path
class UserAgreement(QObject, Extension):
def __init__(self, parent = None):
super(UserAgreement, self).__init__()
self._user_agreement_window = None
self._user_agreement_context = None
Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
Preferences.getInstance().addPreference("general/accepted_user_agreement", False)
def _onEngineCreated(self):
if not Preferences.getInstance().getValue("general/accepted_user_agreement"):
self.showUserAgreement()
def showUserAgreement(self):
if not self._user_agreement_window:
self.createUserAgreementWindow()
self._user_agreement_window.show()
@pyqtSlot(bool)
def didAgree(self, userChoice):
if userChoice:
Logger.log("i", "User agreed to the user agreement")
Preferences.getInstance().setValue("general/accepted_user_agreement", True)
self._user_agreement_window.hide()
else:
Logger.log("i", "User did NOT agree to the user agreement")
Preferences.getInstance().setValue("general/accepted_user_agreement", False)
CuraApplication.getInstance().quit()
CuraApplication.getInstance().setNeedToShowUserAgreement(False)
def createUserAgreementWindow(self):
path = QUrl.fromLocalFile(os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), "UserAgreement.qml"))
component = QQmlComponent(Application.getInstance()._engine, path)
self._user_agreement_context = QQmlContext(Application.getInstance()._engine.rootContext())
self._user_agreement_context.setContextProperty("manager", self)
self._user_agreement_window = component.create(self._user_agreement_context)

View file

@ -0,0 +1,64 @@
// Copyright (c) 2017 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
import QtQuick.Controls 1.4
import UM 1.3 as UM
UM.Dialog
{
id: baseDialog
minimumWidth: Math.floor(UM.Theme.getSize("modal_window_minimum").width * 0.75)
minimumHeight: Math.floor(UM.Theme.getSize("modal_window_minimum").height * 0.5)
width: minimumWidth
height: minimumHeight
title: catalog.i18nc("@title:window", "User Agreement")
TextArea
{
anchors.top: parent.top
width: parent.width
anchors.bottom: buttonRow.top
text: ' <center><h3>DISCLAIMER BY ULTIMAKER</h3></center>
<p>PLEASE READ THIS DISCLAIMER CAREFULLY.</p>
<p>EXCEPT WHEN OTHERWISE STATED IN WRITING, ULTIMAKER PROVIDES ANY ULTIMAKER SOFTWARE OR THIRD PARTY SOFTWARE AS IS WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF ULTIMAKER SOFTWARE IS WITH YOU.</p>
<p>UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, IN NO EVENT WILL ULTIMAKER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE ANY ULTIMAKER SOFTWARE OR THIRD PARTY SOFTWARE.</p>
'
readOnly: true;
textFormat: TextEdit.RichText
}
Item
{
id: buttonRow
anchors.bottom: parent.bottom
width: parent.width
anchors.bottomMargin: UM.Theme.getSize("default_margin").height
UM.I18nCatalog { id: catalog; name:"cura" }
Button
{
anchors.right: parent.right
text: catalog.i18nc("@action:button", "I understand and agree")
onClicked: {
manager.didAgree(true)
}
}
Button
{
anchors.left: parent.left
text: catalog.i18nc("@action:button", "I don't agree")
onClicked: {
manager.didAgree(false)
}
}
}
onClosing: {
manager.didAgree(false)
}
}

View file

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

View file

@ -0,0 +1,8 @@
{
"name": "UserAgreement",
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Ask the user once if he/she agrees with our license",
"api": 4,
"i18n-catalog": "cura"
}

View file

@ -0,0 +1,141 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import configparser #To parse preference files.
import io #To serialise the preference files afterwards.
from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this.
# a list of all legacy "Not Supported" quality profiles
_OLD_NOT_SUPPORTED_PROFILES = [
"um2p_pp_0.25_normal.inst.cfg",
"um2p_tpu_0.8_normal.inst.cfg",
"um3_bb0.4_ABS_Fast_Print.inst.cfg",
"um3_bb0.4_ABS_Superdraft_Print.inst.cfg",
"um3_bb0.4_CPEP_Fast_Print.inst.cfg",
"um3_bb0.4_CPEP_Superdraft_Print.inst.cfg",
"um3_bb0.4_CPE_Fast_Print.inst.cfg",
"um3_bb0.4_CPE_Superdraft_Print.inst.cfg",
"um3_bb0.4_Nylon_Fast_Print.inst.cfg",
"um3_bb0.4_Nylon_Superdraft_Print.inst.cfg",
"um3_bb0.4_PC_Fast_Print.inst.cfg",
"um3_bb0.4_PLA_Fast_Print.inst.cfg",
"um3_bb0.4_PLA_Superdraft_Print.inst.cfg",
"um3_bb0.4_PP_Fast_Print.inst.cfg",
"um3_bb0.4_PP_Superdraft_Print.inst.cfg",
"um3_bb0.4_TPU_Fast_Print.inst.cfg",
"um3_bb0.4_TPU_Superdraft_Print.inst.cfg",
"um3_bb0.8_ABS_Fast_Print.inst.cfg",
"um3_bb0.8_ABS_Superdraft_Print.inst.cfg",
"um3_bb0.8_CPEP_Fast_Print.inst.cfg",
"um3_bb0.8_CPEP_Superdraft_Print.inst.cfg",
"um3_bb0.8_CPE_Fast_Print.inst.cfg",
"um3_bb0.8_CPE_Superdraft_Print.inst.cfg",
"um3_bb0.8_Nylon_Fast_Print.inst.cfg",
"um3_bb0.8_Nylon_Superdraft_Print.inst.cfg",
"um3_bb0.8_PC_Fast_Print.inst.cfg",
"um3_bb0.8_PC_Superdraft_Print.inst.cfg",
"um3_bb0.8_PLA_Fast_Print.inst.cfg",
"um3_bb0.8_PLA_Superdraft_Print.inst.cfg",
"um3_bb0.8_PP_Fast_Print.inst.cfg",
"um3_bb0.8_PP_Superdraft_Print.inst.cfg",
"um3_bb0.8_TPU_Fast_print.inst.cfg",
"um3_bb0.8_TPU_Superdraft_Print.inst.cfg",
]
class VersionUpgrade30to31(VersionUpgrade):
## Gets the version number from a CFG file in Uranium's 3.0 format.
#
# Since the format may change, this is implemented for the 3.0 format only
# and needs to be included in the version upgrade system rather than
# globally in Uranium.
#
# \param serialised The serialised form of a CFG file.
# \return The version number stored in the CFG file.
# \raises ValueError The format of the version number in the file is
# incorrect.
# \raises KeyError The format of the file is incorrect.
def getCfgVersion(self, serialised):
parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialised)
format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
setting_version = int(parser.get("metadata", "setting_version", fallback = 0))
return format_version * 1000000 + setting_version
## Upgrades a preferences file from version 3.0 to 3.1.
#
# \param serialised The serialised form of a preferences file.
# \param filename The name of the file to upgrade.
def upgradePreferences(self, serialised, filename):
parser = configparser.ConfigParser(interpolation=None)
parser.read_string(serialised)
# Update version numbers
if "general" not in parser:
parser["general"] = {}
parser["general"]["version"] = "5"
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "4"
# Re-serialise the file.
output = io.StringIO()
parser.write(output)
return [filename], [output.getvalue()]
## Upgrades the given instance container file from version 3.0 to 3.1.
#
# \param serialised The serialised form of the container file.
# \param filename The name of the file to upgrade.
def upgradeInstanceContainer(self, serialised, filename):
parser = configparser.ConfigParser(interpolation=None)
parser.read_string(serialised)
for each_section in ("general", "metadata"):
if not parser.has_section(each_section):
parser.add_section(each_section)
# Update version numbers
parser["general"]["version"] = "2"
parser["metadata"]["setting_version"] = "4"
# Re-serialise the file.
output = io.StringIO()
parser.write(output)
return [filename], [output.getvalue()]
## Upgrades a container stack from version 3.0 to 3.1.
#
# \param serialised The serialised form of a container stack.
# \param filename The name of the file to upgrade.
def upgradeStack(self, serialised, filename):
parser = configparser.ConfigParser(interpolation=None)
parser.read_string(serialised)
for each_section in ("general", "metadata"):
if not parser.has_section(each_section):
parser.add_section(each_section)
# change "not supported" quality profiles to empty because they no longer exist
if parser.has_section("containers"):
if parser.has_option("containers", "2"):
quality_profile_id = parser["containers"]["2"]
if quality_profile_id in _OLD_NOT_SUPPORTED_PROFILES:
parser["containers"]["2"] = "empty_quality"
# Update version numbers
if "general" not in parser:
parser["general"] = {}
parser["general"]["version"] = "3"
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "4"
# Re-serialise the file.
output = io.StringIO()
parser.write(output)
return [filename], [output.getvalue()]

View file

@ -0,0 +1,56 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from . import VersionUpgrade30to31
upgrade = VersionUpgrade30to31.VersionUpgrade30to31()
def getMetaData():
return {
"version_upgrade": {
# From To Upgrade function
("preferences", 5000003): ("preferences", 5000004, upgrade.upgradePreferences),
("machine_stack", 3000003): ("machine_stack", 3000004, upgrade.upgradeStack),
("extruder_train", 3000003): ("extruder_train", 3000004, upgrade.upgradeStack),
("quality_changes", 2000003): ("quality_changes", 2000004, upgrade.upgradeInstanceContainer),
("user", 2000003): ("user", 2000004, upgrade.upgradeInstanceContainer),
("quality", 2000003): ("quality", 2000004, upgrade.upgradeInstanceContainer),
("definition_changes", 2000003): ("definition_changes", 2000004, upgrade.upgradeInstanceContainer),
("variant", 2000003): ("variant", 2000004, upgrade.upgradeInstanceContainer)
},
"sources": {
"preferences": {
"get_version": upgrade.getCfgVersion,
"location": {"."}
},
"machine_stack": {
"get_version": upgrade.getCfgVersion,
"location": {"./machine_instances"}
},
"extruder_train": {
"get_version": upgrade.getCfgVersion,
"location": {"./extruders"}
},
"quality_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./quality"}
},
"user": {
"get_version": upgrade.getCfgVersion,
"location": {"./user"}
},
"definition_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./definition_changes"}
},
"variant": {
"get_version": upgrade.getCfgVersion,
"location": {"./variants"}
}
}
}
def register(app):
return { "version_upgrade": upgrade }

View file

@ -0,0 +1,8 @@
{
"name": "Version Upgrade 3.0 to 3.1",
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 3.0 to Cura 3.1.",
"api": 4,
"i18n-catalog": "cura"
}

View file

@ -35,7 +35,7 @@ class XmlMaterialProfile(InstanceContainer):
# \return The corresponding setting_version. # \return The corresponding setting_version.
def xmlVersionToSettingVersion(self, xml_version: str) -> int: def xmlVersionToSettingVersion(self, xml_version: str) -> int:
if xml_version == "1.3": if xml_version == "1.3":
return 3 return 4
return 0 #Older than 1.3. return 0 #Older than 1.3.
def getInheritedFiles(self): def getInheritedFiles(self):

View file

@ -0,0 +1,117 @@
{
"id": "builder_premium_large",
"version": 2,
"name": "Builder Premium Large",
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Builder SZ",
"manufacturer": "Builder",
"category": "Other",
"quality_definition": "builder_premium_small",
"file_formats": "text/x-gcode",
"platform": "builder_premium_platform.stl",
"platform_offset": [-126, -36, 117],
"has_machine_quality": true,
"preferred_quality": "*Normal*",
"machine_extruder_trains":
{
"0": "builder_premium_large_rear",
"1": "builder_premium_large_front"
}
},
"overrides": {
"machine_name": { "default_value": "Builder Premium Large" },
"machine_heated_bed": { "default_value": true },
"machine_width": { "default_value": 215 },
"machine_height": { "default_value": 600 },
"machine_depth": { "default_value": 205 },
"material_diameter": { "default_value": 1.75 },
"infill_pattern": {"value": "'triangles'" },
"infill_before_walls": {"value": false },
"default_material_print_temperature": { "value": "215" },
"material_print_temperature_layer_0": { "value": "material_print_temperature + 5" },
"material_standby_temperature": { "value": "material_print_temperature" },
"switch_extruder_retraction_speeds": {"default_value": 15 },
"switch_extruder_retraction_speed": {"default_value": 15 },
"switch_extruder_prime_speed": {"default_value": 15 },
"switch_extruder_retraction_amount": {"value": 1 },
"speed_travel": { "value": "100" },
"speed_layer_0": { "value": "20" },
"speed_prime_tower": { "value": "speed_topbottom" },
"speed_print": { "value": "40" },
"speed_support": { "value": "speed_wall_0" },
"speed_support_interface": { "value": "speed_topbottom" },
"speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" },
"speed_wall": { "value": "math.ceil(speed_print * 30 / 40)" },
"speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 25)" },
"speed_wall_x": { "value": "speed_wall" },
"prime_tower_position_x": { "default_value": 175 },
"prime_tower_position_y": { "default_value": 178 },
"prime_tower_wipe_enabled": { "default_value": false },
"prime_tower_min_volume": { "default_value": 50 },
"dual_pre_wipe": { "default_value": false },
"prime_blob_enable": { "enabled": true },
"acceleration_enabled": { "value": "True" },
"acceleration_layer_0": { "value": "acceleration_topbottom" },
"acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
"acceleration_print": { "value": "3000" },
"acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
"acceleration_support_interface": { "value": "acceleration_topbottom" },
"acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1000 / 3000)" },
"acceleration_travel": { "value": "acceleration_print" },
"acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 3000)" },
"acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 1000 / 1000)" },
"cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
"cool_min_layer_time": { "default_value": 10 },
"jerk_enabled": { "value": "True" },
"jerk_layer_0": { "value": "jerk_topbottom" },
"jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" },
"jerk_print": { "value": "25" },
"jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" },
"jerk_support_interface": { "value": "jerk_topbottom" },
"jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" },
"jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" },
"jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" },
"wall_thickness": { "value": "1.2" },
"retraction_amount": { "default_value": 3 },
"retraction_speed": { "default_value": 15 },
"retraction_retract_speed": { "default_value": 15 },
"retraction_prime_speed": { "default_value": 15 },
"travel_retract_before_outer_wall": { "default_value": true },
"skin_overlap": { "value": "15" },
"adhesion_type": { "default_value": "skirt" },
"machine_nozzle_heat_up_speed": { "default_value": 2 },
"machine_nozzle_cool_down_speed": { "default_value": 2 },
"machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
"gantry_height": { "default_value": 55 },
"machine_max_feedrate_x": { "default_value": 300 },
"machine_max_feedrate_y": { "default_value": 300 },
"machine_max_feedrate_z": { "default_value": 40 },
"machine_max_acceleration_z": { "default_value": 500 },
"machine_acceleration": { "default_value": 1000 },
"machine_max_jerk_xy": { "default_value": 10 },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": {
"default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E15 ;extrude 15mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nT0 ;Start with Rear Extruder\n;Put printing message on LCD screen\nM117 Printing..."
},
"machine_end_gcode": {
"default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning"
},
"machine_extruder_count": { "default_value": 2 }
}
}

View file

@ -0,0 +1,117 @@
{
"id": "builder_premium_medium",
"version": 2,
"name": "Builder Premium Medium",
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Builder SZ",
"manufacturer": "Builder",
"category": "Other",
"quality_definition": "builder_premium_small",
"file_formats": "text/x-gcode",
"platform": "builder_premium_platform.stl",
"platform_offset": [-126, -36, 117],
"has_machine_quality": true,
"preferred_quality": "*Normal*",
"machine_extruder_trains":
{
"0": "builder_premium_medium_rear",
"1": "builder_premium_medium_front"
}
},
"overrides": {
"machine_name": { "default_value": "Builder Premium Medium" },
"machine_heated_bed": { "default_value": true },
"machine_width": { "default_value": 215 },
"machine_height": { "default_value": 400 },
"machine_depth": { "default_value": 205 },
"material_diameter": { "default_value": 1.75 },
"infill_pattern": {"value": "'triangles'" },
"infill_before_walls": {"value": false },
"default_material_print_temperature": { "value": "215" },
"material_print_temperature_layer_0": { "value": "material_print_temperature + 5" },
"material_standby_temperature": { "value": "material_print_temperature" },
"switch_extruder_retraction_speeds": {"default_value": 15 },
"switch_extruder_retraction_speed": {"default_value": 15 },
"switch_extruder_prime_speed": {"default_value": 15 },
"switch_extruder_retraction_amount": {"value": 1 },
"speed_travel": { "value": "100" },
"speed_layer_0": { "value": "20" },
"speed_prime_tower": { "value": "speed_topbottom" },
"speed_print": { "value": "40" },
"speed_support": { "value": "speed_wall_0" },
"speed_support_interface": { "value": "speed_topbottom" },
"speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" },
"speed_wall": { "value": "math.ceil(speed_print * 30 / 40)" },
"speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 25)" },
"speed_wall_x": { "value": "speed_wall" },
"prime_tower_position_x": { "default_value": 175 },
"prime_tower_position_y": { "default_value": 178 },
"prime_tower_wipe_enabled": { "default_value": false },
"prime_tower_min_volume": { "default_value": 50 },
"dual_pre_wipe": { "default_value": false },
"prime_blob_enable": { "enabled": true },
"acceleration_enabled": { "value": "True" },
"acceleration_layer_0": { "value": "acceleration_topbottom" },
"acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
"acceleration_print": { "value": "3000" },
"acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
"acceleration_support_interface": { "value": "acceleration_topbottom" },
"acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1000 / 3000)" },
"acceleration_travel": { "value": "acceleration_print" },
"acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 3000)" },
"acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 1000 / 1000)" },
"cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
"cool_min_layer_time": { "default_value": 10 },
"jerk_enabled": { "value": "True" },
"jerk_layer_0": { "value": "jerk_topbottom" },
"jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" },
"jerk_print": { "value": "25" },
"jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" },
"jerk_support_interface": { "value": "jerk_topbottom" },
"jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" },
"jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" },
"jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" },
"wall_thickness": { "value": "1.2" },
"retraction_amount": { "default_value": 3 },
"retraction_speed": { "default_value": 15 },
"retraction_retract_speed": { "default_value": 15 },
"retraction_prime_speed": { "default_value": 15 },
"travel_retract_before_outer_wall": { "default_value": true },
"skin_overlap": { "value": "15" },
"adhesion_type": { "default_value": "skirt" },
"machine_nozzle_heat_up_speed": { "default_value": 2 },
"machine_nozzle_cool_down_speed": { "default_value": 2 },
"machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
"gantry_height": { "default_value": 55 },
"machine_max_feedrate_x": { "default_value": 300 },
"machine_max_feedrate_y": { "default_value": 300 },
"machine_max_feedrate_z": { "default_value": 40 },
"machine_max_acceleration_z": { "default_value": 500 },
"machine_acceleration": { "default_value": 1000 },
"machine_max_jerk_xy": { "default_value": 10 },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": {
"default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E15 ;extrude 15mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nT0 ;Start with Rear Extruder\n;Put printing message on LCD screen\nM117 Printing..."
},
"machine_end_gcode": {
"default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning"
},
"machine_extruder_count": { "default_value": 2 }
}
}

View file

@ -0,0 +1,116 @@
{
"id": "builder_premium_small",
"version": 2,
"name": "Builder Premium Small",
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Builder SZ",
"manufacturer": "Builder",
"category": "Other",
"file_formats": "text/x-gcode",
"platform": "builder_premium_platform.stl",
"platform_offset": [-126, -36, 117],
"has_machine_quality": true,
"preferred_quality": "*Normal*",
"machine_extruder_trains":
{
"0": "builder_premium_small_rear",
"1": "builder_premium_small_front"
}
},
"overrides": {
"machine_name": { "default_value": "Builder Premium Small" },
"machine_heated_bed": { "default_value": true },
"machine_width": { "default_value": 215 },
"machine_height": { "default_value": 200 },
"machine_depth": { "default_value": 205 },
"material_diameter": { "default_value": 1.75 },
"infill_pattern": {"value": "'triangles'" },
"infill_before_walls": {"value": false },
"default_material_print_temperature": { "value": "215" },
"material_print_temperature_layer_0": { "value": "material_print_temperature + 5" },
"material_standby_temperature": { "value": "material_print_temperature" },
"switch_extruder_retraction_speeds": {"default_value": 15 },
"switch_extruder_retraction_speed": {"default_value": 15 },
"switch_extruder_prime_speed": {"default_value": 15 },
"switch_extruder_retraction_amount": {"value": 1 },
"speed_travel": { "value": "100" },
"speed_layer_0": { "value": "20" },
"speed_prime_tower": { "value": "speed_topbottom" },
"speed_print": { "value": "40" },
"speed_support": { "value": "speed_wall_0" },
"speed_support_interface": { "value": "speed_topbottom" },
"speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" },
"speed_wall": { "value": "math.ceil(speed_print * 30 / 40)" },
"speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 25)" },
"speed_wall_x": { "value": "speed_wall" },
"prime_tower_position_x": { "default_value": 175 },
"prime_tower_position_y": { "default_value": 178 },
"prime_tower_wipe_enabled": { "default_value": false },
"prime_tower_min_volume": { "default_value": 50 },
"dual_pre_wipe": { "default_value": false },
"prime_blob_enable": { "enabled": true },
"acceleration_enabled": { "value": "True" },
"acceleration_layer_0": { "value": "acceleration_topbottom" },
"acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
"acceleration_print": { "value": "3000" },
"acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
"acceleration_support_interface": { "value": "acceleration_topbottom" },
"acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1000 / 3000)" },
"acceleration_travel": { "value": "acceleration_print" },
"acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 3000)" },
"acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 1000 / 1000)" },
"cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
"cool_min_layer_time": { "default_value": 10 },
"jerk_enabled": { "value": "True" },
"jerk_layer_0": { "value": "jerk_topbottom" },
"jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" },
"jerk_print": { "value": "25" },
"jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" },
"jerk_support_interface": { "value": "jerk_topbottom" },
"jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" },
"jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" },
"jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" },
"wall_thickness": { "value": "1.2" },
"retraction_amount": { "default_value": 3 },
"retraction_speed": { "default_value": 15 },
"retraction_retract_speed": { "default_value": 15 },
"retraction_prime_speed": { "default_value": 15 },
"travel_retract_before_outer_wall": { "default_value": true },
"skin_overlap": { "value": "15" },
"adhesion_type": { "default_value": "skirt" },
"machine_nozzle_heat_up_speed": { "default_value": 2 },
"machine_nozzle_cool_down_speed": { "default_value": 2 },
"machine_head_polygon": { "default_value": [[-75, -18],[-75, 35],[18, 35],[18, -18]] },
"gantry_height": { "default_value": 55 },
"machine_max_feedrate_x": { "default_value": 300 },
"machine_max_feedrate_y": { "default_value": 300 },
"machine_max_feedrate_z": { "default_value": 40 },
"machine_max_acceleration_z": { "default_value": 500 },
"machine_acceleration": { "default_value": 1000 },
"machine_max_jerk_xy": { "default_value": 10 },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": {
"default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E15 ;extrude 15mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nT0 ;Start with Rear Extruder\n;Put printing message on LCD screen\nM117 Printing..."
},
"machine_end_gcode": {
"default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning"
},
"machine_extruder_count": { "default_value": 2 }
}
}

View file

@ -5,7 +5,7 @@
"inherits": "fdmprinter", "inherits": "fdmprinter",
"metadata": { "metadata": {
"visible": true, "visible": true,
"author": "Apsu", "author": "Apsu, Nounours2099",
"manufacturer": "Prusa Research", "manufacturer": "Prusa Research",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
@ -41,7 +41,7 @@
"machine_max_jerk_e": { "default_value": 2.5 }, "machine_max_jerk_e": { "default_value": 2.5 },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": { "machine_start_gcode": {
"default_value": "G21 ; set units to millimeters\nG90 ; use absolute positioning\nM82 ; absolute extrusion mode\nM104 S{material_print_temperature} ; set extruder temp\nM140 S{material_bed_temperature} ; set bed temp\nM190 S{material_bed_temperature} ; wait for bed temp\nM109 S{material_print_temperature} ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG92 E0.0 ; reset extruder distance position\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E21.5 F1000.0 ; intro line\nG92 E0.0 ; reset extruder distance position" "default_value": "G21 ; set units to millimeters\nG90 ; use absolute positioning\nM82 ; absolute extrusion mode\nM104 S{material_print_temperature_layer_0} ; set extruder temp\nM140 S{material_bed_temperature_layer_0} ; set bed temp\nM190 S{material_bed_temperature_layer_0} ; wait for bed temp\nM109 S{material_print_temperature_layer_0} ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG92 E0.0 ; reset extruder distance position\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E21.5 F1000.0 ; intro line\nG92 E0.0 ; reset extruder distance position"
}, },
"machine_end_gcode": { "machine_end_gcode": {
"default_value": "M104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y210; home X axis and push Y forward\nM84 ; disable motors" "default_value": "M104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y210; home X axis and push Y forward\nM84 ; disable motors"

View file

@ -0,0 +1,27 @@
{
"id": "builder_premium_large_front",
"version": 2,
"name": "Front Extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "builder_premium_large",
"position": "1"
},
"overrides": {
"extruder_nr": {
"default_value": 1,
"maximum_value": "1"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_pos_abs": { "default_value": true },
"machine_extruder_start_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_start_pos_y": { "value": "prime_tower_position_y" },
"machine_extruder_end_pos_abs": { "default_value": true },
"machine_extruder_end_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_end_pos_y": { "value": "prime_tower_position_y" },
"extruder_prime_pos_abs": { "default_value": true }
}
}

View file

@ -0,0 +1,27 @@
{
"id": "builder_premium_large_rear",
"version": 2,
"name": "Rear Extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "builder_premium_large",
"position": "0"
},
"overrides": {
"extruder_nr": {
"default_value": 0,
"maximum_value": "1"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_pos_abs": { "default_value": true },
"machine_extruder_start_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_start_pos_y": { "value": "prime_tower_position_y" },
"machine_extruder_end_pos_abs": { "default_value": true },
"machine_extruder_end_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_end_pos_y": { "value": "prime_tower_position_y" },
"extruder_prime_pos_abs": { "default_value": true }
}
}

View file

@ -0,0 +1,27 @@
{
"id": "builder_premium_medium_front",
"version": 2,
"name": "Front Extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "builder_premium_medium",
"position": "1"
},
"overrides": {
"extruder_nr": {
"default_value": 1,
"maximum_value": "1"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_pos_abs": { "default_value": true },
"machine_extruder_start_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_start_pos_y": { "value": "prime_tower_position_y" },
"machine_extruder_end_pos_abs": { "default_value": true },
"machine_extruder_end_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_end_pos_y": { "value": "prime_tower_position_y" },
"extruder_prime_pos_abs": { "default_value": true }
}
}

View file

@ -0,0 +1,27 @@
{
"id": "builder_premium_medium_rear",
"version": 2,
"name": "Rear Extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "builder_premium_medium",
"position": "0"
},
"overrides": {
"extruder_nr": {
"default_value": 0,
"maximum_value": "1"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_pos_abs": { "default_value": true },
"machine_extruder_start_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_start_pos_y": { "value": "prime_tower_position_y" },
"machine_extruder_end_pos_abs": { "default_value": true },
"machine_extruder_end_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_end_pos_y": { "value": "prime_tower_position_y" },
"extruder_prime_pos_abs": { "default_value": true }
}
}

View file

@ -0,0 +1,27 @@
{
"id": "builder_premium_small_front",
"version": 2,
"name": "Front Extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "builder_premium_small",
"position": "1"
},
"overrides": {
"extruder_nr": {
"default_value": 1,
"maximum_value": "1"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_pos_abs": { "default_value": true },
"machine_extruder_start_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_start_pos_y": { "value": "prime_tower_position_y" },
"machine_extruder_end_pos_abs": { "default_value": true },
"machine_extruder_end_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_end_pos_y": { "value": "prime_tower_position_y" },
"extruder_prime_pos_abs": { "default_value": true }
}
}

View file

@ -0,0 +1,27 @@
{
"id": "builder_premium_small_rear",
"version": 2,
"name": "Rear Extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "builder_premium_small",
"position": "0"
},
"overrides": {
"extruder_nr": {
"default_value": 0,
"maximum_value": "1"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_pos_abs": { "default_value": true },
"machine_extruder_start_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_start_pos_y": { "value": "prime_tower_position_y" },
"machine_extruder_end_pos_abs": { "default_value": true },
"machine_extruder_end_pos_x": { "value": "prime_tower_position_x" },
"machine_extruder_end_pos_y": { "value": "prime_tower_position_y" },
"extruder_prime_pos_abs": { "default_value": true }
}
}

View file

@ -18,6 +18,21 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#Manually added for plugins/UserAgreementPlugin/UserAgreement.qml
msgctxt "@title:window"
msgid "User Agreement"
msgstr ""
#Manually added for plugins/UserAgreementPlugin/UserAgreement.qml
msgctxt "@action:button"
msgid "I understand and agree"
msgstr ""
#Manually added for plugins/UserAgreementPlugin/UserAgreement.qml
msgctxt "@action:button"
msgid "I don't agree"
msgstr ""
#: Manually added for plugins/UM3NetworkPrinting/PrinterInfoBlock.qml #: Manually added for plugins/UM3NetworkPrinting/PrinterInfoBlock.qml
msgctxt "@label:status" msgctxt "@label:status"
msgid "Print aborted" msgid "Print aborted"

View file

@ -2519,7 +2519,7 @@ msgstr "Sichtbarkeit einstellen"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:44 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:44
msgctxt "@label:textbox" msgctxt "@label:textbox"
msgid "Check all" msgid "Check all"
msgstr "Alle prüfen" msgstr "Alles wählen"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:40 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:40
msgctxt "@info:status" msgctxt "@info:status"

Binary file not shown.

View file

@ -894,6 +894,11 @@ UM.MainWindow
if(!base.visible) if(!base.visible)
{ {
base.visible = true; base.visible = true;
}
// check later if the user agreement dialog has been closed
if (CuraApplication.needToShowUserAgreement)
{
restart(); restart();
} }
else if(Cura.MachineManager.activeMachineId == null || Cura.MachineManager.activeMachineId == "") else if(Cura.MachineManager.activeMachineId == null || Cura.MachineManager.activeMachineId == "")

View file

@ -16,11 +16,17 @@ Menu
property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
property bool isClusterPrinter: property bool isClusterPrinter:
{ {
var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize if(Cura.MachineManager.printerOutputDevices.length == 0)
// This is a non cluster printer or the cluster it is just one printer {
if (clusterSize == undefined || clusterSize == 1) return false;
return false }
return true var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize;
// This is not a cluster printer or the cluster it is just one printer
if(clusterSize == undefined || clusterSize == 1)
{
return false;
}
return true;
} }
UM.SettingPropertyProvider UM.SettingPropertyProvider

View file

@ -16,11 +16,17 @@ Menu
property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
property bool isClusterPrinter: property bool isClusterPrinter:
{ {
var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize if(Cura.MachineManager.printerOutputDevices.length == 0)
// This is a non cluster printer or the cluster it is just one printer {
if (clusterSize == undefined || clusterSize == 1) return false;
return false }
return true var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize;
// This is not a cluster printer or the cluster it is just one printer
if(clusterSize == undefined || clusterSize == 1)
{
return false;
}
return true;
} }
MenuItem MenuItem

View file

@ -17,9 +17,9 @@ Menu
MenuItem MenuItem
{ {
text: model.name + " - " + model.layer_height text: (model.layer_height != "") ? model.name + " - " + model.layer_height : model.name
checkable: true checkable: true
checked: Cura.MachineManager.activeQualityChangesId == "" && Cura.MachineManager.activeQualityType == model.metadata.quality_type checked: Cura.MachineManager.activeQualityId == model.id
exclusiveGroup: group exclusiveGroup: group
onTriggered: Cura.MachineManager.setActiveQuality(model.id) onTriggered: Cura.MachineManager.setActiveQuality(model.id)
visible: model.available visible: model.available

View file

@ -51,27 +51,34 @@ Item
{ {
id: globalProfileSelection id: globalProfileSelection
text: { text: generateActiveQualityText()
var result = Cura.MachineManager.activeQualityName;
if (Cura.MachineManager.activeQualityLayerHeight > 0) {
result += " <font color=\"" + UM.Theme.getColor("text_detail") + "\">";
result += " - ";
result += Cura.MachineManager.activeQualityLayerHeight + "mm";
result += "</font>";
}
return result;
}
enabled: !header.currentExtruderVisible || header.currentExtruderIndex > -1 enabled: !header.currentExtruderVisible || header.currentExtruderIndex > -1
width: Math.floor(parent.width * 0.55) width: Math.floor(parent.width * 0.55)
height: UM.Theme.getSize("setting_control").height height: UM.Theme.getSize("setting_control").height
anchors.left: globalProfileLabel.right anchors.left: globalProfileLabel.right
anchors.right: parent.right anchors.right: parent.right
tooltip: Cura.MachineManager.activeQualityName tooltip: Cura.MachineManager.activeQualityName
style: UM.Theme.styles.sidebar_header_button style: UM.Theme.styles.sidebar_header_button
activeFocusOnPress: true; activeFocusOnPress: true
menu: ProfileMenu { } menu: ProfileMenu { }
function generateActiveQualityText () {
var result = catalog.i18nc("@", "No Profile Available") // default text
if (Cura.MachineManager.isActiveQualitySupported ) {
result = Cura.MachineManager.activeQualityName
if (Cura.MachineManager.activeQualityLayerHeight > 0) {
result += " <font color=\"" + UM.Theme.getColor("text_detail") + "\">"
result += " - "
result += Cura.MachineManager.activeQualityLayerHeight + "mm"
result += "</font>"
}
}
return result
}
UM.SimpleButton UM.SimpleButton
{ {
id: customisedSettings id: customisedSettings

View file

@ -245,35 +245,29 @@ Column
color: UM.Theme.getColor("text"); color: UM.Theme.getColor("text");
} }
ToolButton { ToolButton
{
id: materialSelection id: materialSelection
text: Cura.MachineManager.activeMaterialName text: Cura.MachineManager.activeMaterialName
tooltip: Cura.MachineManager.activeMaterialName tooltip: Cura.MachineManager.activeMaterialName
visible: Cura.MachineManager.hasMaterials visible: Cura.MachineManager.hasMaterials
property var valueError:
{
var data = Cura.ContainerManager.getContainerMetaDataEntry(Cura.MachineManager.activeMaterialId, "compatible")
if(data == "False")
{
return true
}
else
{
return false
}
}
property var valueWarning: ! Cura.MachineManager.isActiveQualitySupported
enabled: !extrudersList.visible || base.currentExtruderIndex > -1 enabled: !extrudersList.visible || base.currentExtruderIndex > -1
height: UM.Theme.getSize("setting_control").height height: UM.Theme.getSize("setting_control").height
width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width
anchors.right: parent.right anchors.right: parent.right
style: UM.Theme.styles.sidebar_header_button style: UM.Theme.styles.sidebar_header_button
activeFocusOnPress: true; activeFocusOnPress: true;
menu: MaterialMenu {
extruderIndex: base.currentExtruderIndex
}
menu: MaterialMenu { extruderIndex: base.currentExtruderIndex } property var valueError: !isMaterialSupported()
property var valueWarning: ! Cura.MachineManager.isActiveQualitySupported
function isMaterialSupported () {
return Cura.ContainerManager.getContainerMetaDataEntry(Cura.MachineManager.activeMaterialId, "compatible") == "True"
}
} }
} }

View file

@ -8,7 +8,7 @@ type = quality
material = generic_pla material = generic_pla
weight = -1 weight = -1
quality_type = normal quality_type = normal
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.2 layer_height = 0.2

View file

@ -8,7 +8,7 @@ type = quality
material = generic_pla material = generic_pla
weight = 1 weight = 1
quality_type = high quality_type = high
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.1 layer_height = 0.1

View file

@ -8,7 +8,7 @@ type = quality
material = generic_pla material = generic_pla
weight = 0 weight = 0
quality_type = normal quality_type = normal
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.2 layer_height = 0.2

View file

@ -8,7 +8,7 @@ type = quality
material = generic_pla material = generic_pla
weight = -1 weight = -1
quality_type = normal quality_type = normal
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.2 layer_height = 0.2

View file

@ -8,7 +8,7 @@ type = quality
material = generic_pla material = generic_pla
weight = 1 weight = 1
quality_type = high quality_type = high
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.1 layer_height = 0.1

View file

@ -8,7 +8,7 @@ type = quality
material = generic_pla material = generic_pla
weight = 0 weight = 0
quality_type = normal quality_type = normal
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.2 layer_height = 0.2

View file

@ -8,7 +8,7 @@ type = quality
material = generic_pla material = generic_pla
weight = -1 weight = -1
quality_type = normal quality_type = normal
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.2 layer_height = 0.2

View file

@ -7,7 +7,7 @@ type = quality
material = generic_pla material = generic_pla
weight = 1 weight = 1
quality_type = high quality_type = high
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.1 layer_height = 0.1

View file

@ -8,7 +8,7 @@ type = quality
material = generic_pla material = generic_pla
weight = 0 weight = 0
quality_type = normal quality_type = normal
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.2 layer_height = 0.2

View file

@ -0,0 +1,25 @@
[general]
version = 2
name = Coarse
definition = builder_premium_small
[metadata]
type = quality
quality_type = coarse
material = generic_pla_175
setting_version = 4
weight = -1
global_quality = True
[values]
material_print_temperature = =default_material_print_temperature + 15
material_standby_temperature = =material_print_temperature
material_initial_print_temperature= =material_print_temperature
material_final_print_temperature= =material_print_temperature
material_bed_temperature = 45
material_bed_temperature_layer_0= =material_bed_temperature
layer_height = 0.3
top_thickness = =layer_height * 5
bottom_thickness = =layer_height * 3
speed_print = 60

View file

@ -0,0 +1,26 @@
[general]
version = 2
name = High Quality
definition = builder_premium_small
[metadata]
type = quality
quality_type = high
material = generic_pla_175
setting_version = 4
weight = 1
global_quality = True
[values]
acceleration_print = 2000
material_print_temperature = =default_material_print_temperature + 15
material_standby_temperature = =material_print_temperature
material_initial_print_temperature= =material_print_temperature
material_final_print_temperature= =material_print_temperature
material_bed_temperature = 45
material_bed_temperature_layer_0= =material_bed_temperature
layer_height = 0.1
top_thickness = =layer_height * 7
bottom_thickness = =layer_height * 5
speed_print = 40
layer_height_0 = 0.2

View file

@ -0,0 +1,24 @@
[general]
version = 2
name = Normal
definition = builder_premium_small
[metadata]
type = quality
quality_type = normal
material = generic_pla_175
setting_version = 4
weight = 0
global_quality = True
[values]
material_print_temperature = =default_material_print_temperature + 15
material_standby_temperature = =material_print_temperature
material_initial_print_temperature= =material_print_temperature
material_final_print_temperature= =material_print_temperature
material_bed_temperature = 45
material_bed_temperature_layer_0= =material_bed_temperature
layer_height = 0.2
top_thickness = =layer_height * 5
bottom_thickness = =layer_height * 3
speed_print = 50

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_abs_175_cartesio_0.25_mm material = generic_abs_175_cartesio_0.25_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_abs_175_cartesio_0.25_mm material = generic_abs_175_cartesio_0.25_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_abs_175_cartesio_0.4_mm material = generic_abs_175_cartesio_0.4_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_abs_175_cartesio_0.4_mm material = generic_abs_175_cartesio_0.4_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = coarse quality_type = coarse
material = generic_abs_175_cartesio_0.8_mm material = generic_abs_175_cartesio_0.8_mm
weight = 3 weight = 3
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = extra coarse quality_type = extra coarse
material = generic_abs_175_cartesio_0.8_mm material = generic_abs_175_cartesio_0.8_mm
weight = 4 weight = 4
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_abs_175_cartesio_0.8_mm material = generic_abs_175_cartesio_0.8_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_abs_175_cartesio_0.8_mm material = generic_abs_175_cartesio_0.8_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = dsm_arnitel2045_175_cartesio_0.4_mm material = dsm_arnitel2045_175_cartesio_0.4_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = dsm_arnitel2045_175_cartesio_0.4_mm material = dsm_arnitel2045_175_cartesio_0.4_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = coarse quality_type = coarse
global_quality = True global_quality = True
weight = -3 weight = -3
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.4 layer_height = 0.4

View file

@ -8,7 +8,7 @@ type = quality
quality_type = extra coarse quality_type = extra coarse
global_quality = True global_quality = True
weight = -4 weight = -4
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.6 layer_height = 0.6

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
global_quality = True global_quality = True
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.1 layer_height = 0.1

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
global_quality = True global_quality = True
weight = 0 weight = 0
setting_version = 3 setting_version = 4
[values] [values]
layer_height = 0.2 layer_height = 0.2

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_hips_175_cartesio_0.25_mm material = generic_hips_175_cartesio_0.25_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_hips_175_cartesio_0.25_mm material = generic_hips_175_cartesio_0.25_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_hips_175_cartesio_0.4_mm material = generic_hips_175_cartesio_0.4_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_hips_175_cartesio_0.4_mm material = generic_hips_175_cartesio_0.4_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = coarse quality_type = coarse
material = generic_hips_175_cartesio_0.8_mm material = generic_hips_175_cartesio_0.8_mm
weight = 3 weight = 3
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = extra coarse quality_type = extra coarse
material = generic_hips_175_cartesio_0.8_mm material = generic_hips_175_cartesio_0.8_mm
weight = 4 weight = 4
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_hips_175_cartesio_0.8_mm material = generic_hips_175_cartesio_0.8_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_hips_175_cartesio_0.8_mm material = generic_hips_175_cartesio_0.8_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_nylon_175_cartesio_0.25_mm material = generic_nylon_175_cartesio_0.25_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_nylon_175_cartesio_0.25_mm material = generic_nylon_175_cartesio_0.25_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_nylon_175_cartesio_0.4_mm material = generic_nylon_175_cartesio_0.4_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_nylon_175_cartesio_0.4_mm material = generic_nylon_175_cartesio_0.4_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = coarse quality_type = coarse
material = generic_nylon_175_cartesio_0.8_mm material = generic_nylon_175_cartesio_0.8_mm
weight = 3 weight = 3
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = extra coarse quality_type = extra coarse
material = generic_nylon_175_cartesio_0.8_mm material = generic_nylon_175_cartesio_0.8_mm
weight = 4 weight = 4
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_nylon_175_cartesio_0.8_mm material = generic_nylon_175_cartesio_0.8_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_nylon_175_cartesio_0.8_mm material = generic_nylon_175_cartesio_0.8_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_pc_175_cartesio_0.25_mm material = generic_pc_175_cartesio_0.25_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_pc_175_cartesio_0.25_mm material = generic_pc_175_cartesio_0.25_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_pc_175_cartesio_0.4_mm material = generic_pc_175_cartesio_0.4_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_pc_175_cartesio_0.4_mm material = generic_pc_175_cartesio_0.4_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = coarse quality_type = coarse
material = generic_pc_175_cartesio_0.8_mm material = generic_pc_175_cartesio_0.8_mm
weight = 3 weight = 3
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = extra coarse quality_type = extra coarse
material = generic_pc_175_cartesio_0.8_mm material = generic_pc_175_cartesio_0.8_mm
weight = 4 weight = 4
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_pc_175_cartesio_0.8_mm material = generic_pc_175_cartesio_0.8_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_pc_175_cartesio_0.8_mm material = generic_pc_175_cartesio_0.8_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_petg_175_cartesio_0.25_mm material = generic_petg_175_cartesio_0.25_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_petg_175_cartesio_0.25_mm material = generic_petg_175_cartesio_0.25_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_petg_175_cartesio_0.4_mm material = generic_petg_175_cartesio_0.4_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_petg_175_cartesio_0.4_mm material = generic_petg_175_cartesio_0.4_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = coarse quality_type = coarse
material = generic_petg_175_cartesio_0.8_mm material = generic_petg_175_cartesio_0.8_mm
weight = 3 weight = 3
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = extra coarse quality_type = extra coarse
material = generic_petg_175_cartesio_0.8_mm material = generic_petg_175_cartesio_0.8_mm
weight = 4 weight = 4
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_petg_175_cartesio_0.8_mm material = generic_petg_175_cartesio_0.8_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_petg_175_cartesio_0.8_mm material = generic_petg_175_cartesio_0.8_mm
weight = 2 weight = 2
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.9 infill_line_width = 0.9

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_pla_175_cartesio_0.25_mm material = generic_pla_175_cartesio_0.25_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_pla_175_cartesio_0.25_mm material = generic_pla_175_cartesio_0.25_mm
weight = 0 weight = 0
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.3 infill_line_width = 0.3

View file

@ -8,7 +8,7 @@ type = quality
quality_type = high quality_type = high
material = generic_pla_175_cartesio_0.4_mm material = generic_pla_175_cartesio_0.4_mm
weight = 1 weight = 1
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

View file

@ -8,7 +8,7 @@ type = quality
quality_type = normal quality_type = normal
material = generic_pla_175_cartesio_0.4_mm material = generic_pla_175_cartesio_0.4_mm
weight = 0 weight = 0
setting_version = 3 setting_version = 4
[values] [values]
infill_line_width = 0.5 infill_line_width = 0.5

Some files were not shown because too many files have changed in this diff Show more