Merge branch 'master' of github.com:Ultimaker/Cura

This commit is contained in:
Jack Ha 2017-02-27 11:20:29 +01:00
commit d300aad781
28 changed files with 299 additions and 47 deletions

View file

@ -20,6 +20,8 @@ from UM.JobQueue import JobQueue
from UM.SaveFile import SaveFile from UM.SaveFile import SaveFile
from UM.Scene.Selection import Selection from UM.Scene.Selection import Selection
from UM.Scene.GroupDecorator import GroupDecorator from UM.Scene.GroupDecorator import GroupDecorator
from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.Validator import Validator from UM.Settings.Validator import Validator
from UM.Message import Message from UM.Message import Message
from UM.i18n import i18nCatalog from UM.i18n import i18nCatalog
@ -148,11 +150,11 @@ class CuraApplication(QtApplication):
UM.VersionUpgradeManager.VersionUpgradeManager.getInstance().setCurrentVersions( UM.VersionUpgradeManager.VersionUpgradeManager.getInstance().setCurrentVersions(
{ {
("quality", UM.Settings.InstanceContainer.InstanceContainer.Version): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"), ("quality", InstanceContainer.Version): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"),
("machine_stack", UM.Settings.ContainerStack.ContainerStack.Version): (self.ResourceTypes.MachineStack, "application/x-uranium-containerstack"), ("machine_stack", ContainerStack.Version): (self.ResourceTypes.MachineStack, "application/x-uranium-containerstack"),
("extruder_train", UM.Settings.ContainerStack.ContainerStack.Version): (self.ResourceTypes.ExtruderStack, "application/x-uranium-extruderstack"), ("extruder_train", ContainerStack.Version): (self.ResourceTypes.ExtruderStack, "application/x-uranium-extruderstack"),
("preferences", Preferences.Version): (Resources.Preferences, "application/x-uranium-preferences"), ("preferences", Preferences.Version): (Resources.Preferences, "application/x-uranium-preferences"),
("user", UM.Settings.InstanceContainer.InstanceContainer.Version): (self.ResourceTypes.UserInstanceContainer, "application/x-uranium-instancecontainer") ("user", InstanceContainer.Version): (self.ResourceTypes.UserInstanceContainer, "application/x-uranium-instancecontainer")
} }
) )

View file

