diff --git a/ApplicationView/ApplicationController.cs b/ApplicationView/ApplicationController.cs index fe016de48..059144a1e 100644 --- a/ApplicationView/ApplicationController.cs +++ b/ApplicationView/ApplicationController.cs @@ -351,8 +351,8 @@ namespace MatterHackers.MatterControl TitleResolver = () => "Arrange".Localize(), Action = (scene) => { - scene.AddSelectionAsChildren(new ArrangeObject3D()); - if(scene.SelectedItem is ArrangeObject3D arange) + scene.AddSelectionAsChildren(new Arrange3D()); + if(scene.SelectedItem is Arrange3D arange) { arange.Rebuild(null); } @@ -422,8 +422,8 @@ namespace MatterHackers.MatterControl TitleResolver = () => "Linear Array".Localize(), Action = (scene) => { - scene.AddSelectionAsChildren(new ArrayLinearObject3D()); - if(scene.SelectedItem is ArrayLinearObject3D array) + scene.AddSelectionAsChildren(new ArrayLinear3D()); + if(scene.SelectedItem is ArrayLinear3D array) { array.Rebuild(null); } @@ -436,8 +436,8 @@ namespace MatterHackers.MatterControl TitleResolver = () => "Radial Array".Localize(), Action = (scene) => { - scene.AddSelectionAsChildren(new ArrayRadialObject3D()); - if(scene.SelectedItem is ArrayRadialObject3D array) + scene.AddSelectionAsChildren(new ArrayRadial3D()); + if(scene.SelectedItem is ArrayRadial3D array) { array.Rebuild(null); } @@ -450,8 +450,8 @@ namespace MatterHackers.MatterControl TitleResolver = () => "Advanced Array".Localize(), Action = (scene) => { - scene.AddSelectionAsChildren(new ArrayAdvancedObject3D()); - if(scene.SelectedItem is ArrayAdvancedObject3D array) + scene.AddSelectionAsChildren(new ArrayAdvanced3D()); + if(scene.SelectedItem is ArrayAdvanced3D array) { array.Rebuild(null); } @@ -466,7 +466,7 @@ namespace MatterHackers.MatterControl { var selectedItem = scene.SelectedItem; scene.SelectedItem = null; - var fit = FitToBounds.Create(selectedItem.Clone()); + var fit = FitToBounds3D.Create(selectedItem.Clone()); fit.MakeNameNonColliding(); scene.UndoBuffer.AddAndDo(new ReplaceCommand(new List { selectedItem }, new List { fit })); @@ -483,7 +483,14 @@ namespace MatterHackers.MatterControl TitleResolver = () => "Package".Localize(), Action = (scene) => { - scene.WrapSelection(new Package()); + var selectedItem = scene.SelectedItem; + scene.SelectedItem = null; + var package = Package3D.Create(selectedItem.Clone()); + package.MakeNameNonColliding(); + + scene.UndoBuffer.AddAndDo(new ReplaceCommand(new List { selectedItem }, new List { package })); + + scene.SelectedItem = package; }, IsEnabled = (scene) => scene.HasSelection, }, diff --git a/DesignTools/Operations/ArrangeObject3D.cs b/DesignTools/Operations/Arrange3D.cs similarity index 76% rename from DesignTools/Operations/ArrangeObject3D.cs rename to DesignTools/Operations/Arrange3D.cs index 97bcf6540..689d86393 100644 --- a/DesignTools/Operations/ArrangeObject3D.cs +++ b/DesignTools/Operations/Arrange3D.cs @@ -39,12 +39,28 @@ namespace MatterHackers.MatterControl.DesignTools.Operations { using Aabb = AxisAlignedBoundingBox; - public class ArrangeObject3D : Object3D, IRebuildable, IPropertyGridModifier + public class Arrange3D : Object3D, IRebuildable, IPropertyGridModifier { // We need to serialize this so we can remove the arrange and get back to the objects before arranging - public List ChildrenBounds = new List(); + public List OriginalChildrenBounds = new List(); + List CurrentChildrenBounds + { + get + { + List currentChildrenBounds = new List(); + this.Children.Modify(list => + { + foreach (var child in list) + { + currentChildrenBounds.Add(child.GetAxisAlignedBoundingBox()); + } + }); - public ArrangeObject3D() + return currentChildrenBounds; + } + } + + public Arrange3D() { Name = "Arrange".Localize(); } @@ -95,20 +111,21 @@ namespace MatterHackers.MatterControl.DesignTools.Operations var aabb = this.GetAxisAlignedBoundingBox(); // TODO: check if the has code for the children - if (ChildrenBounds.Count == 0) + if (OriginalChildrenBounds.Count == 0) { this.Children.Modify(list => { foreach (var child in list) { - ChildrenBounds.Add(child.GetAxisAlignedBoundingBox()); + OriginalChildrenBounds.Add(child.GetAxisAlignedBoundingBox()); } }); } + var currentChildrenBounds = CurrentChildrenBounds; this.Children.Modify(list => { - var firstBounds = ChildrenBounds[0]; + var firstBounds = currentChildrenBounds[0]; int i = 0; foreach (var child in list) { @@ -117,27 +134,27 @@ namespace MatterHackers.MatterControl.DesignTools.Operations if (XAlign == Align.None) { // make sure it is where it started - AlignAxis(0, Align.Min, ChildrenBounds[i].minXYZ.X, 0, child); + AlignAxis(0, Align.Min, currentChildrenBounds[i].minXYZ.X, 0, child); } else { - AlignAxis(0, XAlign, GetAlignToOffset(0, (!Advanced || XAlignTo == Align.None) ? XAlign : XAlignTo), XOffset, child); + AlignAxis(0, XAlign, GetAlignToOffset(currentChildrenBounds, 0, (!Advanced || XAlignTo == Align.None) ? XAlign : XAlignTo), XOffset, child); } if (YAlign == Align.None) { - AlignAxis(1, Align.Min, ChildrenBounds[i].minXYZ.Y, 0, child); + AlignAxis(1, Align.Min, currentChildrenBounds[i].minXYZ.Y, 0, child); } else { - AlignAxis(1, YAlign, GetAlignToOffset(1, (!Advanced || YAlignTo == Align.None) ? YAlign : YAlignTo), YOffset, child); + AlignAxis(1, YAlign, GetAlignToOffset(currentChildrenBounds, 1, (!Advanced || YAlignTo == Align.None) ? YAlign : YAlignTo), YOffset, child); } if (ZAlign == Align.None) { - AlignAxis(2, Align.Min, ChildrenBounds[i].minXYZ.Z, 0, child); + AlignAxis(2, Align.Min, currentChildrenBounds[i].minXYZ.Z, 0, child); } else { - AlignAxis(2, ZAlign, GetAlignToOffset(2, (!Advanced || ZAlignTo == Align.None) ? ZAlign : ZAlignTo), ZOffset, child); + AlignAxis(2, ZAlign, GetAlignToOffset(currentChildrenBounds, 2, (!Advanced || ZAlignTo == Align.None) ? ZAlign : ZAlignTo), ZOffset, child); } } i++; @@ -148,13 +165,13 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public override void Remove() { // put everything back to where it was before the arange started - if (ChildrenBounds.Count == Children.Count) + if (OriginalChildrenBounds.Count == Children.Count) { int i = 0; foreach (var child in Children) { // Where you are minus where you started to get back to where you started - child.Translate(-(child.GetAxisAlignedBoundingBox().minXYZ - ChildrenBounds[i].minXYZ)); + child.Translate(-(child.GetAxisAlignedBoundingBox().minXYZ - OriginalChildrenBounds[i].minXYZ)); i++; } } @@ -196,18 +213,18 @@ namespace MatterHackers.MatterControl.DesignTools.Operations item.Translate(translate); } - private double GetAlignToOffset(int axis, Align alignTo) + private double GetAlignToOffset(List currentChildrenBounds, int axis, Align alignTo) { switch (alignTo) { case Align.Min: - return ChildrenBounds[0].minXYZ[axis]; + return currentChildrenBounds[0].minXYZ[axis]; case Align.Center: - return ChildrenBounds[0].Center[axis]; + return currentChildrenBounds[0].Center[axis]; case Align.Max: - return ChildrenBounds[0].maxXYZ[axis]; + return currentChildrenBounds[0].maxXYZ[axis]; default: throw new NotImplementedException(); diff --git a/DesignTools/Operations/ArrayAdvancedObject3D.cs b/DesignTools/Operations/ArrayAdvanced3D.cs similarity index 97% rename from DesignTools/Operations/ArrayAdvancedObject3D.cs rename to DesignTools/Operations/ArrayAdvanced3D.cs index 1f21acb00..af1272614 100644 --- a/DesignTools/Operations/ArrayAdvancedObject3D.cs +++ b/DesignTools/Operations/ArrayAdvanced3D.cs @@ -35,9 +35,9 @@ using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.DesignTools.Operations { - public class ArrayAdvancedObject3D : Object3D, IRebuildable + public class ArrayAdvanced3D : Object3D, IRebuildable { - public ArrayAdvancedObject3D() + public ArrayAdvanced3D() { Name = "Advanced Array".Localize(); } diff --git a/DesignTools/Operations/ArrayLinearObject3D.cs b/DesignTools/Operations/ArrayLinear3D.cs similarity index 96% rename from DesignTools/Operations/ArrayLinearObject3D.cs rename to DesignTools/Operations/ArrayLinear3D.cs index d9a42b929..055d33772 100644 --- a/DesignTools/Operations/ArrayLinearObject3D.cs +++ b/DesignTools/Operations/ArrayLinear3D.cs @@ -35,9 +35,9 @@ using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.DesignTools.Operations { - public class ArrayLinearObject3D : Object3D, IRebuildable + public class ArrayLinear3D : Object3D, IRebuildable { - public ArrayLinearObject3D() + public ArrayLinear3D() { Name = "Linear Array".Localize(); } diff --git a/DesignTools/Operations/ArrayRadialObject3D.cs b/DesignTools/Operations/ArrayRadial3D.cs similarity index 97% rename from DesignTools/Operations/ArrayRadialObject3D.cs rename to DesignTools/Operations/ArrayRadial3D.cs index 253bbe617..a1ae77fcd 100644 --- a/DesignTools/Operations/ArrayRadialObject3D.cs +++ b/DesignTools/Operations/ArrayRadial3D.cs @@ -36,15 +36,13 @@ using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.DesignTools.Operations { - public class ArrayRadialObject3D : Object3D, IRebuildable + public class ArrayRadial3D : Object3D, IRebuildable { - public ArrayRadialObject3D() + public ArrayRadial3D() { Name = "Radial Array".Localize(); } - - public override bool CanBake => true; public override bool CanRemove => true; diff --git a/DesignTools/Operations/FitToBounds.cs b/DesignTools/Operations/FitToBounds3D.cs similarity index 96% rename from DesignTools/Operations/FitToBounds.cs rename to DesignTools/Operations/FitToBounds3D.cs index 7732172c6..c7e8067f5 100644 --- a/DesignTools/Operations/FitToBounds.cs +++ b/DesignTools/Operations/FitToBounds3D.cs @@ -42,7 +42,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations { public enum MaintainRatio { None, X_Y, X_Y_Z } - public class FitToBounds : Object3D, IRebuildable, IEditorDraw + public class FitToBounds3D : Object3D, IRebuildable, IEditorDraw { public double Width { get; set; } public double Depth { get; set; } @@ -56,7 +56,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations IObject3D ScaleItem => Children.First(); IObject3D ItemToScale => Children.First().Children.First(); - public FitToBounds() + public FitToBounds3D() { } @@ -66,9 +66,9 @@ namespace MatterHackers.MatterControl.DesignTools.Operations base.OnInvalidate(); } - public static FitToBounds Create(IObject3D itemToFit) + public static FitToBounds3D Create(IObject3D itemToFit) { - FitToBounds fitToBounds = new FitToBounds(); + FitToBounds3D fitToBounds = new FitToBounds3D(); var aabb = itemToFit.GetAxisAlignedBoundingBox(); fitToBounds.Width = aabb.XSize; diff --git a/DesignTools/Operations/Package.cs b/DesignTools/Operations/Package.cs deleted file mode 100644 index 88f15ab4f..000000000 --- a/DesignTools/Operations/Package.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.ComponentModel; -using System.Linq; -using System.Threading; -using MatterHackers.Agg.Font; -using MatterHackers.Agg.UI; -using MatterHackers.DataConverters3D; -using MatterHackers.VectorMath; -using MatterHackers.PolygonMesh; - -namespace MatterHackers.MatterControl.DesignTools.Operations -{ - public class Package : Object3D, IRebuildable - { - public Package() - { - - } - - public void Rebuild(UndoBuffer undoBuffer) - { - return; - } - } -} diff --git a/DesignTools/Operations/Package3D.cs b/DesignTools/Operations/Package3D.cs new file mode 100644 index 000000000..81268d0b6 --- /dev/null +++ b/DesignTools/Operations/Package3D.cs @@ -0,0 +1,60 @@ +using System; +using System.ComponentModel; +using System.Linq; +using System.Threading; +using MatterHackers.Agg.Font; +using MatterHackers.Agg.UI; +using MatterHackers.DataConverters3D; +using MatterHackers.VectorMath; +using MatterHackers.PolygonMesh; + +namespace MatterHackers.MatterControl.DesignTools.Operations +{ + public class Package3D : Object3D, IRebuildable + { + public string NameToWrite { get; set; } + public Package3D() + { + + } + + public static Package3D Create(IObject3D itemToPackage) + { + Package3D package = new Package3D(); + + var text = itemToPackage.Descendants().FirstOrDefault(); + if (text != null) + { + package.NameToWrite = text.NameToWrite; + } + + package.Children.Add(itemToPackage); + + return package; + } + + public void Rebuild(UndoBuffer undoBuffer) + { + var text = this.Descendants().FirstOrDefault(); + if (text != null) + { + text.NameToWrite = this.NameToWrite; + text.Rebuild(null); + } + + var fit = this.Descendants().FirstOrDefault(); + if (fit != null) + { + fit.Rebuild(null); + } + + var align = this.Descendants().FirstOrDefault(); + if (align != null) + { + align.Rebuild(null); + } + + return; + } + } +} diff --git a/DesignTools/Primitives/TextObject3D.cs b/DesignTools/Primitives/TextObject3D.cs index 236ef1bf5..3788d8172 100644 --- a/DesignTools/Primitives/TextObject3D.cs +++ b/DesignTools/Primitives/TextObject3D.cs @@ -82,8 +82,6 @@ namespace MatterHackers.MatterControl.DesignTools return item; } - - [DisplayName("Name")] public string NameToWrite { get; set; } = "Text"; diff --git a/MatterControl.csproj b/MatterControl.csproj index f7844de89..82e4f5a25 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -95,14 +95,15 @@ - - - - + + + + - + + @@ -123,7 +124,6 @@ - diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 11517c930..8ea222fd2 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 11517c9302bd8ad6161de3192168d47ec8e03d5a +Subproject commit 8ea222fd2f47ec7fed3d1f6c53e39f6f776da549