From d5120210ee5b2b941dbdc6148c534a98a550c3be Mon Sep 17 00:00:00 2001 From: LarsBrubaker Date: Tue, 28 Sep 2021 09:13:47 -0700 Subject: [PATCH] Adding more sliders improving sheet editor --- .../DesignTools/Operations/AlignObject3D.cs | 3 ++ .../Operations/ArrayLinearObject3D.cs | 2 + .../PartPreviewWindow/Object3DTreeBuilder.cs | 49 ++++++++++++------- .../View3D/Actions/SheetEditor.cs | 1 - .../View3D/Actions/SheetFieldWidget.cs | 2 + Submodules/agg-sharp | 2 +- 6 files changed, 38 insertions(+), 21 deletions(-) diff --git a/MatterControlLib/DesignTools/Operations/AlignObject3D.cs b/MatterControlLib/DesignTools/Operations/AlignObject3D.cs index a6560c2b6..0aa947c86 100644 --- a/MatterControlLib/DesignTools/Operations/AlignObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/AlignObject3D.cs @@ -188,6 +188,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public Align XAlignTo { get; set; } = Align.None; [DisplayName("Offset")] + [Slider(-20, 20, useSnappingGrid: true)] public DoubleOrExpression XOffset { get; set; } = 0; [SectionStart("Y Axis"), DisplayName("Align")] @@ -199,6 +200,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public Align YAlignTo { get; set; } = Align.None; [DisplayName("Offset")] + [Slider(-20, 20, useSnappingGrid: true)] public DoubleOrExpression YOffset { get; set; } = 0; [SectionStart("Z Axis"), DisplayName("Align")] @@ -210,6 +212,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public Align ZAlignTo { get; set; } = Align.None; [DisplayName("Offset")] + [Slider(-20, 20, useSnappingGrid: true)] public DoubleOrExpression ZOffset { get; set; } = 0; public override bool CanFlatten => true; diff --git a/MatterControlLib/DesignTools/Operations/ArrayLinearObject3D.cs b/MatterControlLib/DesignTools/Operations/ArrayLinearObject3D.cs index a45e121f9..79aeecf90 100644 --- a/MatterControlLib/DesignTools/Operations/ArrayLinearObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/ArrayLinearObject3D.cs @@ -48,10 +48,12 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public override bool CanFlatten => true; + [Slider(2, 10, Easing.EaseType.Quadratic, snapDistance: 1)] public override IntOrExpression Count { get; set; } = 3; public DirectionVector Direction { get; set; } = new DirectionVector { Normal = new Vector3(1, 0, 0) }; + [Slider(0, 200, Easing.EaseType.Quadratic, useSnappingGrid: true)] public DoubleOrExpression Distance { get; set; } = 30; public override async Task Rebuild() diff --git a/MatterControlLib/PartPreviewWindow/Object3DTreeBuilder.cs b/MatterControlLib/PartPreviewWindow/Object3DTreeBuilder.cs index 8a184ade8..193ee1b33 100644 --- a/MatterControlLib/PartPreviewWindow/Object3DTreeBuilder.cs +++ b/MatterControlLib/PartPreviewWindow/Object3DTreeBuilder.cs @@ -51,27 +51,38 @@ namespace MatterHackers.MatterControl.PartPreviewWindow return AddTree(BuildItemView(rootItem), null, keyValues, theme); } - private static TreeNode AddTree(ObjectView item, TreeNode parent, Dictionary keyValues, ThemeConfig theme) + private static TreeNode AddTree(ObjectView objectView, TreeNode parentTreeNode, Dictionary keyValues, ThemeConfig theme) { // Suppress MeshWrapper and OperationSource nodes in tree - bool shouldCollapseToParent = item.Source is ModifiedMeshObject3D || item.Source is OperationSourceObject3D; - var contextNode = (shouldCollapseToParent && parent != null) ? parent : AddItem(item, parent, keyValues, theme); + bool shouldCollapseToParent = objectView.Source is ModifiedMeshObject3D || objectView.Source is OperationSourceObject3D; + TreeNode contextNode; + if (shouldCollapseToParent + && parentTreeNode != null + && !keyValues.ContainsKey(objectView.Source)) + { + contextNode = parentTreeNode; + } + else + { + var itemName = GetName(objectView); + contextNode = AddItem(objectView.Source, itemName, parentTreeNode, keyValues, theme); + } using (contextNode.LayoutLock()) { - var componentObject3D = item.Source as ComponentObject3D; - var hideChildren = item.Source.GetType().GetCustomAttributes(typeof(HideChildrenFromTreeViewAttribute), true).Any(); + var componentObject3D = objectView.Source as ComponentObject3D; + var hideChildren = objectView.Source.GetType().GetCustomAttributes(typeof(HideChildrenFromTreeViewAttribute), true).Any(); if ((componentObject3D?.Finalized == false || !hideChildren) - && item.Children?.Any() == true) + && objectView.Children?.Any() == true) { - var orderChildrenByIndex = item.Source.GetType().GetCustomAttributes(typeof(OrderChildrenByIndexAttribute), true).Any(); - IEnumerable children = item.Children; + var orderChildrenByIndex = objectView.Source.GetType().GetCustomAttributes(typeof(OrderChildrenByIndexAttribute), true).Any(); + IEnumerable children = objectView.Children; if (!orderChildrenByIndex) { - children = item.Children.OrderBy(i => i.Name); + children = objectView.Children.OrderBy(i => i.Name); } foreach (var child in children) { @@ -87,14 +98,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow return contextNode; } - private static TreeNode AddItem(ObjectView item, TreeNode parentNode, Dictionary keyValues, ThemeConfig theme) + private static TreeNode AddItem(IObject3D item, string itemName, TreeNode parentNode, Dictionary keyValues, ThemeConfig theme) { - if (item.Source is InsertionGroupObject3D insertionGroup) + if (item is InsertionGroupObject3D insertionGroup) { return new TreeNode(theme) { Text = "Loading".Localize(), - Tag = item.Source, + Tag = item, TextColor = theme.TextColor, PointSize = theme.DefaultFontSize, }; @@ -102,16 +113,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow var node = new TreeNode(theme) { - Text = GetName(item), - Tag = item.Source, + Text = itemName, + Tag = item, TextColor = theme.TextColor, PointSize = theme.DefaultFontSize, }; - keyValues.Add(item.Source, node); + keyValues.Add(item, node); // Check for operation resulting in the given type - var image = SceneOperations.GetIcon(item.Source.GetType(), theme); + var image = SceneOperations.GetIcon(item.GetType(), theme); if (image != null) { @@ -123,8 +134,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow node.Load += (s, e) => { - string contentID = item.Source.MeshRenderId().ToString(); - if (item.Source is IStaticThumbnail staticThumbnail) + string contentID = item.MeshRenderId().ToString(); + if (item is IStaticThumbnail staticThumbnail) { contentID = $"MatterHackers/ItemGenerator/{staticThumbnail.ThumbnailName}".GetLongHashCode().ToString(); } @@ -146,7 +157,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow node.ExpandedChanged += (s, e) => { - if (item.Source is Object3D object3D) + if (item is Object3D object3D) { object3D.Expanded = node.Expanded; } diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SheetEditor.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SheetEditor.cs index 247198ed1..33615dad8 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SheetEditor.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SheetEditor.cs @@ -35,7 +35,6 @@ using MatterHackers.MatterControl.PartPreviewWindow; using MatterHackers.DataConverters3D; using MatterHackers.Localizations; using System.Linq; -using System.Diagnostics; namespace MatterHackers.MatterControl.DesignTools { diff --git a/MatterControlLib/PartPreviewWindow/View3D/Actions/SheetFieldWidget.cs b/MatterControlLib/PartPreviewWindow/View3D/Actions/SheetFieldWidget.cs index 104071348..1cc0e8d92 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/Actions/SheetFieldWidget.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/Actions/SheetFieldWidget.cs @@ -112,6 +112,8 @@ namespace MatterHackers.MatterControl.DesignTools this.content.Text += keyPressEvent.KeyChar.ToString(); + keyPressEvent.Handled = true; + UpdateSheetEditField(); } } diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index ed1ba2bdd..e1312ca89 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit ed1ba2bdd5415dfb5e797221b16e1e6d1753d0a3 +Subproject commit e1312ca8960b1cbec7bfe0b0f85770d824866983