@ -3,15 +3,15 @@
import os.path import os.path
import urllib import urllib
from typing import Dict, Union
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, QUrl, QVariant from PyQt5.QtCore import QObject, QUrl, QVariant
from UM.FlameProfiler import pyqtSlot from UM.FlameProfiler import pyqtSlot
from PyQt5.QtWidgets import QMessageBox from PyQt5.QtWidgets import QMessageBox
from UM.PluginRegistry import PluginRegistry from UM.PluginRegistry import PluginRegistry
from UM.Platform import Platform
from UM.SaveFile import SaveFile from UM.SaveFile import SaveFile
from UM.Platform import Platform
from UM.MimeTypeDatabase import MimeTypeDatabase from UM.MimeTypeDatabase import MimeTypeDatabase
from UM.Logger import Logger from UM.Logger import Logger
@ -307,18 +307,20 @@ class ContainerManager(QObject):
# #
# \param container_id The ID of the container to export # \param container_id The ID of the container to export
# \param file_type The type of file to save as. Should be in the form of "description (*.extension, *.ext)" # \param file_type The type of file to save as. Should be in the form of "description (*.extension, *.ext)"
# \param file_url The URL where to save the file. # \param file_url_or_string The URL where to save the file.
# #
# \return A dictionary containing a key "status" with a status code and a key "message" with a message # \return A dictionary containing a key "status" with a status code and a key "message" with a message
# explaining the status. # explaining the status.
# The status code can be one of "error", "cancelled", "success" # The status code can be one of "error", "cancelled", "success"
@pyqtSlot(str, str, QUrl, result = "QVariantMap") @pyqtSlot(str, str, QUrl, result = "QVariantMap")
def exportContainer(self, container_id, file_type, file_url): def exportContainer(self, container_id: str, file_type: str, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]:
if not container_id or not file_type or not file_url: if not container_id or not file_type or not file_url_or_string:
return { "status": "error", "message": "Invalid arguments"} return { "status": "error", "message": "Invalid arguments"}
if isinstance(file_url, QUrl): if isinstance(file_url_or_string, QUrl):
file_url = file_url.toLocalFile() file_url = file_url_or_string.toLocalFile()
else:
file_url = file_url_or_string
if not file_url: if not file_url:
return { "status": "error", "message": "Invalid path"} return { "status": "error", "message": "Invalid path"}
@ -373,12 +375,14 @@ class ContainerManager(QObject):
# \return \type{Dict} dict with a 'status' key containing the string 'success' or 'error', and a 'message' key # \return \type{Dict} dict with a 'status' key containing the string 'success' or 'error', and a 'message' key
# containing a message for the user # containing a message for the user
@pyqtSlot(QUrl, result = "QVariantMap") @pyqtSlot(QUrl, result = "QVariantMap")
def importContainer(self, file_url): def importContainer(self, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]:
if not file_url: if not file_url_or_string:
return { "status": "error", "message": "Invalid path"} return { "status": "error", "message": "Invalid path"}
if isinstance(file_url, QUrl): if isinstance(file_url_or_string, QUrl):
file_url = file_url.toLocalFile() file_url = file_url_or_string.toLocalFile()
else:
file_url = file_url_or_string
if not file_url or not os.path.exists(file_url): if not file_url or not os.path.exists(file_url):
return { "status": "error", "message": "Invalid path" } return { "status": "error", "message": "Invalid path" }
@ -438,7 +442,7 @@ class ContainerManager(QObject):
## Clear the top-most (user) containers of the active stacks. ## Clear the top-most (user) containers of the active stacks.
@pyqtSlot() @pyqtSlot()
def clearUserContainers(self): def clearUserContainers(self) -> None:
self._machine_manager.blurSettings.emit() self._machine_manager.blurSettings.emit()
send_emits_containers = [] send_emits_containers = []
@ -668,7 +672,7 @@ class ContainerManager(QObject):
return new_change_instances return new_change_instances
@pyqtSlot(str, result = str) @pyqtSlot(str, result = str)
def duplicateMaterial(self, material_id): def duplicateMaterial(self, material_id: str) -> str:
containers = self._container_registry.findInstanceContainers(id=material_id) containers = self._container_registry.findInstanceContainers(id=material_id)
if not containers: if not containers:
Logger.log("d", "Unable to duplicate the material with id %s, because it doesn't exist.", material_id) Logger.log("d", "Unable to duplicate the material with id %s, because it doesn't exist.", material_id)
@ -692,7 +696,7 @@ class ContainerManager(QObject):
## Get the singleton instance for this class. ## Get the singleton instance for this class.
@classmethod @classmethod
def getInstance(cls): def getInstance(cls) -> "ContainerManager":
# Note: Explicit use of class name to prevent issues with inheritance. # Note: Explicit use of class name to prevent issues with inheritance.
if ContainerManager.__instance is None: if ContainerManager.__instance is None:
ContainerManager.__instance = cls() ContainerManager.__instance = cls()
@ -717,7 +721,7 @@ class ContainerManager(QObject):
if clear_settings: if clear_settings:
merge.clear() merge.clear()
def _updateContainerNameFilters(self): def _updateContainerNameFilters(self) -> None:
self._container_name_filters = {} self._container_name_filters = {}
for plugin_id, container_type in self._container_registry.getContainerTypes(): for plugin_id, container_type in self._container_registry.getContainerTypes():
# Ignore default container types since those are not plugins # Ignore default container types since those are not plugins

View file

@ -6,7 +6,7 @@ from PyQt5.QtGui import QValidator
import os #For statvfs. import os #For statvfs.
import urllib #To escape machine names for how they're saved to file. import urllib #To escape machine names for how they're saved to file.
import UM.Resources from UM.Resources import Resources
from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.InstanceContainer import InstanceContainer
@ -19,7 +19,7 @@ class MachineNameValidator(QObject):
#Compute the validation regex for printer names. This is limited by the maximum file name length. #Compute the validation regex for printer names. This is limited by the maximum file name length.
try: try:
filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()).f_namemax filename_max_length = os.statvfs(Resources.getDataStoragePath()).f_namemax
except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system. except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system.
filename_max_length = 255 #Assume it's Windows on NTFS. filename_max_length = 255 #Assume it's Windows on NTFS.
machine_name_max_length = filename_max_length - len("_current_settings.") - len(ContainerRegistry.getMimeTypeForContainer(InstanceContainer).preferredSuffix) machine_name_max_length = filename_max_length - len("_current_settings.") - len(ContainerRegistry.getMimeTypeForContainer(InstanceContainer).preferredSuffix)
@ -41,7 +41,7 @@ class MachineNameValidator(QObject):
def validate(self, name, position): def validate(self, name, position):
#Check for file name length of the current settings container (which is the longest file we're saving with the name). #Check for file name length of the current settings container (which is the longest file we're saving with the name).
try: try:
filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()).f_namemax filename_max_length = os.statvfs(Resources.getDataStoragePath()).f_namemax
except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system. except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system.
filename_max_length = 255 #Assume it's Windows on NTFS. filename_max_length = 255 #Assume it's Windows on NTFS.
escaped_name = urllib.parse.quote_plus(name) escaped_name = urllib.parse.quote_plus(name)

