diff --git a/MatterControl.csproj b/MatterControl.csproj
index 570c4228f..1c9ed8909 100644
--- a/MatterControl.csproj
+++ b/MatterControl.csproj
@@ -115,6 +115,7 @@
+
diff --git a/PartPreviewWindow/BranchEditContainer.cs b/PartPreviewWindow/BranchEditContainer.cs
new file mode 100644
index 000000000..2432b57cc
--- /dev/null
+++ b/PartPreviewWindow/BranchEditContainer.cs
@@ -0,0 +1,117 @@
+/*
+Copyright (c) 2018, John Lewin
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The views and conclusions contained in the software and documentation are those
+of the authors and should not be interpreted as representing official policies,
+either expressed or implied, of the FreeBSD Project.
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using MatterHackers.Agg.Image;
+using MatterHackers.DataConverters3D;
+using MatterHackers.MatterControl.Library;
+
+namespace MatterHackers.MatterControl.PartPreviewWindow
+{
+ public class BranchEditContainer : ILibraryWritableContainer
+ {
+ private Action saveAction;
+
+ public string ID => "";
+
+ public string Name => "";
+
+ public string StatusMessage => "";
+
+ public string KeywordFilter { get; set; }
+
+ public bool IsProtected => false;
+
+ public Type DefaultView => null;
+
+ public BranchEditContainer(Action saveAction)
+ {
+ this.saveAction = saveAction;
+ }
+
+ public List ChildContainers { get; } = new List();
+
+ public List Items { get; } = new List();
+
+ public ILibraryContainer Parent { get; set; } = null;
+
+ public event EventHandler ItemContentChanged;
+ public event EventHandler ContentChanged;
+
+ public void Activate()
+ {
+ }
+
+ public void Add(IEnumerable items)
+ {
+ }
+
+ public bool AllowAction(ContainerActions containerActions)
+ {
+ return true;
+ }
+
+ public void Deactivate()
+ {
+ }
+
+ public void Dispose()
+ {
+ }
+
+ public Task GetThumbnail(ILibraryItem item, int width, int height) => null;
+
+ public void Load()
+ {
+ }
+
+ public void Move(IEnumerable items, ILibraryWritableContainer sourceContainer)
+ {
+ }
+
+ public void Remove(IEnumerable items)
+ {
+ }
+
+ public void Rename(ILibraryItem item, string revisedName)
+ {
+ }
+
+ public void Save(ILibraryItem item, IObject3D content)
+ {
+ saveAction?.Invoke(item, content);
+ }
+
+ public void SetThumbnail(ILibraryItem item, int width, int height, ImageBuffer imageBuffer)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/PartPreviewWindow/SelectedObjectPanel.cs b/PartPreviewWindow/SelectedObjectPanel.cs
index 06ce5b479..12e5a4d1c 100644
--- a/PartPreviewWindow/SelectedObjectPanel.cs
+++ b/PartPreviewWindow/SelectedObjectPanel.cs
@@ -40,6 +40,8 @@ using MatterHackers.MatterControl.Library;
using MatterHackers.MatterControl.DesignTools;
using MatterHackers.MatterControl.DesignTools.Operations;
using System.Reflection;
+using MatterHackers.VectorMath;
+using MatterHackers.Agg.Image;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
@@ -155,11 +157,31 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
bed,
theme);
+ var clonedItem = this.item.Clone();
+
+ // Edit in Identity transform
+ clonedItem.Matrix = Matrix4X4.Identity;
+
await bed.LoadContent(
new EditContext()
{
- ContentStore = ApplicationController.Instance.Library.PlatingHistory,
- SourceItem = new InMemoryItem(this.item),
+ ContentStore = new BranchEditContainer((libraryItem, object3D) =>
+ {
+ this.item.Parent.Children.Modify(list =>
+ {
+ list.Remove(item);
+
+ var replacement = object3D.Clone();
+
+ // Restore matrix of item being replaced
+ replacement.Matrix = item.Matrix;
+
+ list.Add(replacement);
+
+ item = replacement;
+ });
+ }),
+ SourceItem = new InMemoryItem(clonedItem),
});
};
toolbar.AddChild(editButton);