diff --git a/MatterControl.Printing/Settings/SettingsHelpers.cs b/MatterControl.Printing/Settings/SettingsHelpers.cs index 9319b74cd..481f93bea 100644 --- a/MatterControl.Printing/Settings/SettingsHelpers.cs +++ b/MatterControl.Printing/Settings/SettingsHelpers.cs @@ -204,11 +204,51 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } - public double ActiveBedTemperature + public bool ActiveMaterialHasAnyBedTemperatures + { + get + { + void IncrementIfSet(string settingKey, ref int count) + { + var materialBedTemp = printerSettings.GetValue(settingKey, printerSettings.MaterialLayerCascade); + if (materialBedTemp > 0) + { + count++; + } + } + + var bedTemperatureCount = 0; + IncrementIfSet(SettingsKey.bed_temperature_blue_tape, ref bedTemperatureCount); + IncrementIfSet(SettingsKey.bed_temperature_buildtak, ref bedTemperatureCount); + IncrementIfSet(SettingsKey.bed_temperature_garolite, ref bedTemperatureCount); + IncrementIfSet(SettingsKey.bed_temperature_glass, ref bedTemperatureCount); + IncrementIfSet(SettingsKey.bed_temperature_kapton, ref bedTemperatureCount); + IncrementIfSet(SettingsKey.bed_temperature_pei, ref bedTemperatureCount); + IncrementIfSet(SettingsKey.bed_temperature_pp, ref bedTemperatureCount); + + return bedTemperatureCount > 0; + } + } + + public double ActiveBedTemperature { get { - return printerSettings.GetValue(ActiveBedTemperatureSetting); + var activeKey = ActiveBedTemperatureSetting; + + var bedTemperature = printerSettings.GetValue(activeKey); + // Check if the Active Material has settings for bed surfaces + + // If the setting for this bed is 0 + // and there are not settings (actual temperatures) for differnt beds, return the normal bed_temperature + if (!ActiveMaterialHasAnyBedTemperatures + && bedTemperature == 0) + { + return printerSettings.GetValue(SettingsKey.bed_temperature); + } + + // looks like this is a legitimate setting, send it back + return bedTemperature; } } @@ -221,7 +261,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration return SettingsKey.bed_temperature; } - switch(printerSettings.GetValue(SettingsKey.bed_surface)) + switch (printerSettings.GetValue(SettingsKey.bed_surface)) { case "Blue Tape": return SettingsKey.bed_temperature_blue_tape; diff --git a/MatterControlLib/ApplicationView/SettingsValidation.cs b/MatterControlLib/ApplicationView/SettingsValidation.cs index 1ff5277c3..535e4c263 100644 --- a/MatterControlLib/ApplicationView/SettingsValidation.cs +++ b/MatterControlLib/ApplicationView/SettingsValidation.cs @@ -585,7 +585,8 @@ namespace MatterHackers.MatterControl && errors.Count(e => e.ErrorLevel == ValidationErrorLevel.Error) == 0 && printer.PrintableItems(printer.Bed.Scene).Any() && settingsContext.GetValue(SettingsKey.has_swappable_bed) - && settingsContext.GetValue(SettingsKey.bed_surface) == "Default") + && settingsContext.GetValue(SettingsKey.bed_surface) == "Default" + && printer.Settings.Helpers.ActiveMaterialHasAnyBedTemperatures) { errors.Add(new ValidationError(ValidationErrors.BedSurfaceNotSelected) { @@ -602,7 +603,8 @@ namespace MatterHackers.MatterControl && printer.PrintableItems(printer.Bed.Scene).Any() && settingsContext.GetValue(SettingsKey.has_swappable_bed) && settingsContext.GetValue(SettingsKey.bed_surface) != "Default" - && settingsContext.GetValue(printer.Settings.Helpers.ActiveBedTemperatureSetting) == "NC") + && settingsContext.GetValue(printer.Settings.Helpers.ActiveBedTemperatureSetting) == "NC" + && printer.Settings.Helpers.ActiveMaterialHasAnyBedTemperatures) { errors.Add(new ValidationError(ValidationErrors.IncompatibleBedSurfaceAndMaterial) { @@ -618,7 +620,9 @@ namespace MatterHackers.MatterControl && errors.Count(e => e.ErrorLevel == ValidationErrorLevel.Error) == 0 && printer.PrintableItems(printer.Bed.Scene).Any() && settingsContext.GetValue(SettingsKey.has_swappable_bed) - && settingsContext.GetValue(SettingsKey.bed_surface) != "Blue Tape") + && settingsContext.GetValue(SettingsKey.bed_surface) != "Blue Tape" + && printer.Settings.Helpers.ActiveMaterialHasAnyBedTemperatures + && printer.Settings.Helpers.ActiveBedTemperature == 0) { errors.Add(new ValidationError(ValidationErrors.BedTemperatureError) {