From 86966e0e2475674340700a7844f05130d365974e Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Thu, 17 Aug 2017 15:21:29 -0700 Subject: [PATCH] Align tool is working --- PartPreviewWindow/View3D/View3DWidget.cs | 53 +++++++++++++++++++----- StaticData/Translations/Master.txt | 3 ++ Submodules/agg-sharp | 2 +- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index b71cbd270..22f47e609 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -279,7 +279,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // this is closer to the old align button if (false) { - Button absoluteButton = smallMarginButtonFactory.Generate("Absolute".Localize()); + var absoluteButton = smallMarginButtonFactory.Generate("Absolute".Localize()); absoluteButton.Margin = buttonSpacing; absoluteButton.Click += (sender, e) => { @@ -307,7 +307,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }; selectionActionBar.AddChild(alignButton); - Button layFlatButton = smallMarginButtonFactory.Generate("Lay Flat".Localize()); + var layFlatButton = smallMarginButtonFactory.Generate("Lay Flat".Localize()); layFlatButton.Margin = buttonSpacing; layFlatButton.Click += (sender, e) => { @@ -324,7 +324,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow CreateActionSeparator(selectionActionBar); - Button copyButton = smallMarginButtonFactory.Generate("Copy".Localize()); + var copyButton = smallMarginButtonFactory.Generate("Copy".Localize()); copyButton.Name = "3D View Copy"; copyButton.Margin = buttonSpacing; copyButton.Click += (sender, e) => @@ -337,7 +337,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }; selectionActionBar.AddChild(copyButton); - Button deleteButton = smallMarginButtonFactory.Generate("Remove".Localize()); + var deleteButton = smallMarginButtonFactory.Generate("Remove".Localize()); deleteButton.Name = "3D View Remove"; deleteButton.Margin = buttonSpacing; deleteButton.Click += (sender, e) => @@ -1560,7 +1560,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow HAnchor = HAnchor.Fit, VAnchor = VAnchor.Fit, BackgroundColor = RGBA_Bytes.White, - Padding = new BorderDouble(12, 5, 12, 0) + Padding = new BorderDouble(5, 5, 5, 0) }; FlowLayoutWidget buttonPanel = new FlowLayoutWidget(FlowDirection.TopToBottom) @@ -1580,28 +1580,59 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }; buttonPanel.AddChild(alignButtons); - alignButtons.AddChild(new TextWidget(axisNames[axisIndex], textColor: ActiveTheme.Instance.PrimaryTextColor)); + alignButtons.AddChild(new TextWidget(axisNames[axisIndex], textColor: ActiveTheme.Instance.PrimaryTextColor) + { + VAnchor = VAnchor.Center, + Margin = new BorderDouble(0, 0, 3, 0) + }); - alignButtons.AddChild(CreateAlignButton(axisIndex, "Min")); + alignButtons.AddChild(CreateAlignButton(axisIndex, AxisAlignment.Min, "Min")); alignButtons.AddChild(new HorizontalSpacer()); - alignButtons.AddChild(CreateAlignButton(axisIndex, "Center")); + alignButtons.AddChild(CreateAlignButton(axisIndex, AxisAlignment.Center, "Center")); alignButtons.AddChild(new HorizontalSpacer()); - alignButtons.AddChild(CreateAlignButton(axisIndex, "Max")); + alignButtons.AddChild(CreateAlignButton(axisIndex, AxisAlignment.Max, "Max")); alignButtons.AddChild(new HorizontalSpacer()); } return widget; } - private GuiWidget CreateAlignButton(int axisIndex, string words) + internal enum AxisAlignment { Min, Center, Max }; + private GuiWidget CreateAlignButton(int axisIndex, AxisAlignment alignment, string lable) { - RadioButton alignButton = new RadioButton(words, textColor: ActiveTheme.Instance.PrimaryTextColor); + var smallMarginButtonFactory = ApplicationController.Instance.Theme.SmallMarginButtonFactory; + var alignButton = smallMarginButtonFactory.Generate(lable); + alignButton.Margin = new BorderDouble(3, 0); + int extruderIndexCanPassToClick = axisIndex; alignButton.Click += (sender, e) => { if (Scene.HasSelection) { + var totalAABB = Scene.SelectedItem.GetAxisAlignedBoundingBox(Matrix4X4.Identity); // move the objects to the right place + foreach(var child in Scene.SelectedItem.Children) + { + var childAABB = child.GetAxisAlignedBoundingBox(Scene.SelectedItem.Matrix); + var offset = new Vector3(); + switch (alignment) + { + case AxisAlignment.Min: + offset[axisIndex] = totalAABB.minXYZ[axisIndex] - childAABB.minXYZ[axisIndex]; + break; + + case AxisAlignment.Center: + offset[axisIndex] = totalAABB.Center[axisIndex] - childAABB.Center[axisIndex]; + break; + + case AxisAlignment.Max: + { + offset[axisIndex] = totalAABB.maxXYZ[axisIndex] - childAABB.maxXYZ[axisIndex]; + } + break; + } + child.Matrix *= Matrix4X4.CreateTranslation(offset); + } //Scene.SelectedItem.MaterialIndex = extruderIndexCanPassToClick; PartHasBeenChanged(); } diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 2bd88f21b..87582912d 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -4405,3 +4405,6 @@ Translated:Clear Bed English:Lay Flat Translated:Lay Flat +English:Part +Translated:Part + diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 9c24620b3..d54d06700 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 9c24620b3122118396991484dcdb31209b14f357 +Subproject commit d54d06700ad874f9893f62b31fef8cc91f964629