Move InteractiveScene ownership from MeshViewer to PrinterConfig model
This commit is contained in:
parent
6e1ba18984
commit
3446bc00e9
8 changed files with 38 additions and 34 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue