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.Scene.Selection import Selection
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.Message import Message
from UM.i18n import i18nCatalog
@ -148,11 +150,11 @@ class CuraApplication(QtApplication):
UM.VersionUpgradeManager.VersionUpgradeManager.getInstance().setCurrentVersions(
{
("quality", UM.Settings.InstanceContainer.InstanceContainer.Version): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"),
("machine_stack", UM.Settings.ContainerStack.ContainerStack.Version): (self.ResourceTypes.MachineStack, "application/x-uranium-containerstack"),
("extruder_train", UM.Settings.ContainerStack.ContainerStack.Version): (self.ResourceTypes.ExtruderStack, "application/x-uranium-extruderstack"),
("quality", InstanceContainer.Version): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"),
("machine_stack", ContainerStack.Version): (self.ResourceTypes.MachineStack, "application/x-uranium-containerstack"),
("extruder_train", ContainerStack.Version): (self.ResourceTypes.ExtruderStack, "application/x-uranium-extruderstack"),
("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 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 PyQt5.QtWidgets import QMessageBox
from UM.PluginRegistry import PluginRegistry
from UM.Platform import Platform
from UM.SaveFile import SaveFile
from UM.Platform import Platform
from UM.MimeTypeDatabase import MimeTypeDatabase
from UM.Logger import Logger
@ -307,18 +307,20 @@ class ContainerManager(QObject):
#
# \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_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
# explaining the status.
# The status code can be one of "error", "cancelled", "success"
@pyqtSlot(str, str, QUrl, result = "QVariantMap")
def exportContainer(self, container_id, file_type, file_url):
if not container_id or not file_type or not 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_or_string:
return { "status": "error", "message": "Invalid arguments"}
if isinstance(file_url, QUrl):
file_url = file_url.toLocalFile()
if isinstance(file_url_or_string, QUrl):
file_url = file_url_or_string.toLocalFile()
else:
file_url = file_url_or_string
if not file_url:
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
# containing a message for the user
@pyqtSlot(QUrl, result = "QVariantMap")
def importContainer(self, file_url):
if not file_url:
def importContainer(self, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]:
if not file_url_or_string:
return { "status": "error", "message": "Invalid path"}
if isinstance(file_url, QUrl):
file_url = file_url.toLocalFile()
if isinstance(file_url_or_string, QUrl):
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):
return { "status": "error", "message": "Invalid path" }
@ -438,7 +442,7 @@ class ContainerManager(QObject):
## Clear the top-most (user) containers of the active stacks.
@pyqtSlot()
def clearUserContainers(self):
def clearUserContainers(self) -> None:
self._machine_manager.blurSettings.emit()
send_emits_containers = []
@ -668,7 +672,7 @@ class ContainerManager(QObject):
return new_change_instances
@pyqtSlot(str, result = str)
def duplicateMaterial(self, material_id):
def duplicateMaterial(self, material_id: str) -> str:
containers = self._container_registry.findInstanceContainers(id=material_id)
if not containers:
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.
@classmethod
def getInstance(cls):
def getInstance(cls) -> "ContainerManager":
# Note: Explicit use of class name to prevent issues with inheritance.
if ContainerManager.__instance is None:
ContainerManager.__instance = cls()
@ -717,7 +721,7 @@ class ContainerManager(QObject):
if clear_settings:
merge.clear()
def _updateContainerNameFilters(self):
def _updateContainerNameFilters(self) -> None:
self._container_name_filters = {}
for plugin_id, container_type in self._container_registry.getContainerTypes():
# 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 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.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.
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.
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)
@ -41,7 +41,7 @@ class MachineNameValidator(QObject):
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).
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.
filename_max_length = 255 #Assume it's Windows on NTFS.
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.InstanceContainer import InstanceContainer
from UM.Settings.ContainerRegistry import ContainerRegistry
import UM.Logger
from UM.Logger import Logger
from UM.Application import Application
@ -99,7 +99,7 @@ class SettingOverrideDecorator(SceneNodeDecorator):
Application.getInstance().getBackend().needsSlicing()
Application.getInstance().getBackend().tickle()
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:
self._stack.setNextStack(Application.getInstance().getGlobalContainerStack())

View file

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

View file

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

View file

@ -99,6 +99,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
self._material_ids = [""] * self._num_extruders
self._hotend_ids = [""] * self._num_extruders
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.setName(key)
@ -262,6 +263,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
Logger.log("i", "Pre-heating bed to %i degrees.", temperature)
put_request = QNetworkRequest(url)
put_request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
self._processing_preheat_requests = False
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.preheatBedRemainingTimeChanged.emit()
@ -532,6 +534,30 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
self._updateHeadPosition(head_x, head_y, head_z)
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):
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()
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]:
pass # Request was successful!
else:

View file

@ -3,7 +3,7 @@
import UM.VersionUpgrade #To indicate that a file is of incorrect format.
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 io #To write config files to strings as if they were files.
@ -107,7 +107,7 @@ class MachineInstance:
user_profile["values"] = {}
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")
if not os.path.exists(user_storage):
os.makedirs(user_storage)

View file

@ -3,6 +3,8 @@
import configparser #To read config 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
from UM.Logger import Logger

View file

@ -9,7 +9,6 @@
"manufacturer": "Cartesio bv",
"category": "Other",
"file_formats": "text/x-gcode",
"has_materials": true,
"has_machine_materials": true,
"has_variants": true,
"variants_name": "Nozzle size",
@ -31,12 +30,11 @@
"machine_heated_bed": { "default_value": true },
"machine_center_is_zero": { "default_value": false },
"machine_height": { "default_value": 400 },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_depth": { "default_value": 270 },
"machine_width": { "default_value": 430 },
"machine_name": { "default_value": "Cartesio" },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"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": {
"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_y": { "default_value": 0.0 },
"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": {
"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_y": { "default_value": 0.0 },
"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": {
"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"
},
"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"
},
"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
[values]
brim_width = 7
cool_fan_speed_max = 80
cool_min_speed = 5
infill_wipe_dist = 0
layer_height = 0.2
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_wall = =math.ceil(speed_print * 50 / 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

View file

@ -10,12 +10,26 @@ material = generic_cpe_plus_ultimaker3_AA_0.4
weight = -1
[values]
brim_width = 7
cool_fan_speed_max = 80
cool_min_speed = 6
infill_wipe_dist = 0
layer_height = 0.15
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_topbottom = =math.ceil(speed_print * 55 / 45)
speed_wall = =math.ceil(speed_print * 45 / 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
[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
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
[values]
brim_width = 7
cool_min_speed = 7
layer_height = 0.1
machine_nozzle_heat_up_speed = 1.5
infill_wipe_dist = 0
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
[values]
adhesion_type = raft
cool_fan_full_at_height = =layer_height_0 + layer_height
cool_fan_speed_max = 90
cool_min_layer_time_fan_speed_max = 5
cool_min_speed = 6
infill_line_width = =round(line_width * 0.4 / 0.35, 2)
infill_overlap_mm = 0.05
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
[values]
adhesion_type = raft
cool_fan_full_at_height = =layer_height_0 + layer_height
cool_fan_speed_max = 85
cool_min_layer_time_fan_speed_max = 5
cool_min_speed = 7
infill_line_width = =round(line_width * 0.4 / 0.35, 2)
infill_overlap = =0
infill_overlap_mm = 0.05
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
[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
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_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
[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_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
[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
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
[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
line_width = =machine_nozzle_size * 0.95
material_flow = 106
material_print_temperature_layer_0 = =default_material_print_temperature + 2
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
[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_print_temperature = =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_tip_outer_diameter = 1.05
infill_line_width = 0.3
wall_thickness = 1
wall_0_inset = -0.05
fill_perimeter_gaps = nowhere
travel_compensate_overlapping_walls_enabled =
@ -43,6 +46,7 @@ speed_support_interface = =round(speed_topbottom)
retraction_combing = off
retraction_hop_enabled = true
retraction_hop = 1
support_z_distance = 0
support_xy_distance = 0.5

View file

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

View file

@ -11,18 +11,22 @@ type = variant
machine_nozzle_size = 0.8
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
fill_perimeter_gaps = nowhere
travel_compensate_overlapping_walls_enabled =
infill_sparse_density = 25
infill_sparse_density = 15
infill_overlap = -50
skin_overlap = -40
material_print_temperature_layer_0 = =round(material_print_temperature)
material_initial_print_temperature = =round(material_print_temperature)
material_diameter = 1.75
retraction_amount = 2
retraction_amount = 1.5
retraction_speed = 40
retraction_prime_speed = =round(retraction_speed / 4)
retraction_min_travel = =round(line_width * 10)
@ -43,6 +47,7 @@ speed_support_interface = =round(speed_topbottom)
retraction_combing = off
retraction_hop_enabled = true
retraction_hop = 1
support_z_distance = 0
support_xy_distance = 0.5