View file

@ -8,7 +8,7 @@ from UM.Signal import Signal, signalemitter
from UM.Settings.ContainerStack import ContainerStack from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerRegistry import ContainerRegistry
import UM.Logger from UM.Logger import Logger
from UM.Application import Application from UM.Application import Application
@ -99,7 +99,7 @@ class SettingOverrideDecorator(SceneNodeDecorator):
Application.getInstance().getBackend().needsSlicing() Application.getInstance().getBackend().needsSlicing()
Application.getInstance().getBackend().tickle() Application.getInstance().getBackend().tickle()
else: else:
UM.Logger.log("e", "Extruder stack %s below per-object settings does not exist.", self._extruder_stack) Logger.log("e", "Extruder stack %s below per-object settings does not exist.", self._extruder_stack)
else: else:
self._stack.setNextStack(Application.getInstance().getGlobalContainerStack()) self._stack.setNextStack(Application.getInstance().getGlobalContainerStack())

View file

@ -2,7 +2,7 @@
# Cura is released under the terms of the AGPLv3 or higher. # Cura is released under the terms of the AGPLv3 or higher.
import configparser import configparser
from UM import PluginRegistry from UM.PluginRegistry import PluginRegistry
from UM.Logger import Logger from UM.Logger import Logger
from UM.Settings.InstanceContainer import InstanceContainer # The new profile to make. from UM.Settings.InstanceContainer import InstanceContainer # The new profile to make.
from cura.ProfileReader import ProfileReader from cura.ProfileReader import ProfileReader

View file

@ -2,7 +2,7 @@
# Cura is released under the terms of the AGPLv3 or higher. # Cura is released under the terms of the AGPLv3 or higher.
from UM.Platform import Platform from UM.Platform import Platform
from UM.Logger import Logger
from UM.i18n import i18nCatalog from UM.i18n import i18nCatalog
catalog = i18nCatalog("cura") catalog = i18nCatalog("cura")

View file

@ -99,6 +99,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
self._material_ids = [""] * self._num_extruders self._material_ids = [""] * self._num_extruders
self._hotend_ids = [""] * self._num_extruders self._hotend_ids = [""] * self._num_extruders
self._target_bed_temperature = 0 self._target_bed_temperature = 0
self._processing_preheat_requests = True
self.setPriority(2) # Make sure the output device gets selected above local file output self.setPriority(2) # Make sure the output device gets selected above local file output
self.setName(key) self.setName(key)
@ -262,6 +263,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
Logger.log("i", "Pre-heating bed to %i degrees.", temperature) Logger.log("i", "Pre-heating bed to %i degrees.", temperature)
put_request = QNetworkRequest(url) put_request = QNetworkRequest(url)
put_request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json") put_request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
self._processing_preheat_requests = False
self._manager.put(put_request, data.encode()) self._manager.put(put_request, data.encode())
self._preheat_bed_timer.start(self._preheat_bed_timeout * 1000) #Times 1000 because it needs to be provided as milliseconds. self._preheat_bed_timer.start(self._preheat_bed_timeout * 1000) #Times 1000 because it needs to be provided as milliseconds.
self.preheatBedRemainingTimeChanged.emit() self.preheatBedRemainingTimeChanged.emit()
@ -532,6 +534,30 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
self._updateHeadPosition(head_x, head_y, head_z) self._updateHeadPosition(head_x, head_y, head_z)
self._updatePrinterState(self._json_printer_state["status"]) self._updatePrinterState(self._json_printer_state["status"])
if self._processing_preheat_requests:
try:
is_preheating = self._json_printer_state["bed"]["pre_heat"]["active"]
except KeyError: #Old firmware doesn't support that.
pass #Don't update the pre-heat remaining time.
else:
if is_preheating:
try:
remaining_preheat_time = self._json_printer_state["bed"]["pre_heat"]["remaining"]
except KeyError: #Error in firmware. If "active" is supported, "remaining" should also be supported.
pass #Anyway, don't update.
else:
#Only update if time estimate is significantly off (>5000ms).
#Otherwise we get issues with latency causing the timer to count inconsistently.
if abs(self._preheat_bed_timer.remainingTime() - remaining_preheat_time * 1000) > 5000:
self._preheat_bed_timer.setInterval(remaining_preheat_time * 1000)
self._preheat_bed_timer.start()
self.preheatBedRemainingTimeChanged.emit()
else: #Not pre-heating. Must've cancelled.
if self._preheat_bed_timer.isActive():
self._preheat_bed_timer.setInterval(0)
self._preheat_bed_timer.stop()
self.preheatBedRemainingTimeChanged.emit()
def close(self): def close(self):
Logger.log("d", "Closing connection of printer %s with ip %s", self._key, self._address) Logger.log("d", "Closing connection of printer %s with ip %s", self._key, self._address)
@ -1033,6 +1059,8 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
self._progress_message.hide() self._progress_message.hide()
elif reply.operation() == QNetworkAccessManager.PutOperation: elif reply.operation() == QNetworkAccessManager.PutOperation:
if "printer/bed/pre_heat" in reply_url: #Pre-heat command has completed. Re-enable syncing pre-heating.
self._processing_preheat_requests = True
if status_code in [200, 201, 202, 204]: if status_code in [200, 201, 202, 204]:
pass # Request was successful! pass # Request was successful!
else: else:

View file

@ -3,7 +3,7 @@
import UM.VersionUpgrade #To indicate that a file is of incorrect format. import UM.VersionUpgrade #To indicate that a file is of incorrect format.
import UM.VersionUpgradeManager #To schedule more files to be upgraded. import UM.VersionUpgradeManager #To schedule more files to be upgraded.
import UM.Resources #To get the config storage path. from UM.Resources import Resources #To get the config storage path.
import configparser #To read config files. import configparser #To read config files.
import io #To write config files to strings as if they were files. import io #To write config files to strings as if they were files.
@ -107,7 +107,7 @@ class MachineInstance:
user_profile["values"] = {} user_profile["values"] = {}
version_upgrade_manager = UM.VersionUpgradeManager.VersionUpgradeManager.getInstance() version_upgrade_manager = UM.VersionUpgradeManager.VersionUpgradeManager.getInstance()
user_storage = os.path.join(UM.Resources.getDataStoragePath(), next(iter(version_upgrade_manager.getStoragePaths("user")))) user_storage = os.path.join(Resources.getDataStoragePath(), next(iter(version_upgrade_manager.getStoragePaths("user"))))
user_profile_file = os.path.join(user_storage, urllib.parse.quote_plus(self._name) + "_current_settings.inst.cfg") user_profile_file = os.path.join(user_storage, urllib.parse.quote_plus(self._name) + "_current_settings.inst.cfg")
if not os.path.exists(user_storage): if not os.path.exists(user_storage):
os.makedirs(user_storage) os.makedirs(user_storage)

View file

@ -3,6 +3,8 @@
import configparser #To read config files. import configparser #To read config files.
import io #To write config files to strings as if they were files. import io #To write config files to strings as if they were files.
from typing import Dict
from typing import List
import UM.VersionUpgrade import UM.VersionUpgrade
from UM.Logger import Logger from UM.Logger import Logger

View file

@ -9,7 +9,6 @@
"manufacturer": "Cartesio bv", "manufacturer": "Cartesio bv",
"category": "Other", "category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"has_materials": true,
"has_machine_materials": true, "has_machine_materials": true,
"has_variants": true, "has_variants": true,
"variants_name": "Nozzle size", "variants_name": "Nozzle size",
@ -31,12 +30,11 @@
"machine_heated_bed": { "default_value": true }, "machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false }, "machine_center_is_zero": { "default_value": false },
"machine_height": { "default_value": 400 }, "machine_height": { "default_value": 400 },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_depth": { "default_value": 270 }, "machine_depth": { "default_value": 270 },
"machine_width": { "default_value": 430 }, "machine_width": { "default_value": 430 },
"machine_name": { "default_value": "Cartesio" }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": { "machine_start_gcode": {
"default_value": "M92 E162\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\nM140 S{material_bed_temperature}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature}\nM104 S120 T1\nM109 S{material_print_temperature} T0\nM104 S21 T1\n\nM117 purging nozzle....\n\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-{retraction_amount} F600\nG92 E0\n\nM117 wiping nozzle....\n\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM117 Printing .....\n\nG1 E1 F100\nG92 E-1\n" "default_value": "M92 E159\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\nM140 S{material_bed_temperature}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature}\nM104 S120 T1\nM109 S{material_print_temperature} T0\nM104 S21 T1\n\nM117 purging nozzle....\n\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-{retraction_amount} F600\nG92 E0\n\nM117 wiping nozzle....\n\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM117 Printing .....\n\nG1 E1 F100\nG92 E-1\n"
}, },
"machine_end_gcode": { "machine_end_gcode": {
"default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\n; -- end of END GCODE --" "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\n; -- end of END GCODE --"

View file

@ -16,10 +16,10 @@
"machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_code": { "machine_extruder_start_code": {
"default_value": "M117 Heating nozzles....\nM104 S190 T0\nG1 X70 Y20 F9000\nM109 S270 T0 ;wait for nozzle to heat up\nT0\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" "default_value": "\n;start extruder_0\nM117 Heating nozzles....\nM104 S190 T0\nG1 X70 Y20 F9000\nM109 S190 T0\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n"
}, },
"machine_extruder_end_code": { "machine_extruder_end_code": {
"default_value": "\nM104 S160 T0\n;end extruder_0\nM117 temp is {material_print_temp}" "default_value": "\nM104 T0 S155\n;end extruder_0\nM117 temp is {material_print_temp}"
} }
} }
} }

