Making it possible to set a bed surface and have settings for bed temperature / material

This commit is contained in:
Lars Brubaker 2022-01-17 11:33:22 -08:00
parent 2266428005
commit fa86c58a7c
18 changed files with 429 additions and 43 deletions

View file

@ -74,7 +74,7 @@ namespace MatterHackers.MatterControl.ActionBar
{
var widget = new IgnoredPopupWidget()
{
Width = 300 * GuiWidget.DeviceScale,
Width = 340 * GuiWidget.DeviceScale,
HAnchor = HAnchor.Absolute,
VAnchor = VAnchor.Fit,
Padding = new BorderDouble(12, 0),
@ -88,9 +88,9 @@ namespace MatterHackers.MatterControl.ActionBar
};
widget.AddChild(container);
GuiWidget hotendRow;
GuiWidget heatedBedSettingItem;
container.AddChild(hotendRow = new SettingsItem(
container.AddChild(heatedBedSettingItem = new SettingsItem(
"Heated Bed".Localize(),
menuTheme,
new SettingsItem.ToggleSwitchConfig()
@ -98,13 +98,13 @@ namespace MatterHackers.MatterControl.ActionBar
Checked = printer.Connection.TargetBedTemperature > 0,
ToggleAction = (itemChecked) =>
{
var goalTemp = itemChecked ? printer.Settings.GetValue<double>(SettingsKey.bed_temperature) : 0;
var goalTemp = itemChecked ? printer.Settings.Helpers.ActiveBedTemperature : 0;
printer.Connection.TargetBedTemperature = goalTemp;
}
},
enforceGutter: false));
var toggleWidget = hotendRow.Children.Where(o => o is ICheckbox).FirstOrDefault();
var toggleWidget = heatedBedSettingItem.Children.Where(o => o is ICheckbox).FirstOrDefault();
toggleWidget.Name = "Toggle Heater";
heatToggle = toggleWidget as ICheckbox;
@ -112,14 +112,6 @@ namespace MatterHackers.MatterControl.ActionBar
int tabIndex = 0;
var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All);
var settingsData = PrinterSettings.SettingsData[SettingsKey.bed_temperature];
var temperatureRow = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields);
container.AddChild(temperatureRow);
// Add the temperature row to the always enabled list ensuring the field can be set when disconnected
alwaysEnabled.Add(temperatureRow);
alwaysEnabled.Add(hotendRow);
// add in the temp graph
var graph = new DataViewGraph()
{
@ -127,20 +119,74 @@ namespace MatterHackers.MatterControl.ActionBar
MinValue = 0,
ShowGoal = true,
GoalColor = menuTheme.PrimaryAccentColor,
GoalValue = printer.Settings.GetValue<double>(SettingsKey.bed_temperature),
GoalValue = printer.Settings.Helpers.ActiveBedTemperature,
MaxValue = 150, // could come from some profile value in the future
Width = widget.Width - 20 * GuiWidget.DeviceScale,
Height = 35 * GuiWidget.DeviceScale, // this works better if it is a common multiple of the Width
Margin = new BorderDouble(0, 5, 0, 0),
};
var temperatureRow = new FlowLayoutWidget()
{
HAnchor = HAnchor.Stretch
};
var bedSettingBeingEdited = printer.Settings.Helpers.ActiveBedTemperatureSetting;
void SettingChanged(object s, StringEventArgs stringEvent)
{
if (stringEvent.Data == SettingsKey.bed_temperature
|| stringEvent.Data == bedSettingBeingEdited)
{
graph.GoalValue = printer.Settings.Helpers.ActiveBedTemperature;
}
else if (stringEvent.Data == SettingsKey.bed_surface)
{
AddTemperatureControlForBedSurface();
graph.GoalValue = printer.Settings.Helpers.ActiveBedTemperature;
}
}
void AddTemperatureControlForBedSurface()
{
temperatureRow.CloseChildren();
bedSettingBeingEdited = printer.Settings.Helpers.ActiveBedTemperatureSetting;
var settingsData = PrinterSettings.SettingsData[bedSettingBeingEdited];
var bedTemperature = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields);
var settingsRow = bedTemperature.DescendantsAndSelf<SliceSettingsRow>().FirstOrDefault();
// make sure we are not still connected when changing settings
printer.Settings.SettingChanged -= SettingChanged;
// connect it
printer.Settings.SettingChanged += SettingChanged;
// and make sure we dispose when done
printer.Disposed += (s, e) => printer.Settings.SettingChanged -= SettingChanged;
temperatureRow.AddChild(bedTemperature);
}
AddTemperatureControlForBedSurface();
container.AddChild(temperatureRow);
// Add the temperature row to the always enabled list ensuring the field can be set when disconnected
alwaysEnabled.Add(temperatureRow);
alwaysEnabled.Add(heatedBedSettingItem);
var bedSurfaceChanger = CreateBedSurfaceSelector(printer, menuTheme, ref tabIndex);
if (bedSurfaceChanger != null)
{
container.AddChild(bedSurfaceChanger);
alwaysEnabled.Add(bedSurfaceChanger);
}
runningInterval = UiThread.SetInterval(() =>
{
graph.AddData(this.ActualTemperature);
}, 1);
var settingsRow = temperatureRow.DescendantsAndSelf<SliceSettingsRow>().FirstOrDefault();
void Printer_SettingChanged(object s, StringEventArgs stringEvent)
{
if (stringEvent != null)
@ -156,14 +202,6 @@ namespace MatterHackers.MatterControl.ActionBar
userInitiated: false);
}
}
if (stringEvent.Data == SettingsKey.bed_temperature)
{
var temp = printer.Settings.GetValue<double>(SettingsKey.bed_temperature);
graph.GoalValue = temp;
settingsRow.UpdateStyle();
}
}
}
@ -175,6 +213,21 @@ namespace MatterHackers.MatterControl.ActionBar
return widget;
}
public static GuiWidget CreateBedSurfaceSelector(PrinterConfig printer, ThemeConfig theme, ref int tabIndex)
{
if (!printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed)
|| !printer.Settings.GetValue<bool>(SettingsKey.has_swappable_bed))
{
return null;
}
var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All);
var settingsData = PrinterSettings.SettingsData[SettingsKey.bed_surface];
var surfaceSelector = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, theme, ref tabIndex);
return surfaceSelector;
}
public override void OnClosed(EventArgs e)
{
// Unregister listeners

View file

@ -271,7 +271,7 @@ namespace MatterHackers.MatterControl
bool heatedBed = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed);
double bedTemperature = printer.Settings.GetValue<double>(SettingsKey.bed_temperature);
double bedTemperature = printer.Settings.Helpers.ActiveBedTemperature;
if (heatedBed
&& printer.Connection.IsConnected

View file

@ -143,7 +143,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
// check that the bed temperature at probe time was close enough to the current print bed temp
double requiredLevelingTemp = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed) ?
printer.Settings.GetValue<double>(SettingsKey.bed_temperature)
printer.Settings.Helpers.ActiveBedTemperature
: 0;
// check that the number of points sampled is correct for the solution

View file

@ -189,7 +189,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
// start heating up now so it has more time to heat
var bedTemperature = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed) ?
printer.Settings.GetValue<double>(SettingsKey.bed_temperature)
printer.Settings.Helpers.ActiveBedTemperature
: 0;
if (bedTemperature > 0)
{
@ -207,7 +207,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
double targetHotendTemp = 0;
if (printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed))
{
targetBedTemp = printer.Settings.GetValue<double>(SettingsKey.bed_temperature);
targetBedTemp = printer.Settings.Helpers.ActiveBedTemperature;
}
if (!printer.Settings.Helpers.ProbeBeingUsed)

View file

@ -157,7 +157,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
{
// start heating up the bed as that will be needed next
var bedTemperature = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed) ?
printer.Settings.GetValue<double>(SettingsKey.bed_temperature)
printer.Settings.Helpers.ActiveBedTemperature
: 0;
if (bedTemperature > 0)
{

View file

@ -68,7 +68,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
levelingData.CreationDate = DateTime.Now;
// record the temp the bed was when we measured it (or 0 if no heated bed)
levelingData.BedTemperature = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed) ?
printer.Settings.GetValue<double>(SettingsKey.bed_temperature)
printer.Settings.Helpers.ActiveBedTemperature
: 0;
levelingData.IssuedLevelingTempWarning = false;

