diff --git a/MatterControlLib/DesignTools/SupportGenerator.cs b/MatterControlLib/DesignTools/SupportGenerator.cs index 4fd9a16c0..6b72a68ec 100644 --- a/MatterControlLib/DesignTools/SupportGenerator.cs +++ b/MatterControlLib/DesignTools/SupportGenerator.cs @@ -69,12 +69,7 @@ namespace MatterHackers.MatterControl.DesignTools { get { - if (UserSettings.Instance.get(UserSettingsKey.SupportMaxOverHangAngle) == null) - { - return 45; - } - - var value = UserSettings.Instance.GetValue(UserSettingsKey.SupportMaxOverHangAngle); + var value = UserSettings.Instance.GetValue(UserSettingsKey.SupportMaxOverHangAngle, 45); if (value < 0) { return 0; @@ -98,7 +93,7 @@ namespace MatterHackers.MatterControl.DesignTools { get { - var value = UserSettings.Instance.GetValue(UserSettingsKey.SupportPillarSize, "4"); + var value = UserSettings.Instance.GetValue(UserSettingsKey.SupportPillarSize, 4); if (value < 1.5) { return 1.5; diff --git a/MatterControlLib/Library/Export/GCodeExport.cs b/MatterControlLib/Library/Export/GCodeExport.cs index f10e08fed..2a162ca7a 100644 --- a/MatterControlLib/Library/Export/GCodeExport.cs +++ b/MatterControlLib/Library/Export/GCodeExport.cs @@ -142,7 +142,7 @@ namespace MatterHackers.MatterControl.Library.Export { var levelingCheckbox = new CheckBox("Apply leveling to G-Code during export".Localize(), theme.TextColor, 10) { - Checked = UserSettings.Instance.GetValue(UserSettingsKey.ApplyLevelingDurringExport, "1"), + Checked = UserSettings.Instance.GetValue(UserSettingsKey.ApplyLevelingDurringExport, true), Cursor = Cursors.Hand, Margin = new BorderDouble(left: 10) }; @@ -340,7 +340,7 @@ namespace MatterHackers.MatterControl.Library.Export { try { - var finalStream = GetExportStream(Printer, gCodeFileStream, UserSettings.Instance.GetValue(UserSettingsKey.ApplyLevelingDurringExport, "1")); + var finalStream = GetExportStream(Printer, gCodeFileStream, UserSettings.Instance.GetValue(UserSettingsKey.ApplyLevelingDurringExport, true)); var totalLines = gCodeFileStream.GCodeFile.LineCount; var currentLine = 0; diff --git a/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs b/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs index 1226b6acb..2002283ac 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs @@ -633,12 +633,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { get { - if (string.IsNullOrEmpty(UserSettings.Instance.get(UserSettingsKey.SnapGridDistance))) - { - return 1; - } - - return UserSettings.Instance.GetValue(UserSettingsKey.SnapGridDistance); + return UserSettings.Instance.GetValue(UserSettingsKey.SnapGridDistance, 1); } set diff --git a/MatterControlLib/SettingsManagement/UserSettings.cs b/MatterControlLib/SettingsManagement/UserSettings.cs index cf79cc735..c9d863720 100644 --- a/MatterControlLib/SettingsManagement/UserSettings.cs +++ b/MatterControlLib/SettingsManagement/UserSettings.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; +using System.Globalization; +using g3; using MatterHackers.Agg; using MatterHackers.Agg.UI; using MatterHackers.MatterControl.DataStorage; +using MatterHackers.VectorMath; namespace MatterHackers.MatterControl { @@ -142,13 +145,13 @@ namespace MatterHackers.MatterControl /// The type of value being gotten /// The name of the value to get /// The typed value - public T GetValue(string settingsKey, string defaultValue = null) where T : IConvertible + public T GetValue(string settingsKey, T defaultValue) { var settingValue = this.get(settingsKey); if (settingValue == null) { - settingValue = defaultValue; + return defaultValue; } if (typeof(T) == typeof(string)) @@ -171,11 +174,41 @@ namespace MatterHackers.MatterControl double.TryParse(settingValue, out double result); return (T)(object)result; } + else if (typeof(T) == typeof(Vector2)) + { + var parts = settingValue.Split(new[] { 'X', ':', ',', 'Y', ':' }, StringSplitOptions.RemoveEmptyEntries); + if (parts.Length == 2 && double.TryParse(parts[0].Trim(), out double x) && double.TryParse(parts[1].Trim(), out double y)) + { + Vector2 result = new Vector2(x, y); + return (T)(object)result; + } + // Else, handle the case when the parsing fails... + } - return (T)default(T); + return (T)default(T); } - public string get(string key) + public void SetValue(string key, T value) + { + if (typeof(T) == typeof(bool)) + { + set(key, ((bool)(object)value) ? "1" : "0"); + } + else if (value is Vector2 vector) + { + set(key, $"X:{vector.X},Y:{vector.Y}"); + } + else if (value is IConvertible convertible) + { + set(key, convertible.ToString(CultureInfo.InvariantCulture)); + } + else + { + set(key, value.ToString()); + } + } + + public string get(string key) { UserSetting userSetting; if (settingsDictionary.TryGetValue(key, out userSetting)) diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index f6071a2cb..42d628f0b 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit f6071a2cb00286954d803ca28a4dc56749752e17 +Subproject commit 42d628f0be7bf2f050f3d60cf6f7a55f92c9ad30