View file

@ -16,10 +16,10 @@
"machine_nozzle_offset_x": { "default_value": 24.0 }, "machine_nozzle_offset_x": { "default_value": 24.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_code": { "machine_extruder_start_code": {
"default_value": "\n;start extruder_1\nM117 Heating nozzles....\nM104 S190 T1\nG1 X70 Y20 F9000\nM109 S190 T1 ;wait for nozzle to heat up\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" "default_value": "\n;start extruder_1\nM117 Heating nozzles....\nM104 S190 T1\nG1 X70 Y20 F9000\nM109 S190 T1\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n"
}, },
"machine_extruder_end_code": { "machine_extruder_end_code": {
"default_value": "\nM104 T0 S120\n;end extruder_1\n" "default_value": "\nM104 T1 S155\n;end extruder_1\n"
} }
} }
} }

View file

@ -19,7 +19,7 @@
"default_value": "\n;start extruder_2\nM117 Heating nozzles....\nM104 S190 T2\nG1 X70 Y20 F9000\nM109 S190 T2\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" "default_value": "\n;start extruder_2\nM117 Heating nozzles....\nM104 S190 T2\nG1 X70 Y20 F9000\nM109 S190 T2\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n"
}, },
"machine_extruder_end_code": { "machine_extruder_end_code": {
"default_value": "\nM104 T2 S120\n;end extruder_2\n" "default_value": "\nM104 T2 S155\n;end extruder_2\n"
} }
} }
} }

View file

@ -19,7 +19,7 @@
"default_value": "\n;start extruder_3\nM117 Heating nozzles....\nM104 S190 T3\nG1 X70 Y20 F9000\nM109 S190 T3\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" "default_value": "\n;start extruder_3\nM117 Heating nozzles....\nM104 S190 T3\nG1 X70 Y20 F9000\nM109 S190 T3\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n"
}, },
"machine_extruder_end_code": { "machine_extruder_end_code": {
"default_value": "\nM104 T3 S120\n;end extruder_3\n" "default_value": "\nM104 T3 S155\n;end extruder_3\n"
} }
} }
} }

View file

@ -10,12 +10,25 @@ material = generic_cpe_plus_ultimaker3_AA_0.4
weight = -2 weight = -2
[values] [values]
brim_width = 7
cool_fan_speed_max = 80 cool_fan_speed_max = 80
cool_min_speed = 5
infill_wipe_dist = 0
layer_height = 0.2 layer_height = 0.2
machine_nozzle_cool_down_speed = 0.9 machine_nozzle_cool_down_speed = 0.9
speed_print = 50 machine_nozzle_heat_up_speed = 1.4
prime_tower_size = 17
retraction_combing = off
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_min_travel = =5
retraction_prime_speed = =15
speed_topbottom = =math.ceil(speed_print * 65 / 50) speed_topbottom = =math.ceil(speed_print * 65 / 50)
speed_wall = =math.ceil(speed_print * 50 / 50) speed_wall = =math.ceil(speed_print * 50 / 50)
speed_wall_0 = =math.ceil(speed_wall * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 40 / 50)
support_z_distance = =layer_height
switch_extruder_prime_speed = =15
switch_extruder_retraction_amount = =8
switch_extruder_retraction_speeds = 20
wall_thickness = 1 wall_thickness = 1

View file

@ -10,12 +10,26 @@ material = generic_cpe_plus_ultimaker3_AA_0.4
weight = -1 weight = -1
[values] [values]
brim_width = 7
cool_fan_speed_max = 80 cool_fan_speed_max = 80
cool_min_speed = 6 cool_min_speed = 6
infill_wipe_dist = 0
layer_height = 0.15 layer_height = 0.15
machine_nozzle_cool_down_speed = 0.9 machine_nozzle_cool_down_speed = 0.9
machine_nozzle_heat_up_speed = 1.4
prime_tower_size = 17
retraction_combing = off
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_min_travel = =5
retraction_prime_speed = =15
speed_print = 45 speed_print = 45
speed_topbottom = =math.ceil(speed_print * 55 / 45) speed_topbottom = =math.ceil(speed_print * 55 / 45)
speed_wall = =math.ceil(speed_print * 45 / 45) speed_wall = =math.ceil(speed_print * 45 / 45)
speed_wall_0 = =math.ceil(speed_wall * 35 / 45) speed_wall_0 = =math.ceil(speed_wall * 35 / 45)
support_z_distance = =layer_height
switch_extruder_prime_speed = =15
switch_extruder_retraction_amount = =8
switch_extruder_retraction_speeds = 20
wall_thickness = 1.3

View file

@ -10,6 +10,24 @@ material = generic_cpe_plus_ultimaker3_AA_0.4
weight = 1 weight = 1
[values] [values]
machine_nozzle_heat_up_speed = 1.5 brim_width = 7
cool_min_speed = 5
infill_wipe_dist = 0
layer_height = 0.06
material_print_temperature = =default_material_print_temperature + 2 material_print_temperature = =default_material_print_temperature + 2
prime_tower_size = 17
retraction_combing = off
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_min_travel = =5
retraction_prime_speed = =15
speed_print = 40
speed_topbottom = =math.ceil(speed_print * 30 / 35)
speed_wall = =math.ceil(speed_print * 35 / 40)
speed_wall_0 = =math.ceil(speed_wall * 30 / 35)
support_z_distance = =layer_height
switch_extruder_prime_speed = =15
switch_extruder_retraction_amount = =8
switch_extruder_retraction_speeds = 20
wall_thickness = 1.3

View file

@ -10,8 +10,23 @@ material = generic_cpe_plus_ultimaker3_AA_0.4
weight = 0 weight = 0
[values] [values]
brim_width = 7
cool_min_speed = 7 cool_min_speed = 7
layer_height = 0.1 infill_wipe_dist = 0
machine_nozzle_heat_up_speed = 1.5
material_print_temperature = =default_material_print_temperature + 5 material_print_temperature = =default_material_print_temperature + 5
prime_tower_size = 17
retraction_combing = off
retraction_hop = 0.2
retraction_hop_enabled = False
retraction_min_travel = =5
retraction_prime_speed = =15
speed_print = 40
speed_topbottom = =math.ceil(speed_print * 30 / 35)
speed_wall = =math.ceil(speed_print * 35 / 40)
speed_wall_0 = =math.ceil(speed_wall * 30 / 35)
support_z_distance = =layer_height
switch_extruder_prime_speed = =15
switch_extruder_retraction_amount = =8
switch_extruder_retraction_speeds = 20
wall_thickness = 1.3

View file

@ -10,7 +10,24 @@ material = generic_pc_ultimaker3_AA_0.4
weight = -2 weight = -2
[values] [values]
adhesion_type = raft
cool_fan_full_at_height = =layer_height_0 + layer_height
cool_fan_speed_max = 90 cool_fan_speed_max = 90
cool_min_layer_time_fan_speed_max = 5
cool_min_speed = 6 cool_min_speed = 6
infill_line_width = =round(line_width * 0.4 / 0.35, 2)
infill_overlap_mm = 0.05
layer_height = 0.2 layer_height = 0.2
material_print_temperature_layer_0 = =material_print_temperature + 5
ooze_shield_angle = 40
raft_airgap = 0.25
raft_margin = 15
retraction_count_max = 80
skin_overlap = 30
speed_layer_0 = 25
support_interface_line_distance = 0.4
support_interface_pattern = lines
support_pattern = zigzag
wall_line_width_x = =round(line_width * 0.4 / 0.35, 2)
xy_offset = -0.15

View file

@ -10,8 +10,25 @@ material = generic_pc_ultimaker3_AA_0.4
weight = -1 weight = -1
[values] [values]
adhesion_type = raft
cool_fan_full_at_height = =layer_height_0 + layer_height
cool_fan_speed_max = 85 cool_fan_speed_max = 85
cool_min_layer_time_fan_speed_max = 5
cool_min_speed = 7 cool_min_speed = 7
infill_line_width = =round(line_width * 0.4 / 0.35, 2)
infill_overlap = =0 infill_overlap = =0
infill_overlap_mm = 0.05
layer_height = 0.15 layer_height = 0.15
material_print_temperature_layer_0 = =material_print_temperature + 5
ooze_shield_angle = 40
raft_airgap = 0.25
raft_margin = 15
retraction_count_max = 80
skin_overlap = 30
speed_layer_0 = 25
support_interface_line_distance = 0.4
support_interface_pattern = lines
support_pattern = zigzag
wall_line_width_x = =round(line_width * 0.4 / 0.35, 2)
xy_offset = -0.15

