Changed layer height warning to use nozzle size. Added max volume extrusion per second check for speed.

master
daid 2012-03-19 11:45:40 +01:00
parent 51001d2381
commit 4c176dc728
3 changed files with 37 additions and 4 deletions

View File

@ -84,7 +84,7 @@ class mainWindow(configBase.configWindowBase):
configBase.TitleRow(left, "Accuracy") configBase.TitleRow(left, "Accuracy")
c = configBase.SettingRow(left, "Layer height (mm)", 'layer_height', '0.2', 'Layer height in millimeters.\n0.2 is a good value for quick prints.\n0.1 gives high quality prints.') c = configBase.SettingRow(left, "Layer height (mm)", 'layer_height', '0.2', 'Layer height in millimeters.\n0.2 is a good value for quick prints.\n0.1 gives high quality prints.')
validators.validFloat(c, 0.0) validators.validFloat(c, 0.0)
validators.warningAbove(c, 0.31, "Thicker layers then 0.3mm usually give bad results and are not recommended.") validators.warningAbove(c, lambda : (float(profile.getProfileSetting('nozzle_size')) * 80 / 100), "Thicker layers then %.2fmm (80%% nozzle size) usually give bad results and are not recommended.")
c = configBase.SettingRow(left, "Wall thickness (mm)", 'wall_thickness', '0.8', 'Thickness of the walls.\nThis is used in combination with the nozzle size to define the number\nof perimeter lines and the thickness of those perimeter lines.') c = configBase.SettingRow(left, "Wall thickness (mm)", 'wall_thickness', '0.8', 'Thickness of the walls.\nThis is used in combination with the nozzle size to define the number\nof perimeter lines and the thickness of those perimeter lines.')
validators.validFloat(c, 0.0) validators.validFloat(c, 0.0)
validators.wallThicknessValidator(c) validators.wallThicknessValidator(c)
@ -105,6 +105,7 @@ class mainWindow(configBase.configWindowBase):
c = configBase.SettingRow(right, "Print speed (mm/s)", 'print_speed', '50', 'Speed at which printing happens. A well adjusted Ultimaker can reach 150mm/s, but for good quality prints you want to print slower. Printing speed depends on a lot of factors. So you will be experimenting with optimal settings for this.') c = configBase.SettingRow(right, "Print speed (mm/s)", 'print_speed', '50', 'Speed at which printing happens. A well adjusted Ultimaker can reach 150mm/s, but for good quality prints you want to print slower. Printing speed depends on a lot of factors. So you will be experimenting with optimal settings for this.')
validators.validFloat(c, 1.0) validators.validFloat(c, 1.0)
validators.warningAbove(c, 150.0, "It is highly unlikely that your machine can achieve a printing speed above 150mm/s") validators.warningAbove(c, 150.0, "It is highly unlikely that your machine can achieve a printing speed above 150mm/s")
validators.printSpeedValidator(c)
configBase.TitleRow(right, "Temperature") configBase.TitleRow(right, "Temperature")
c = configBase.SettingRow(right, "Printing temperature", 'print_temperature', '0', 'Temperature used for printing. Set at 0 to pre-heat yourself') c = configBase.SettingRow(right, "Printing temperature", 'print_temperature', '0', 'Temperature used for printing. Set at 0 to pre-heat yourself')

View File

@ -343,12 +343,13 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
for i in xrange(0, len(path['list'])-1): for i in xrange(0, len(path['list'])-1):
v0 = path['list'][i] v0 = path['list'][i]
v1 = path['list'][i+1] v1 = path['list'][i+1]
# Calculate line width from ePerDistance (needs layer thickness and filament diameter)
dist = (v0 - v1).vsize() dist = (v0 - v1).vsize()
if dist > 0 and layerThickness > 0: if dist > 0 and layerThickness > 0:
extrusionMMperDist = (v1.e - v0.e) / (v0 - v1).vsize() extrusionMMperDist = (v1.e - v0.e) / (v0 - v1).vsize()
lineWidth = extrusionMMperDist * filamentArea / layerThickness / 2 lineWidth = extrusionMMperDist * filamentArea / layerThickness / 2
#TODO: Calculate line width from ePerDistance (needs layer thickness, steps_per_E and filament diameter)
normal = (v0 - v1).cross(util3d.Vector3(0,0,1)) normal = (v0 - v1).cross(util3d.Vector3(0,0,1))
normal.normalize() normal.normalize()
v2 = v0 + normal * lineWidth v2 = v0 + normal * lineWidth

View File

@ -1,6 +1,9 @@
from __future__ import absolute_import from __future__ import absolute_import
import __init__ import __init__
import types
import math
from newui import profile from newui import profile
SUCCESS = 0 SUCCESS = 0
@ -53,8 +56,12 @@ class warningAbove():
def validate(self): def validate(self):
try: try:
f = float(self.setting.GetValue()) f = float(self.setting.GetValue())
if f >= self.minValueForWarning: if isinstance(self.minValueForWarning, types.FunctionType):
return WARNING, self.warningMessage if f >= self.minValueForWarning():
return WARNING, self.warningMessage % (self.minValueForWarning())
else:
if f >= self.minValueForWarning:
return WARNING, self.warningMessage
return SUCCESS, '' return SUCCESS, ''
except ValueError: except ValueError:
#We already have an error by the int/float validator in this case. #We already have an error by the int/float validator in this case.
@ -86,3 +93,27 @@ class wallThicknessValidator():
#We already have an error by the int/float validator in this case. #We already have an error by the int/float validator in this case.
return SUCCESS, '' return SUCCESS, ''
class printSpeedValidator():
def __init__(self, setting):
self.setting = setting
self.setting.validators.append(self)
def validate(self):
try:
nozzleSize = float(profile.getProfileSetting('nozzle_size'))
layerHeight = float(profile.getProfileSetting('layer_height'))
printSpeed = float(profile.getProfileSetting('print_speed'))
printVolumePerMM = layerHeight * nozzleSize
printVolumePerSecond = printVolumePerMM * printSpeed
#Using 10mm3 per second with a 0.4mm nozzle (normal max according to Joergen Geerds)
maxPrintVolumePerSecond = 10 / (math.pi*(0.2*0.2)) * (math.pi*(nozzleSize/2*nozzleSize/2))
if printVolumePerSecond > maxPrintVolumePerSecond:
return WARNING, 'You are trying to print more then %.1fmm^3 of filament per second. This might cause filament slipping.' % (maxPrintVolumePerSecond)
return SUCCESS, ''
except ValueError:
#We already have an error by the int/float validator in this case.
return SUCCESS, ''