Making it possible to set a bed surface and have settings for bed temperature / material
This commit is contained in:
parent
2266428005
commit
fa86c58a7c
18 changed files with 429 additions and 43 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue