From e81305daaa82a22922dc9eb2a082a10d76294d9d Mon Sep 17 00:00:00 2001 From: LarsBrubaker Date: Sat, 7 May 2022 18:38:51 -0700 Subject: [PATCH 1/3] Show Solid vs Hole selection --- .../PartPreviewWindow/SelectedObjectPanel.cs | 63 +++++++++++++++---- Submodules/agg-sharp | 2 +- 2 files changed, 52 insertions(+), 13 deletions(-) diff --git a/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs b/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs index a3d87b28d..2ce701598 100644 --- a/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs +++ b/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs @@ -306,9 +306,33 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } }; + TextWidget holeText = null; + TextWidget solidText = null; + void SetButtonStates(ColorButton solid, ColorButton hole) + { + if (selectedItem.OutputType == PrintOutputTypes.Hole) + { + holeText.Underline = true; + hole.BackgroundOutlineWidth = 2; + + solidText.Underline = false; + solid.BackgroundOutlineWidth = 1; + } + else + { + holeText.Underline = false; + hole.BackgroundOutlineWidth = 1; + + solidText.Underline = true; + solid.BackgroundOutlineWidth = 2; + } + } + + ColorButton holeButton = null; var colorButton = colorField.Content.Descendants().FirstOrDefault(); - colorButton.Parent.MouseDown += (s, e) => - { + + void SetToSolid() + { // make sure the render mode is set to shaded or outline if (sceneContext.ViewState.RenderType != RenderOpenGl.RenderTypes.Shaded && sceneContext.ViewState.RenderType != RenderOpenGl.RenderTypes.Outlines) @@ -322,7 +346,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { undoBuffer.AddAndDo(new ChangeColor(selectedItem, colorField.Color)); } - }; + + SetButtonStates(colorButton, holeButton); + } + + colorButton.Parent.MouseDown += (s, e) => SetToSolid(); var colorRow = new SettingsRow("Result".Localize(), null, colorField.Content, theme) { @@ -333,7 +361,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // put in a hole button var scaledButtonSize = 24 * GuiWidget.DeviceScale; - var holeButton = new ColorButton(Color.DarkGray) + holeButton = new ColorButton(Color.DarkGray) { Margin = new BorderDouble(5, 0, 11, 0), Width = scaledButtonSize, @@ -347,25 +375,36 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }; var buttonRow = colorButton.Parents().FirstOrDefault(); - buttonRow.AddChild(new TextWidget("Solid".Localize(), pointSize: theme.FontSize10, textColor: theme.TextColor) - { + solidText = new TextWidget("Solid".Localize(), pointSize: theme.FontSize10, textColor: theme.TextColor) + { VAnchor = VAnchor.Center, Margin = new BorderDouble(3, 0), - }, 0); + Selectable = true, + }; + buttonRow.AddChild(solidText, 0); buttonRow.AddChild(holeButton, 0); - buttonRow.AddChild(new TextWidget("Hole".Localize(), pointSize: theme.FontSize10, textColor: theme.TextColor) + holeText = new TextWidget("Hole".Localize(), pointSize: theme.FontSize10, textColor: theme.TextColor) { VAnchor = VAnchor.Center, Margin = new BorderDouble(3, 0), - }, 0); + Selectable = true, + }; + buttonRow.AddChild(holeText, 0); - holeButton.Click += (s, e) => - { + void SetToHole() + { if (selectedItem.WorldOutputType() != PrintOutputTypes.Hole) { undoBuffer.AddAndDo(new MakeHole(selectedItem)); } - }; + SetButtonStates(colorButton, holeButton); + } + + holeButton.Click += (s, e) => SetToHole(); + holeText.Click += (s, e) => SetToHole(); + solidText.Click += (s, e) => SetToSolid(); + + SetButtonStates(colorButton, holeButton); // put in a material edit field var materialField = new MaterialIndexField(sceneContext.Printer, theme, selectedItem.MaterialIndex); diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index e83b5b6e0..180be9e94 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit e83b5b6e0f0030b24513124d84649e6d05417d2b +Subproject commit 180be9e945fdc3361b737fac2b73bd01cce6987a From 54a0001ef0ccfe12fc1957963cdbe17916c68499 Mon Sep 17 00:00:00 2001 From: LarsBrubaker Date: Sat, 7 May 2022 19:08:17 -0700 Subject: [PATCH 2/3] Make sure settings get visually updated on new and delete --- .../PresetSelectorWidget.cs | 25 ++++++++++++------- StaticData/Translations/Master.txt | 3 +++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/MatterControlLib/SlicerConfiguration/PresetSelectorWidget.cs b/MatterControlLib/SlicerConfiguration/PresetSelectorWidget.cs index 54be7dc5f..b95e32ff3 100644 --- a/MatterControlLib/SlicerConfiguration/PresetSelectorWidget.cs +++ b/MatterControlLib/SlicerConfiguration/PresetSelectorWidget.cs @@ -133,7 +133,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration printer.Settings.ActiveMaterialKey = ""; printer.Settings.MaterialLayers.Remove(layerToEdit); printer.Settings.Save(); - RebuildDropDownList(); + RebuildDropDownList(true); } }; @@ -180,7 +180,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration // Clear QualityKey after removing layer to ensure listeners see update printer.Settings.ActiveQualityKey = ""; - RebuildDropDownList(); + RebuildDropDownList(true); } }; @@ -236,7 +236,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration || (layerType == NamedSettingsLayers.Quality && stringEvent.Data == SettingsKey.active_quality_key) || stringEvent.Data == SettingsKey.layer_name)) { - RebuildDropDownList(); + RebuildDropDownList(false); } } @@ -291,7 +291,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration printer.Settings.MaterialLayers.Add(newMaterial); printer.Settings.ActiveMaterialKey = newMaterial.LayerID; - RebuildDropDownList(); + RebuildDropDownList(true); }, () => { @@ -300,7 +300,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration printer.Settings.MaterialLayers.Add(newMaterial); printer.Settings.ActiveMaterialKey = newMaterial.LayerID; - RebuildDropDownList(); + RebuildDropDownList(true); editButton.InvokeClick(); })); @@ -320,7 +320,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration printer.Settings.QualityLayers.Add(newQuality); printer.Settings.ActiveQualityKey = newQuality.LayerID; - RebuildDropDownList(); + RebuildDropDownList(true); editButton.InvokeClick(); } @@ -505,7 +505,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration editButton.Enabled = item.Text != defaultMenuItemText; } - private void RebuildDropDownList() + private void RebuildDropDownList(bool updateAllSettings) { pullDownContainer.CloseChildren(); pullDownContainer.AddChild(this.NewPulldownContainer()); @@ -513,13 +513,20 @@ namespace MatterHackers.MatterControl.SlicerConfiguration var sliceSettingsWidget = this.Parents().FirstOrDefault(); if (sliceSettingsWidget != null) { - sliceSettingsWidget.UpdateAllStyles(); + if (updateAllSettings) + { + ApplicationController.Instance.ReloadSettings(printer); + } + else + { + sliceSettingsWidget.UpdateAllStyles(); + } } } private void SettingsLayers_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { - RebuildDropDownList(); + RebuildDropDownList(false); } } } \ No newline at end of file diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 586dd5c4a..79c09ebcc 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -1156,6 +1156,9 @@ Translated:Creation Data English:Ctrl + A = Select Alll, 'Space' = Clear Selection, 'ESC' = Cancel Drag Translated:Ctrl + A = Select Alll, 'Space' = Clear Selection, 'ESC' = Cancel Drag +English:Ctrl + P +Translated:Ctrl + P + English:Ctrl + Y | Ctrl + Shift + Z Translated:Ctrl + Y | Ctrl + Shift + Z From 4d3b0aa031498aa0e70f1708e98fb289fc52a285 Mon Sep 17 00:00:00 2001 From: LarsBrubaker Date: Sat, 7 May 2022 20:00:07 -0700 Subject: [PATCH 3/3] Showing output types (wipe tower, fuzzy, support) --- .../PartPreviewWindow/SelectedObjectPanel.cs | 113 +++++++++++++----- StaticData/Translations/Master.txt | 9 ++ 2 files changed, 94 insertions(+), 28 deletions(-) diff --git a/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs b/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs index 2ce701598..86f52dd89 100644 --- a/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs +++ b/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs @@ -306,30 +306,64 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } }; + ColorButton holeButton = null; + var solidButton = colorField.Content.Descendants().FirstOrDefault(); + GuiWidget otherContainer = null; + TextWidget otherText = null; TextWidget holeText = null; TextWidget solidText = null; - void SetButtonStates(ColorButton solid, ColorButton hole) + void SetOtherOutputSelection(string text) { - if (selectedItem.OutputType == PrintOutputTypes.Hole) - { - holeText.Underline = true; - hole.BackgroundOutlineWidth = 2; + otherText.Text = text; + otherContainer.Visible = true; + holeText.Underline = false; + holeButton.BackgroundOutlineWidth = 1; - solidText.Underline = false; - solid.BackgroundOutlineWidth = 1; - } - else - { - holeText.Underline = false; - hole.BackgroundOutlineWidth = 1; - - solidText.Underline = true; - solid.BackgroundOutlineWidth = 2; - } + solidText.Underline = false; + solidButton.BackgroundOutlineWidth = 1; } - ColorButton holeButton = null; - var colorButton = colorField.Content.Descendants().FirstOrDefault(); + var scaledButtonSize = 24 * GuiWidget.DeviceScale; + void SetButtonStates() + { + switch (selectedItem.WorldOutputType()) + { + case PrintOutputTypes.Hole: + holeText.Underline = true; + holeButton.BackgroundOutlineWidth = 2; + holeButton.BackgroundRadius = scaledButtonSize / 2 - 1; + + solidText.Underline = false; + solidButton.BackgroundOutlineWidth = 1; + solidButton.BackgroundRadius = scaledButtonSize / 2; + otherContainer.Visible = false; + break; + + case PrintOutputTypes.Default: + case PrintOutputTypes.Solid: + holeText.Underline = false; + holeButton.BackgroundOutlineWidth = 1; + holeButton.BackgroundRadius = scaledButtonSize / 2; + + solidText.Underline = true; + solidButton.BackgroundOutlineWidth = 2; + solidButton.BackgroundRadius = scaledButtonSize / 2 - 1; + otherContainer.Visible = false; + break; + + case PrintOutputTypes.Support: + SetOtherOutputSelection("Support".Localize()); + break; + + case PrintOutputTypes.WipeTower: + SetOtherOutputSelection("Wipe Tower".Localize()); + break; + + case PrintOutputTypes.Fuzzy: + SetOtherOutputSelection("Fuzzy".Localize()); + break; + } + } void SetToSolid() { @@ -347,12 +381,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow undoBuffer.AddAndDo(new ChangeColor(selectedItem, colorField.Color)); } - SetButtonStates(colorButton, holeButton); + SetButtonStates(); } - colorButton.Parent.MouseDown += (s, e) => SetToSolid(); + solidButton.Parent.MouseDown += (s, e) => SetToSolid(); - var colorRow = new SettingsRow("Result".Localize(), null, colorField.Content, theme) + var colorRow = new SettingsRow("Output".Localize(), null, colorField.Content, theme) { // Special top border style for first item in editor Border = new BorderDouble(0, 1) @@ -360,7 +394,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow editorPanel.AddChild(colorRow); // put in a hole button - var scaledButtonSize = 24 * GuiWidget.DeviceScale; holeButton = new ColorButton(Color.DarkGray) { Margin = new BorderDouble(5, 0, 11, 0), @@ -374,7 +407,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow ToolTipText = "Convert to Hole".Localize(), }; - var buttonRow = colorButton.Parents().FirstOrDefault(); + var buttonRow = solidButton.Parents().FirstOrDefault(); solidText = new TextWidget("Solid".Localize(), pointSize: theme.FontSize10, textColor: theme.TextColor) { VAnchor = VAnchor.Center, @@ -390,6 +423,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow Selectable = true, }; buttonRow.AddChild(holeText, 0); + otherContainer = new GuiWidget() + { + Margin = new BorderDouble(5, 0), + VAnchor = VAnchor.Fit | VAnchor.Center, + HAnchor = HAnchor.Fit, + BackgroundRadius = 3, + BackgroundOutlineWidth = 1, + BorderColor = theme.PrimaryAccentColor, + }; + buttonRow.AddChild(otherContainer, 0); + + otherText = new TextWidget("".Localize(), pointSize: theme.FontSize10, textColor: theme.TextColor) + { + Margin = new BorderDouble(5, 5), + AutoExpandBoundsToText = true, + }; + otherContainer.AddChild(otherText); void SetToHole() { @@ -397,14 +447,21 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { undoBuffer.AddAndDo(new MakeHole(selectedItem)); } - SetButtonStates(colorButton, holeButton); + SetButtonStates(); } holeButton.Click += (s, e) => SetToHole(); holeText.Click += (s, e) => SetToHole(); solidText.Click += (s, e) => SetToSolid(); - SetButtonStates(colorButton, holeButton); + SetButtonStates(); + void SelectedItemOutputChanged(object sender, EventArgs e) + { + SetButtonStates(); + } + + selectedItem.Invalidated += SelectedItemOutputChanged; + Closed += (s, e) => selectedItem.Invalidated -= SelectedItemOutputChanged; // put in a material edit field var materialField = new MaterialIndexField(sceneContext.Printer, theme, selectedItem.MaterialIndex); @@ -428,9 +485,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // material row editorPanel.AddChild(new SettingsRow("Material".Localize(), null, materialField.Content, theme)); - } + } - var rows = new SafeList(); + var rows = new SafeList(); // put in the normal editor if (selectedItem is ComponentObject3D componentObject @@ -446,7 +503,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow ShowObjectEditor((editor, item, item.Name), selectedItem); } } - } + } private void AddComponentEditor(IObject3D selectedItem, UndoBuffer undoBuffer, SafeList rows, ComponentObject3D componentObject) { diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 79c09ebcc..38073adb8 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -1948,6 +1948,9 @@ Translated:Found a line that is {0} characters long.\n{1}... English:Furthest Back Translated:Furthest Back +English:Fuzzy +Translated:Fuzzy + English:Fuzzy Frequency Translated:Fuzzy Frequency @@ -3343,6 +3346,9 @@ Translated:Outline Width English:Outlines (default) Translated:Outlines (default) +English:Output +Translated:Output + English:Output only the first layer of the print. Especially useful for outputting gcode data for applications like engraving or cutting. Translated:Output only the first layer of the print. Especially useful for outputting gcode data for applications like engraving or cutting. @@ -6241,6 +6247,9 @@ Translated:Will be updated to: English:Wipe Shield Distance Translated:Wipe Shield Distance +English:Wipe Tower +Translated:Wipe Tower + English:Wipe Tower Size Translated:Wipe Tower Size