View file

@ -10,6 +10,24 @@ material = generic_pc_ultimaker3_AA_0.4
weight = 1 weight = 1
[values] [values]
adhesion_type = raft
cool_fan_full_at_height = =layer_height_0 + layer_height
cool_min_layer_time_fan_speed_max = 5
cool_min_speed = 8 cool_min_speed = 8
infill_line_width = =round(line_width * 0.4 / 0.35, 2)
infill_overlap_mm = 0.05
layer_height = 0.06
material_print_temperature = =default_material_print_temperature - 10 material_print_temperature = =default_material_print_temperature - 10
material_print_temperature_layer_0 = =material_print_temperature + 5
ooze_shield_angle = 40
raft_airgap = 0.25
raft_margin = 15
retraction_count_max = 80
skin_overlap = 30
speed_layer_0 = 25
support_interface_line_distance = 0.4
support_interface_pattern = lines
support_pattern = zigzag
wall_line_width_x = =round(line_width * 0.4 / 0.35, 2)
xy_offset = -0.15

View file

@ -10,6 +10,23 @@ material = generic_pc_ultimaker3_AA_0.4
weight = 0 weight = 0
[values] [values]
layer_height = 0.1 adhesion_type = raft
cool_fan_full_at_height = =layer_height_0 + layer_height
cool_min_layer_time_fan_speed_max = 5
cool_min_speed = 5
infill_line_width = =round(line_width * 0.4 / 0.35, 2)
infill_overlap_mm = 0.05
material_print_temperature = =default_material_print_temperature material_print_temperature = =default_material_print_temperature
material_print_temperature_layer_0 = =material_print_temperature + 5
ooze_shield_angle = 40
raft_airgap = 0.25
raft_margin = 15
retraction_count_max = 80
skin_overlap = 30
speed_layer_0 = 25
support_interface_line_distance = 0.4
support_interface_pattern = lines
support_pattern = zigzag
wall_line_width_x = =round(line_width * 0.4 / 0.35, 2)
xy_offset = -0.15

View file

@ -10,5 +10,31 @@ material = generic_tpu_ultimaker3_AA_0.4
weight = -2 weight = -2
[values] [values]
brim_width = 8.75
cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
gradual_infill_step_height = =5 * layer_height
gradual_infill_steps = 4
infill_line_width = =round(line_width * 0.38 / 0.38, 2)
infill_pattern = tetrahedral
infill_sparse_density = 96
layer_height = 0.2 layer_height = 0.2
line_width = =machine_nozzle_size * 0.95
material_flow = 106
material_print_temperature_layer_0 = =default_material_print_temperature + 2
retraction_count_max = 12
retraction_extra_prime_amount = 0.8
skin_overlap = 15
speed_equalize_flow_enabled = True
speed_layer_0 = 18
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 300
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
support_bottom_distance = =support_z_distance / 2
top_bottom_thickness = 0.7
wall_line_width_x = =line_width
wall_thickness = 0.76

View file

@ -10,6 +10,32 @@ material = generic_tpu_ultimaker3_AA_0.4
weight = -1 weight = -1
[values] [values]
brim_width = 8.75
cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
gradual_infill_step_height = =5 * layer_height
gradual_infill_steps = 4
infill_line_width = =round(line_width * 0.38 / 0.38, 2)
infill_pattern = tetrahedral
infill_sparse_density = 96
layer_height = 0.15 layer_height = 0.15
line_width = =machine_nozzle_size * 0.95
material_flow = 106
material_print_temperature_layer_0 = =default_material_print_temperature + 2
retraction_amount = 7 retraction_amount = 7
retraction_count_max = 12
retraction_extra_prime_amount = 0.8
skin_overlap = 15
speed_equalize_flow_enabled = True
speed_layer_0 = 18
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 300
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
support_bottom_distance = =support_z_distance / 2
top_bottom_thickness = 0.7
wall_line_width_x = =line_width
wall_thickness = 0.76

View file

@ -10,7 +10,32 @@ material = generic_tpu_ultimaker3_AA_0.4
weight = 0 weight = 0
[values] [values]
brim_width = 8.75
cool_fan_speed_max = 100
cool_min_layer_time_fan_speed_max = 6
gradual_infill_step_height = =5 * layer_height
gradual_infill_steps = 4
infill_line_width = =round(line_width * 0.38 / 0.38, 2)
infill_pattern = tetrahedral
infill_sparse_density = 96
line_width = =machine_nozzle_size * 0.95
material_flow = 106
material_initial_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 10
material_print_temperature = =default_material_print_temperature material_print_temperature = =default_material_print_temperature
material_print_temperature_layer_0 = =default_material_print_temperature material_print_temperature_layer_0 = =default_material_print_temperature
retraction_count_max = 12
retraction_extra_prime_amount = 0.8
skin_overlap = 15
speed_equalize_flow_enabled = True
speed_layer_0 = 18
speed_print = 25
speed_topbottom = =math.ceil(speed_print * 25 / 25)
speed_travel = 300
speed_wall = =math.ceil(speed_print * 25 / 25)
speed_wall_0 = =math.ceil(speed_wall * 25 / 25)
support_angle = 50
support_bottom_distance = =support_z_distance / 2
top_bottom_thickness = 0.7
wall_line_width_x = =line_width
wall_thickness = 0.76

View file

@ -11,6 +11,9 @@ type = variant
machine_nozzle_size = 0.25 machine_nozzle_size = 0.25
machine_nozzle_tip_outer_diameter = 1.05 machine_nozzle_tip_outer_diameter = 1.05
infill_line_width = 0.3
wall_thickness = 1
wall_0_inset = -0.05 wall_0_inset = -0.05
fill_perimeter_gaps = nowhere fill_perimeter_gaps = nowhere
travel_compensate_overlapping_walls_enabled = travel_compensate_overlapping_walls_enabled =
@ -43,6 +46,7 @@ speed_support_interface = =round(speed_topbottom)
retraction_combing = off retraction_combing = off
retraction_hop_enabled = true retraction_hop_enabled = true
retraction_hop = 1
support_z_distance = 0 support_z_distance = 0
support_xy_distance = 0.5 support_xy_distance = 0.5

View file

@ -12,6 +12,9 @@ type = variant
machine_nozzle_size = 0.4 machine_nozzle_size = 0.4
machine_nozzle_tip_outer_diameter = 0.8 machine_nozzle_tip_outer_diameter = 0.8
infill_line_width = 0.5
wall_thickness = 1.2
wall_0_inset = -0.05 wall_0_inset = -0.05
fill_perimeter_gaps = nowhere fill_perimeter_gaps = nowhere
travel_compensate_overlapping_walls_enabled = travel_compensate_overlapping_walls_enabled =
@ -20,7 +23,6 @@ infill_sparse_density = 25
infill_overlap = -50 infill_overlap = -50
skin_overlap = -40 skin_overlap = -40
material_print_temperature_layer_0 = =round(material_print_temperature) material_print_temperature_layer_0 = =round(material_print_temperature)
material_initial_print_temperature = =round(material_print_temperature) material_initial_print_temperature = =round(material_print_temperature)
material_diameter = 1.75 material_diameter = 1.75
@ -44,6 +46,7 @@ speed_support_interface = =round(speed_topbottom)
retraction_combing = off retraction_combing = off
retraction_hop_enabled = true retraction_hop_enabled = true
retraction_hop = 1
support_z_distance = 0 support_z_distance = 0
support_xy_distance = 0.5 support_xy_distance = 0.5

View file

@ -11,18 +11,22 @@ type = variant
machine_nozzle_size = 0.8 machine_nozzle_size = 0.8
machine_nozzle_tip_outer_diameter = 1.05 machine_nozzle_tip_outer_diameter = 1.05
infill_line_width = 0.9
wall_thickness = 2.4
top_bottom_thickness = =0.8 if layer_height < 0.3 else (layer_height * 3)
wall_0_inset = -0.05 wall_0_inset = -0.05
fill_perimeter_gaps = nowhere fill_perimeter_gaps = nowhere
travel_compensate_overlapping_walls_enabled = travel_compensate_overlapping_walls_enabled =
infill_sparse_density = 25 infill_sparse_density = 15
infill_overlap = -50 infill_overlap = -50
skin_overlap = -40 skin_overlap = -40
material_print_temperature_layer_0 = =round(material_print_temperature) material_print_temperature_layer_0 = =round(material_print_temperature)
material_initial_print_temperature = =round(material_print_temperature) material_initial_print_temperature = =round(material_print_temperature)
material_diameter = 1.75 material_diameter = 1.75
retraction_amount = 2 retraction_amount = 1.5
retraction_speed = 40 retraction_speed = 40
retraction_prime_speed = =round(retraction_speed / 4) retraction_prime_speed = =round(retraction_speed / 4)
retraction_min_travel = =round(line_width * 10) retraction_min_travel = =round(line_width * 10)
@ -43,6 +47,7 @@ speed_support_interface = =round(speed_topbottom)
retraction_combing = off retraction_combing = off
retraction_hop_enabled = true retraction_hop_enabled = true
retraction_hop = 1
support_z_distance = 0 support_z_distance = 0
support_xy_distance = 0.5 support_xy_distance = 0.5