fixing modify opperations on selection groups

issue: MatterHackers/MCCentral#4005
Scale duplicates objects
This commit is contained in:
LarsBrubaker 2018-09-22 18:59:42 -07:00
parent 30cef6ef5a
commit 76345be576
3 changed files with 37 additions and 16 deletions

View file

@ -756,6 +756,28 @@ namespace MatterHackers.MatterControl
() => new RootHistoryContainer()));
}
public static IObject3D SelectionAsSingleClone(IObject3D selection)
{
IEnumerable<IObject3D> items = new[] { selection };
// If SelectionGroup, operate on Children instead
if (selection is SelectionGroupObject3D)
{
items = selection.Children;
var group = new GroupObject3D();
group.Children.Modify(children =>
{
children.AddRange(items.Select(o => o.Clone()));
});
return group;
}
return selection.Clone();
}
public ApplicationController()
{
// Initialize the AppContext theme object which will sync its content with Agg ActiveTheme changes
@ -829,12 +851,14 @@ namespace MatterHackers.MatterControl
(sceneItem, scene) =>
{
var selectedItem = scene.SelectedItem;
var replaceItems = (selectedItem is SelectionGroupObject3D) ? selectedItem.Children.ToList() : new List<IObject3D> { selectedItem };
scene.SelectedItem = null;
var translate = TranslateObject3D.Create(selectedItem.Clone());
translate.MakeNameNonColliding();
var selectedClone = SelectionAsSingleClone(selectedItem);
var tranlate = TranslateObject3D.Create(selectedClone);
tranlate.MakeNameNonColliding();
scene.UndoBuffer.AddAndDo(new ReplaceCommand(new List<IObject3D> { selectedItem }, new List<IObject3D> { translate }));
scene.SelectedItem = translate;
scene.UndoBuffer.AddAndDo(new ReplaceCommand(replaceItems, new List<IObject3D> { tranlate }));
scene.SelectedItem = tranlate;
return Task.CompletedTask;
},
@ -847,11 +871,13 @@ namespace MatterHackers.MatterControl
(sceneItem, scene) =>
{
var selectedItem = scene.SelectedItem;
var replaceItems = (selectedItem is SelectionGroupObject3D) ? selectedItem.Children.ToList() : new List<IObject3D> { selectedItem };
scene.SelectedItem = null;
var rotate = RotateObject3D_2.Create(selectedItem.Clone());
var selectedClone = SelectionAsSingleClone(selectedItem);
var rotate = new RotateObject3D_2(selectedClone);
rotate.MakeNameNonColliding();
scene.UndoBuffer.AddAndDo(new ReplaceCommand(new List<IObject3D> { selectedItem }, new List<IObject3D> { rotate }));
scene.UndoBuffer.AddAndDo(new ReplaceCommand(replaceItems, new List<IObject3D> { rotate }));
scene.SelectedItem = rotate;
return Task.CompletedTask;
@ -937,13 +963,13 @@ namespace MatterHackers.MatterControl
(sceneItem, scene) =>
{
var selectedItem = scene.SelectedItem;
var replaceItems = (selectedItem is SelectionGroupObject3D) ? selectedItem.Children.ToList() : new List<IObject3D> { selectedItem };
scene.SelectedItem = null;
var scale = new ScaleObject3D(selectedItem.Clone(), Vector3.One);
var selectedClone = SelectionAsSingleClone(selectedItem);
var scale = new ScaleObject3D(selectedClone);
scale.MakeNameNonColliding();
scene.UndoBuffer.AddAndDo(new ReplaceCommand(new List<IObject3D> { selectedItem }, new List<IObject3D> { scale }));
scene.UndoBuffer.AddAndDo(new ReplaceCommand(replaceItems, new List<IObject3D> { scale }));
scene.SelectedItem = scale;
return Task.CompletedTask;

View file

@ -88,11 +88,6 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
}
}
public static RotateObject3D_2 Create(IObject3D itemToRotate)
{
return new RotateObject3D_2(itemToRotate);
}
public void DrawEditor(object sender, DrawEventArgs e)
{
if (sender is InteractionLayer layer

View file

@ -49,7 +49,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
Name = "Scale".Localize();
}
public ScaleObject3D(IObject3D item, double x = 0, double y = 0, double z = 0)
public ScaleObject3D(IObject3D item, double x = 1, double y = 1, double z = 1)
: this(item, new Vector3(x, y, z))
{
}