fixing modify opperations on selection groups
issue: MatterHackers/MCCentral#4005 Scale duplicates objects
This commit is contained in:
parent
30cef6ef5a
commit
76345be576
3 changed files with 37 additions and 16 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
{
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue