diff --git a/ActionBar/PrinterConnectAndSelectControl.cs b/ActionBar/PrinterConnectAndSelectControl.cs index da6674eba..ade252546 100644 --- a/ActionBar/PrinterConnectAndSelectControl.cs +++ b/ActionBar/PrinterConnectAndSelectControl.cs @@ -183,7 +183,7 @@ namespace MatterHackers.MatterControl.ActionBar resetConnectionButton.Click += new EventHandler((s,e) => PrinterConnectionAndCommunication.Instance.RebootBoard()); resetConnectionButton.Visible = ActiveSliceSettings.Instance.GetValue(SettingsKey.show_reset_connection); - SliceSettingsWidget.SettingChanged.RegisterEvent((sender, e) => + ActiveSliceSettings.SettingChanged.RegisterEvent((sender, e) => { StringEventArgs stringEvent = e as StringEventArgs; if (stringEvent != null) diff --git a/ActionBar/PrinterSelector.cs b/ActionBar/PrinterSelector.cs index 3ceeed973..3877750bd 100644 --- a/ActionBar/PrinterSelector.cs +++ b/ActionBar/PrinterSelector.cs @@ -83,7 +83,7 @@ namespace MatterHackers.MatterControl } }; - SliceSettingsWidget.SettingChanged.RegisterEvent(SettingChanged, ref unregisterEvents); + ActiveSliceSettings.SettingChanged.RegisterEvent(SettingChanged, ref unregisterEvents); // Rebuild the droplist any time the Profiles list changes ProfileManager.ProfilesListChanged.RegisterEvent((s, e) => Rebuild(), ref unregisterEvents); diff --git a/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs b/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs index e16a84b51..976830941 100644 --- a/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs +++ b/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs @@ -63,7 +63,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public PartPreview3DWidget() { - SliceSettingsWidget.SettingChanged.RegisterEvent(CheckSettingChanged, ref unregisterEvents); + ActiveSliceSettings.SettingChanged.RegisterEvent(CheckSettingChanged, ref unregisterEvents); ApplicationController.Instance.AdvancedControlsPanelReloading.RegisterEvent(CheckSettingChanged, ref unregisterEvents); #if false "extruder_offset", @@ -88,6 +88,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } + public virtual bool InEditMode { get { return false; } } + private void RecreateBed() { double buildHeight = ActiveSliceSettings.Instance.GetValue(SettingsKey.build_height); @@ -99,6 +101,18 @@ namespace MatterHackers.MatterControl.PartPreviewWindow ActiveSliceSettings.Instance.GetValue(SettingsKey.print_center), ActiveSliceSettings.Instance.GetValue(SettingsKey.bed_shape)); PutOemImageOnBed(); + + Vector2 bedCenter = ActiveSliceSettings.Instance.GetValue(SettingsKey.print_center); + if(ActiveSliceSettings.Instance.GetValue(SettingsKey.center_part_on_bed) + && !InEditMode) + { + var bounds = meshViewerWidget.MeshGroups[0].GetAxisAlignedBoundingBox(); + Vector3 boundsCenter = (bounds.maxXYZ + bounds.minXYZ) / 2; + for (int i = 0; i < meshViewerWidget.MeshGroups.Count; i++) + { + meshViewerWidget.MeshGroupTransforms[i] = Matrix4X4.CreateTranslation(-boundsCenter + new Vector3(0, 0, bounds.ZSize / 2) + new Vector3(bedCenter)); + } + } })); } diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index 1b134a9ca..d189544e9 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -2317,6 +2317,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } + public override bool InEditMode + { + get { return buttonRightPanel.Visible; } + } + private void SwitchStateToNotEditing() { if (!enterEditButtonsContainer.Visible) diff --git a/PartPreviewWindow/ViewGcodeBasic.cs b/PartPreviewWindow/ViewGcodeBasic.cs index 652b53d59..c0eddb889 100644 --- a/PartPreviewWindow/ViewGcodeBasic.cs +++ b/PartPreviewWindow/ViewGcodeBasic.cs @@ -109,7 +109,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow CreateAndAddChildren(); - SliceSettingsWidget.SettingChanged.RegisterEvent(CheckSettingChanged, ref unregisterEvents); + ActiveSliceSettings.SettingChanged.RegisterEvent(CheckSettingChanged, ref unregisterEvents); ApplicationController.Instance.AdvancedControlsPanelReloading.RegisterEvent((s, e) => ClearGCode(), ref unregisterEvents); ActiveSliceSettings.ActivePrinterChanged.RegisterEvent(CheckSettingChanged, ref unregisterEvents); diff --git a/SlicerConfiguration/Settings/ActiveSliceSettings.cs b/SlicerConfiguration/Settings/ActiveSliceSettings.cs index 58e3ebde0..e408317e9 100644 --- a/SlicerConfiguration/Settings/ActiveSliceSettings.cs +++ b/SlicerConfiguration/Settings/ActiveSliceSettings.cs @@ -49,6 +49,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { public static RootedObjectEventHandler ActivePrinterChanged = new RootedObjectEventHandler(); public static RootedObjectEventHandler ActiveProfileModified = new RootedObjectEventHandler(); + public static RootedObjectEventHandler SettingChanged = new RootedObjectEventHandler(); private static PrinterSettings activeInstance = null; public static PrinterSettings Instance @@ -94,13 +95,23 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } + static public void OnSettingsChanged(SliceSettingData settingData) + { + SettingChanged.CallEvents(null, new StringEventArgs(settingData.SlicerConfigName)); + + if (settingData.ReloadUiWhenChanged) + { + UiThread.RunOnIdle(() => ApplicationController.Instance.ReloadAll(null, null)); + } + } + public static void RefreshActiveInstance(PrinterSettings updatedProfile) { bool themeChanged = activeInstance.GetValue(SettingsKey.active_theme_name) != updatedProfile.GetValue(SettingsKey.active_theme_name); activeInstance = updatedProfile; - SliceSettingsWidget.SettingChanged.CallEvents(null, new StringEventArgs(SettingsKey.printer_name)); + ActiveSliceSettings.SettingChanged.CallEvents(null, new StringEventArgs(SettingsKey.printer_name)); if (themeChanged) { diff --git a/SlicerConfiguration/Settings/ProfileManager.cs b/SlicerConfiguration/Settings/ProfileManager.cs index 4989de97e..56b3830f9 100644 --- a/SlicerConfiguration/Settings/ProfileManager.cs +++ b/SlicerConfiguration/Settings/ProfileManager.cs @@ -59,7 +59,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration static ProfileManager() { - SliceSettingsWidget.SettingChanged.RegisterEvent(SettingsChanged, ref unregisterEvents); + ActiveSliceSettings.SettingChanged.RegisterEvent(SettingsChanged, ref unregisterEvents); Reload(); } diff --git a/SlicerConfiguration/SettingsControlSelectors.cs b/SlicerConfiguration/SettingsControlSelectors.cs index 6c3b34301..1a65fe631 100644 --- a/SlicerConfiguration/SettingsControlSelectors.cs +++ b/SlicerConfiguration/SettingsControlSelectors.cs @@ -57,7 +57,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public PresetSelectorWidget(string label, RGBA_Bytes accentColor, NamedSettingsLayers layerType, int extruderIndex) : base(FlowDirection.TopToBottom) { - SliceSettingsWidget.SettingChanged.RegisterEvent((s, e) => + ActiveSliceSettings.SettingChanged.RegisterEvent((s, e) => { StringEventArgs stringEvent = e as StringEventArgs; if (stringEvent != null @@ -218,6 +218,12 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private void MenuItem_Selected(object sender, EventArgs e) { + Dictionary settingBeforeChange = new Dictionary(); + foreach (var keyName in PrinterSettings.KnownSettings) + { + settingBeforeChange.Add(keyName, ActiveSliceSettings.Instance.GetValue(keyName)); + } + var activeSettings = ActiveSliceSettings.Instance; MenuItem item = (MenuItem)sender; @@ -254,6 +260,13 @@ namespace MatterHackers.MatterControl.SlicerConfiguration UiThread.RunOnIdle(() => { ApplicationController.Instance.ReloadAdvancedControlsPanel(); + foreach (var keyName in PrinterSettings.KnownSettings) + { + if(settingBeforeChange[keyName] != ActiveSliceSettings.Instance.GetValue(keyName)) + { + ActiveSliceSettings.OnSettingsChanged(SliceSettingsOrganizer.Instance.GetSettingsData(keyName)); + } + } }); editButton.Enabled = item.Text != defaultMenuItemText; diff --git a/SlicerConfiguration/SlicePresetsWindow/SlicePresetsWindow.cs b/SlicerConfiguration/SlicePresetsWindow/SlicePresetsWindow.cs index 2fdee817b..93442c200 100644 --- a/SlicerConfiguration/SlicePresetsWindow/SlicePresetsWindow.cs +++ b/SlicerConfiguration/SlicePresetsWindow/SlicePresetsWindow.cs @@ -137,7 +137,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration presetNameInput.ActualTextEditWidget.EditComplete += (s, e) => { ActiveSliceSettings.Instance.SetValue(SettingsKey.layer_name, presetNameInput.Text, presetsContext.PersistenceLayer); - SliceSettingsWidget.SettingChanged.CallEvents(null, new StringEventArgs(SettingsKey.layer_name)); + ActiveSliceSettings.SettingChanged.CallEvents(null, new StringEventArgs(SettingsKey.layer_name)); }; topRow.AddChild(presetNameInput); diff --git a/SlicerConfiguration/SliceSettingsWidget.cs b/SlicerConfiguration/SliceSettingsWidget.cs index 5ce091091..913487cb8 100644 --- a/SlicerConfiguration/SliceSettingsWidget.cs +++ b/SlicerConfiguration/SliceSettingsWidget.cs @@ -611,18 +611,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration return nameHolder; } - public static RootedObjectEventHandler SettingChanged = new RootedObjectEventHandler(); - - static private void OnSettingsChanged(SliceSettingData settingData) - { - SettingChanged.CallEvents(null, new StringEventArgs(settingData.SlicerConfigName)); - - if (settingData.ReloadUiWhenChanged) - { - UiThread.RunOnIdle(() => ApplicationController.Instance.ReloadAll(null, null)); - } - } - private class SettingsRow : FlowLayoutWidget { public string SettingsKey { get; set; } @@ -642,7 +630,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration Padding = new BorderDouble(3); HAnchor = Agg.UI.HAnchor.ParentLeftRight; - SettingChanged.RegisterEvent((s, e) => + ActiveSliceSettings.SettingChanged.RegisterEvent((s, e) => { if (((StringEventArgs)e).Data == SettingsKey) { @@ -852,7 +840,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; content.AddChild(intEditWidget); @@ -889,7 +877,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; dataArea.AddChild(doubleEditWidget); unitsArea.AddChild(GetExtraSettingsWidget(settingData)); @@ -963,7 +951,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration // also always save to the local setting ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, numberEdit.Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; content.AddChild(doubleEditWidget); unitsArea.AddChild(GetExtraSettingsWidget(settingData)); @@ -1000,7 +988,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; dataArea.AddChild(doubleEditWidget); unitsArea.AddChild(GetExtraSettingsWidget(settingData)); @@ -1044,7 +1032,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, textEditWidget.Text, persistenceLayer); settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; stringEdit.ActualTextEditWidget.InternalTextEditWidget.AllSelected += (sender, e) => @@ -1118,7 +1106,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, textEditWidget.Text, persistenceLayer); settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); // make sure we are still looking for the final validation before saving. if (textEditWidget.ContainsFocus) @@ -1189,7 +1177,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; dataArea.AddChild(checkBoxWidget); @@ -1214,7 +1202,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((TextEditWidget)sender).Text, persistenceLayer); settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; dataArea.AddChild(stringEdit); @@ -1241,7 +1229,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n"), persistenceLayer); settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; nameArea.HAnchor = HAnchor.AbsolutePosition; @@ -1312,7 +1300,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; } @@ -1343,7 +1331,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; dataArea.AddChild(checkBoxWidget); @@ -1388,7 +1376,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; dataArea.AddChild(xEditWidget); dataArea.AddChild(new TextWidget("X", pointSize: 10, textColor: ActiveTheme.Instance.PrimaryTextColor) @@ -1403,7 +1391,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; dataArea.AddChild(yEditWidget); var yLabel = new GuiWidget(HAnchor.ParentLeftRight, VAnchor.FitToChildren | VAnchor.ParentCenter) @@ -1457,7 +1445,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; dataArea.AddChild(xEditWidget); dataArea.AddChild(new TextWidget("X", pointSize: 10, textColor: ActiveTheme.Instance.PrimaryTextColor) @@ -1473,7 +1461,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; dataArea.AddChild(yEditWidget); var yLabel = new GuiWidget(HAnchor.ParentLeftRight, VAnchor.FitToChildren | VAnchor.ParentCenter) @@ -1531,7 +1519,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } settingsRow.RefreshValue(layerCascade); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; restoreArea.AddChild(restoreButton); @@ -1620,7 +1608,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration settingsRow.UpdateStyle(); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); }; } } @@ -1677,7 +1665,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration newItem.Selected += (sender, e) => { ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, valueLocal, persistenceLayer); - OnSettingsChanged(settingData); + ActiveSliceSettings.OnSettingsChanged(settingData); internalTextWidget.Text = valueLocal; internalTextWidget.OnEditComplete(null); }; @@ -1692,7 +1680,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration EventHandler localUnregisterEvents = null; - SettingChanged.RegisterEvent((sender, e) => + ActiveSliceSettings.SettingChanged.RegisterEvent((sender, e) => { bool foundSetting = false; foreach (QuickMenuNameValue nameValue in settingData.QuickMenuSettings)