edgeWidth = calculateEdgeWidth(setting)
return 10.0 / edgeWidth
+def calcBottomLayerFlowRateRatio(setting):
+ bottomThickness = float(profile.getProfileSetting('bottom_thickness'))
+ layerThickness = float(profile.getProfileSetting('layer_height'))
+ if bottomThickness < layerThickness:
+ return 1.0
+ return bottomThickness / layerThickness
+
+def calcExtraBottomThickness(setting):
+ bottomThickness = float(profile.getProfileSetting('bottom_thickness'))
+ layerThickness = float(profile.getProfileSetting('layer_height'))
+ if bottomThickness < layerThickness:
+ return 0.0
+ return bottomThickness - layerThickness
+
+def calcLayerSkip(setting):
+ bottomThickness = float(profile.getProfileSetting('bottom_thickness'))
+ layerThickness = float(profile.getProfileSetting('layer_height'))
+ if bottomThickness < layerThickness:
+ return 0
+ return int(math.ceil((bottomThickness - layerThickness) / layerThickness + 0.0001) - 1)
+
def getProfileInformation():
return {
'carve': {
'Extra_Decimal_Places_float': DEFSET,
'Import_Coarseness_ratio': DEFSET,
'Layer_Height_mm': storedSetting("layer_height"),
- 'Layers_From_index': DEFSET,
+ 'Layers_From_index': calcLayerSkip,
'Layers_To_index': DEFSET,
'Correct_Mesh': DEFSET,
'Unproven_Mesh': DEFSET,
},'bottom': {
'Activate_Bottom': DEFSET,
'Additional_Height_over_Layer_Thickness_ratio': DEFSET,
- 'Altitude_mm': DEFSET,
+ 'Altitude_mm': calcExtraBottomThickness,
'SVG_Viewer': DEFSET,
},'preface': {
'Meta': DEFSET,
'Perimeter_Feed_Rate_Multiplier_ratio': DEFSET,
'Perimeter_Flow_Rate_Multiplier_ratio': DEFSET,
'Travel_Feed_Rate_mm/s': storedSetting("travel_speed"),
+ 'Bottom_layer_flow_rate_ratio': calcBottomLayerFlowRateRatio,
},'temperature': {
'Activate_Temperature': DEFSET,#ifSettingAboveZero('print_temperature'),
'Cooling_Rate_Celcius/second': DEFSET,
settings.LabelSeparator().getFromRepository(self)
self.travelFeedRatePerSecond = settings.FloatSpin().getFromValue( 2.0, 'Travel Feed Rate (mm/s):', self, 350.0, 250.0 )
self.executeTitle = 'Speed'
+
+ self.bottomLayerFlowRateMultiplier = settings.FloatSpin().getFromValue(0.0, 'Bottom layer flow rate (ratio):', self, 10.0, 1.0)
def execute(self):
"Speed button has been clicked."
flowRate *= ((self.repository.objectFirstLayerFlowRatePerimeterMultiplier.value * (self.repository.objectFirstLayersLayerAmount.value - self.layerIndex)) + self.layerIndex) / self.repository.objectFirstLayersLayerAmount.value
else:
flowRate *= ((self.repository.objectFirstLayerFlowRateInfillMultiplier.value * (self.repository.objectFirstLayersLayerAmount.value - self.layerIndex)) + self.layerIndex) / self.repository.objectFirstLayersLayerAmount.value
+ if self.layerIndex == 0:
+ flowRate *= self.repository.bottomLayerFlowRateMultiplier.value
if flowRate != self.oldFlowRate:
self.distanceFeedRate.addLine('M108 S' + euclidean.getFourSignificantFigures(flowRate))
self.oldFlowRate = flowRate
validators.validFloat(c, 0.0)
c = configBase.SettingRow(right, "Enable cooling fan", 'fan_enabled', True, 'Enable the cooling fan during the print. The extra cooling from the cooling fan is essensial during faster prints.')
+ configBase.TitleRow(right, "Accuracy")
+ c = configBase.SettingRow(right, "Initial layer thickness (mm)", 'bottom_thickness', '0.0', 'Layer thickness of the bottom layer. A thicker bottom layer makes sticking to the bed easier. Set to 0.0 to have the bottom layer thickness the same as the other layers.')
+ validators.validFloat(c, 0.0)
+
nb.AddPage(alterationPanel.alterationPanel(nb), "Start/End-GCode")
# load and slice buttons.
layerThickness = 0.0\r
filamentRadius = float(profile.getProfileSetting('filament_diameter')) / 2\r
filamentArea = math.pi * filamentRadius * filamentRadius\r
- lineWidth = float(profile.getProfileSetting('nozzle_size')) / 2\r
+ lineWidth = float(profile.getProfileSetting('nozzle_size')) / 2 / 10\r
\r
curLayerNum = 0\r
for layer in self.parent.gcode.layerList:\r
+ curLayerZ = layer[0].list[1].z\r
+ layerThickness = curLayerZ - prevLayerZ\r
+ prevLayerZ = layer[-1].list[-1].z\r
for path in layer:\r
c = 1.0\r
if curLayerNum != self.parent.layerSpin.GetValue():\r
self.temp = float(re.search("[0-9\.]*", line.split('T:')[1]).group(0))\r
wx.CallAfter(self.UpdateProgress)\r
if self.printIdx == None:\r
- if line == '': #When we have a communication "timeout" and we're not sending gcode read the temperature.\r
+ if line == '': #When we have a communication "timeout" and we're not sending gcode, then read the temperature.\r
self.machineCom.sendCommand("M105")\r
else:\r
if line.startswith("ok"):\r
put('raft_margin', '5')
put('raft_base_material_amount', '100')
put('raft_interface_material_amount', '100')
+ put('bottom_thickness', '0.0')
if self.printSupport.GetValue():
put('support', 'Exterior Only')
put('layer_height', '0.1')
put('fill_density', '30')
put('bottom_layer_speed', '15')
+ put('bottom_thickness', '0.2')
elif self.printTypeJoris.GetValue():
put('wall_thickness', nozzle_size * 1.5)
put('layer_height', '0.2')
put('enable_raft', 'True')
put('skirt_line_count', '0')
put('fan_layer', '1')
+ put('bottom_thickness', '0.0')
#Create a progress panel and add it to the window. The progress panel will start the Skein operation.
spp = sliceProgessPanel.sliceProgessPanel(self, self, self.filename)
'raft_margin': '5',\r
'raft_base_material_amount': '100',\r
'raft_interface_material_amount': '100',\r
+ 'bottom_thickness': '0.0',\r
}\r
preferencesDefaultSettings = {\r
'wizardDone': 'False',\r
'--solid-layers', str(profile.calculateSolidLayerCount()),
'--fill-density', str(float(profile.getProfileSetting('fill_density'))/100),
'--fill-angle', '45',
- '--fill-pattern', 'rectilinear',
+ '--fill-pattern', 'rectilinear', #rectilinear line concentric hilbertcurve archimedeanchords octagramspiral
'--solid-fill-pattern', 'rectilinear',
'--start-gcode', profile.getAlterationFilePath('start.gcode'),
'--end-gcode', profile.getAlterationFilePath('end.gcode'),