View file

@ -98,7 +98,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io
queuedCommands.Add("M82; use absolute distance for extrusion");
bool hasHeatedBed = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed);
double bedTemp = printer.Settings.GetValue<double>(SettingsKey.bed_temperature);
double bedTemp = printer.Settings.Helpers.ActiveBedTemperature;
if (hasHeatedBed && bedTemp > 0)
{
// start heating the bed

View file

@ -66,7 +66,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io
printer.Connection.CanceleRequested += Connection_PrintCanceled;
if (!printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed)
|| printer.Settings.GetValue<double>(SettingsKey.bed_temperature) == 0)
|| printer.Settings.Helpers.ActiveBedTemperature == 0)
{
// If we don't have a bed or we are not going to set the temperature
// do not wait for an M190
@ -311,7 +311,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io
levelingData.CreationDate = DateTime.Now;
// record the temp the bed was when we measured it (or 0 if no heated bed)
levelingData.BedTemperature = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed) ?
printer.Settings.GetValue<double>(SettingsKey.bed_temperature)
printer.Settings.Helpers.ActiveBedTemperature
: 0;
levelingData.IssuedLevelingTempWarning = false;

View file

@ -383,7 +383,9 @@ namespace MatterHackers.MatterControl.PrinterCommunication
}
}
if (stringEvent.Data == SettingsKey.bed_temperature)
if (stringEvent.Data == Printer.Settings.Helpers.ActiveBedTemperatureSetting
|| stringEvent.Data == SettingsKey.bed_temperature
|| stringEvent.Data == SettingsKey.bed_surface)
{
if (this.Printing
&& this.DetailedPrintingState == DetailedPrintingState.HeatingBed)
@ -394,7 +396,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication
double goalTemp = this.TargetBedTemperature;
if (goalTemp > 0)
{
var newGoal = printer.Settings.GetValue<double>(SettingsKey.bed_temperature);
var newGoal = printer.Settings.Helpers.ActiveBedTemperature;
this.TargetBedTemperature = newGoal;
}
}

View file

@ -98,7 +98,7 @@ namespace MatterHackers.MatterControl.PrinterControls
preHeatButton.Click += (s, e) =>
{
// turn on the bed
printer.Connection.TargetBedTemperature = printer.Settings.GetValue<double>(SettingsKey.bed_temperature);
printer.Connection.TargetBedTemperature = printer.Settings.Helpers.ActiveBedTemperature;
for (int extruderIndex = 0; extruderIndex < hotendCount; extruderIndex++)
{
printer.Connection.SetTargetHotendTemperature(extruderIndex, printer.Settings.Helpers.ExtruderTargetTemperature(extruderIndex));

View file

@ -678,7 +678,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
};
AddDefaultIfNotPresent(preStartGCode, "G21", startGCodeLines, "set units to millimeters");
AddDefaultIfNotPresent(preStartGCode, "M107", startGCodeLines, "fan off");
double bed_temperature = settings.GetValue<double>(SettingsKey.bed_temperature);
double bed_temperature = settings.Helpers.ActiveBedTemperature;
if (bed_temperature > 0
&& settings.GetValue<bool>(SettingsKey.has_heated_bed))
{
@ -747,7 +747,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
"; automatic settings after start_gcode"
};
double bed_temperature = settings.GetValue<double>(SettingsKey.bed_temperature);
double bed_temperature = settings.Helpers.ActiveBedTemperature;
if (bed_temperature > 0
&& settings.GetValue<bool>(SettingsKey.has_heated_bed)
&& !startGCode.Contains("M109"))