Move InteractiveScene ownership from MeshViewer to PrinterConfig model

This commit is contained in:
John Lewin 2017-08-14 08:57:24 -07:00
parent 6e1ba18984
commit 3446bc00e9
8 changed files with 38 additions and 34 deletions

View file

@ -57,6 +57,7 @@ namespace MatterHackers.MatterControl
using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling;
using MatterHackers.MatterControl.Library;
using MatterHackers.MatterControl.PartPreviewWindow;
using MatterHackers.MeshVisualizer;
using MatterHackers.SerialPortCommunication;
using MatterHackers.VectorMath;
using PrintHistory;
@ -122,6 +123,8 @@ namespace MatterHackers.MatterControl
private int activeLayerIndex;
public InteractiveScene Scene { get; } = new InteractiveScene();
public GCodeRenderInfo RenderInfo { get; set; }
internal void Render3DLayerFeatures()

View file

@ -43,7 +43,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public WorldView World { get; }
public InteractiveScene Scene { get; set; }
public InteractiveScene Scene { get; }
// TODO: Collapse into auto-property
private List<InteractionVolume> interactionVolumes = new List<InteractionVolume>();
@ -57,8 +57,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private string progressReportingPrimaryTask = "";
public InteractionLayer(WorldView world, UndoBuffer undoBuffer, Action notifyPartChanged)
public InteractionLayer(WorldView world, UndoBuffer undoBuffer, Action notifyPartChanged, InteractiveScene scene)
{
this.Scene = scene;
this.World = world;
this.InteractionVolumes = interactionVolumes;
this.undoBuffer = undoBuffer;

View file

@ -92,22 +92,22 @@ namespace MatterHackers.MeshVisualizer
private InteractionLayer interactionLayer;
public MeshViewerWidget(Vector3 displayVolume, Vector2 bedCenter, BedShape bedShape, TrackballTumbleWidget trackballTumbleWidget, InteractionLayer interactionLayer, string startingTextMessage = "")
public MeshViewerWidget(Vector3 displayVolume, Vector2 bedCenter, BedShape bedShape, TrackballTumbleWidget trackballTumbleWidget, InteractionLayer interactionLayer, InteractiveScene _scene, string startingTextMessage = "")
{
interactionLayer.Scene = Scene;
this.scene = _scene;
var activePrintItem = ApplicationController.Instance.ActivePrintItem;
if (activePrintItem != null
&& File.Exists(activePrintItem.FileLocation))
{
Scene.Load(activePrintItem.FileLocation);
scene.Load(activePrintItem.FileLocation);
}
this.interactionLayer = interactionLayer;
this.World = interactionLayer.World;
Scene.SelectionChanged += (sender, e) =>
scene.SelectionChanged += (sender, e) =>
{
Invalidate();
};
@ -169,7 +169,7 @@ namespace MatterHackers.MeshVisualizer
{
AfterDraw += (sender, e) =>
{
foreach (var child in Scene.Children)
foreach (var child in scene.Children)
{
this.World.RenderDebugAABB(e.graphics2D, child.TraceData().GetAxisAlignedBoundingBox());
this.World.RenderDebugAABB(e.graphics2D, child.GetAxisAlignedBoundingBox(Matrix4X4.Identity));
@ -182,7 +182,7 @@ namespace MatterHackers.MeshVisualizer
public override void FindNamedChildrenRecursive(string nameToSearchFor, List<WidgetAndPosition> foundChildren, RectangleDouble touchingBounds, SearchType seachType, bool allowInvalidItems = true)
{
foreach (var child in Scene.Children)
foreach (var child in scene.Children)
{
string object3DName = child.Name;
if (object3DName == null && child.MeshPath != null)
@ -233,7 +233,7 @@ namespace MatterHackers.MeshVisualizer
base.FindNamedChildrenRecursive(nameToSearchFor, foundChildren, touchingBounds, seachType, allowInvalidItems);
}
public InteractiveScene Scene { get; } = new InteractiveScene();
protected InteractiveScene scene { get; }
public Mesh PrinterBed { get { return printerBed; } }
@ -249,7 +249,7 @@ namespace MatterHackers.MeshVisualizer
if (renderType != value)
{
renderType = value;
foreach(var renderTransfrom in Scene.VisibleMeshes(Matrix4X4.Identity))
foreach(var renderTransfrom in scene.VisibleMeshes(Matrix4X4.Identity))
{
renderTransfrom.Mesh.MarkAsChanged();
}
@ -401,7 +401,7 @@ namespace MatterHackers.MeshVisualizer
}
// SetMeshAfterLoad
Scene.ModifyChildren(children =>
scene.ModifyChildren(children =>
{
if (loadedItem.Mesh != null)
{
@ -549,7 +549,7 @@ namespace MatterHackers.MeshVisualizer
foreach(MeshRenderData renderData in object3D.VisibleMeshes(transform))
{
bool isSelected = parentSelected ||
Scene.HasSelection && (object3D == Scene.SelectedItem || Scene.SelectedItem.Children.Contains(object3D));
scene.HasSelection && (object3D == scene.SelectedItem || scene.SelectedItem.Children.Contains(object3D));
RGBA_Bytes drawColor = renderData.Color;
if(object3D.OutputType == PrintOutputTypes.Support)
@ -634,7 +634,7 @@ namespace MatterHackers.MeshVisualizer
private void trackballTumbleWidget_DrawGlContent(object sender, EventArgs e)
{
foreach(var object3D in Scene.Children)
foreach(var object3D in scene.Children)
{
DrawObject(object3D, Matrix4X4.Identity, false);
}
@ -650,7 +650,7 @@ namespace MatterHackers.MeshVisualizer
}
// we don't want to render the bed or build volume before we load a model.
if (Scene.HasChildren || AllowBedRenderingWhenEmpty)
if (scene.HasChildren || AllowBedRenderingWhenEmpty)
{
if (false) // this is code to draw a small axis indicator
{

View file

@ -83,7 +83,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public PrinterActionsBar(View3DWidget modelViewer, PrinterTabPage printerTabPage)
{
UndoBuffer undoBuffer = modelViewer.UndoBuffer;
UndoBuffer undoBuffer = modelViewer.Scene.UndoBuffer;
var defaultMargin = ApplicationController.Instance.Theme.ButtonSpacing;
var buttonFactory = ApplicationController.Instance.Theme.ButtonFactory;

View file

@ -92,7 +92,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
operation.Do();
// Store the operation for undo/redo
view3DWidget.UndoBuffer.Add(operation);
view3DWidget.Scene.UndoBuffer.Add(operation);
}
});
@ -237,7 +237,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
operation.Do();
// Store the operation for undo/redo
view3DWidget.UndoBuffer.Add(operation);
view3DWidget.Scene.UndoBuffer.Add(operation);
}
});
@ -322,7 +322,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
insertOperation.Do();
// Store the operation for undo/redo
view3DWidget.UndoBuffer.Add(insertOperation);
view3DWidget.Scene.UndoBuffer.Add(insertOperation);
}
public static void DeleteSelection(this InteractiveScene Scene, View3DWidget view3DWidget)
@ -334,7 +334,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
deleteOperation.Do();
// Store the operation for undo/redo
view3DWidget.UndoBuffer.Add(deleteOperation);
view3DWidget.Scene.UndoBuffer.Add(deleteOperation);
}
}

View file

@ -61,7 +61,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
if (view3DWidget.Scene.HasSelection)
{
view3DWidget.UndoBuffer.AddAndDo(new UndoRedoActions(() => MirrorOnAxis(0), () => MirrorOnAxis(0)));
view3DWidget.Scene.UndoBuffer.AddAndDo(new UndoRedoActions(() => MirrorOnAxis(0), () => MirrorOnAxis(0)));
throw new NotImplementedException();
@ -81,7 +81,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
if (view3DWidget.Scene.HasSelection)
{
view3DWidget.UndoBuffer.AddAndDo(new UndoRedoActions(() => MirrorOnAxis(1), () => MirrorOnAxis(1)));
view3DWidget.Scene.UndoBuffer.AddAndDo(new UndoRedoActions(() => MirrorOnAxis(1), () => MirrorOnAxis(1)));
throw new NotImplementedException();
@ -101,7 +101,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
if (view3DWidget.Scene.HasSelection)
{
view3DWidget.UndoBuffer.AddAndDo(new UndoRedoActions(() => MirrorOnAxis(2), () => MirrorOnAxis(2)));
view3DWidget.Scene.UndoBuffer.AddAndDo(new UndoRedoActions(() => MirrorOnAxis(2), () => MirrorOnAxis(2)));
throw new NotImplementedException();

View file

@ -67,7 +67,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private bool deferEditorTillMouseUp = false;
public FlowLayoutWidget selectionActionBar;
public UndoBuffer UndoBuffer { get; } = new UndoBuffer();
public readonly int EditButtonHeight = 44;
private ObservableCollection<GuiWidget> extruderButtons = new ObservableCollection<GuiWidget>();
@ -138,6 +137,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public View3DWidget(PrintItemWrapper printItemWrapper, Vector3 viewerVolume, Vector2 bedCenter, BedShape bedShape, WindowMode windowType, AutoRotate autoRotate, ViewControls3D viewControls3D, ThemeConfig theme, OpenMode openMode = OpenMode.Viewing)
{
this.printer = ApplicationController.Instance.Printer;
this.Scene = this.printer.BedPlate.Scene;
this.bedCenter = bedCenter;
this.TrackballTumbleWidget = new TrackballTumbleWidget(ApplicationController.Instance.Printer.BedPlate.World)
@ -146,7 +146,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
};
this.TrackballTumbleWidget.AnchorAll();
this.InteractionLayer = new InteractionLayer(this.World, this.UndoBuffer, this.PartHasBeenChanged)
this.InteractionLayer = new InteractionLayer(this.World, this.Scene.UndoBuffer, this.PartHasBeenChanged, this.Scene)
{
Name = "InteractionLayer",
};
@ -156,7 +156,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
this.theme = theme;
this.openMode = openMode;
allowAutoRotate = (autoRotate == AutoRotate.Enabled);
meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape, this.TrackballTumbleWidget, this.InteractionLayer);
meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape, this.TrackballTumbleWidget, this.InteractionLayer, this.Scene);
this.printItemWrapper = printItemWrapper;
ActiveSliceSettings.SettingChanged.RegisterEvent(CheckSettingChanged, ref unregisterEvents);
@ -552,7 +552,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
case Keys.Z:
if (keyEvent.Control)
{
UndoBuffer.Undo();
this.Scene.UndoBuffer.Undo();
keyEvent.Handled = true;
keyEvent.SuppressKeyPress = true;
}
@ -561,7 +561,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
case Keys.Y:
if (keyEvent.Control)
{
UndoBuffer.Redo();
this.Scene.UndoBuffer.Redo();
keyEvent.Handled = true;
keyEvent.SuppressKeyPress = true;
}
@ -596,7 +596,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public void AddUndoOperation(IUndoRedoCommand operation)
{
UndoBuffer.Add(operation);
this.Scene.UndoBuffer.Add(operation);
}
#region DoBooleanTest
@ -703,9 +703,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private void RemoveBooleanTestGeometry(object sender, DrawEventArgs e)
{
if (meshViewerWidget.Scene.Children.Contains(booleanGroup))
if (this.Scene.Children.Contains(booleanGroup))
{
meshViewerWidget.Scene.Children.Remove(booleanGroup);
this.Scene.Children.Remove(booleanGroup);
UiThread.RunOnIdle(() => Invalidate(), 1.0 / 30.0);
}
}
@ -1250,7 +1250,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Invalidate();
CurrentSelectInfo.DownOnPart = true;
AxisAlignedBoundingBox selectedBounds = meshViewerWidget.Scene.SelectedItem.GetAxisAlignedBoundingBox(Matrix4X4.Identity);
AxisAlignedBoundingBox selectedBounds = this.Scene.SelectedItem.GetAxisAlignedBoundingBox(Matrix4X4.Identity);
if (info.HitPosition.x < selectedBounds.Center.x)
{
@ -1320,7 +1320,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (snapGridDistance > 0)
{
// snap this position to the grid
AxisAlignedBoundingBox selectedBounds = meshViewerWidget.Scene.SelectedItem.GetAxisAlignedBoundingBox(Matrix4X4.Identity);
AxisAlignedBoundingBox selectedBounds = this.Scene.SelectedItem.GetAxisAlignedBoundingBox(Matrix4X4.Identity);
double xSnapOffset = selectedBounds.minXYZ.x;
// snap the x position
@ -2405,7 +2405,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public MeshViewerWidget meshViewerWidget;
// Proxy to MeshViewerWidget
public InteractiveScene Scene => meshViewerWidget.Scene;
public InteractiveScene Scene { get; }
protected ViewControls3D viewControls3D { get; }

@ -1 +1 @@
Subproject commit 119cb3592fabfe1377cd045841cbe76289ee95b6
Subproject commit a4d49aa36f6e5bfd4214287c350de746b41a6bab