More generic dependencies to break Part view coupling to Printer
This commit is contained in:
parent
fee3871cfb
commit
8f9953ef12
9 changed files with 164 additions and 166 deletions
|
|
@ -81,7 +81,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
}
|
||||
else
|
||||
{
|
||||
PlusTabPage.CreatePartTab(tabControl, printerConfig, theme, printItem, 0);
|
||||
PlusTabPage.CreatePartTab(tabControl, printerConfig.Bed, theme, printItem, 0);
|
||||
}
|
||||
|
||||
// TODO: add in the printers and designs that are currently open (or were open last run).
|
||||
|
|
@ -186,7 +186,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
var printerTab = new MainTab(
|
||||
tabTitle,
|
||||
"3D View Tab",
|
||||
new PrinterTabPage(PrinterConnection.Instance, printerConfig, theme, printItem, tabTitle.ToUpper()),
|
||||
new PrinterTabPage(printerConfig, theme, printItem, tabTitle.ToUpper()),
|
||||
"https://www.google.com/s2/favicons?domain=www.printrbot.com" // "https://www.google.com/s2/favicons?domain=www.lulzbot.com"
|
||||
);
|
||||
printerTab.ToolTipText = "Preview 3D Design".Localize();
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
createItemsSection.AddChild(createPart);
|
||||
createPart.Click += (s, e) =>
|
||||
{
|
||||
CreatePartTab(tabControl, printer, theme, printItem);
|
||||
CreatePartTab(tabControl, new BedConfig(null), theme, printItem);
|
||||
};
|
||||
|
||||
var createPrinter = theme.ButtonFactory.Generate("Create Printer".Localize());
|
||||
|
|
@ -155,12 +155,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
}
|
||||
}
|
||||
|
||||
internal static void CreatePartTab(TabControl tabControl, PrinterConfig printer, ThemeConfig theme, PrintItemWrapper printItem, int tabIndex = 1)
|
||||
internal static void CreatePartTab(TabControl tabControl, BedConfig sceneContext, ThemeConfig theme, PrintItemWrapper printItem, int tabIndex = 1)
|
||||
{
|
||||
var partTab = new MainTab(
|
||||
"New Part",
|
||||
"newPart" + tabControl.TabCount,
|
||||
new PrinterTabBase(printer, theme, printItem, "xxxxx"),
|
||||
new PrinterTabBase(sceneContext, theme, printItem, "xxxxx"),
|
||||
"https://i.imgur.com/nkeYgfU.png");
|
||||
|
||||
theme.SetPrinterTabStyles(partTab);
|
||||
|
|
|
|||
|
|
@ -44,22 +44,22 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
private PrintItemWrapper printItem;
|
||||
protected ViewControls3D viewControls3D;
|
||||
|
||||
protected PrinterConfig printer;
|
||||
protected BedConfig sceneContext;
|
||||
protected ThemeConfig theme;
|
||||
|
||||
protected GuiWidget view3DContainer;
|
||||
protected FlowLayoutWidget topToBottom;
|
||||
protected FlowLayoutWidget leftToRight;
|
||||
|
||||
public PrinterTabBase(PrinterConfig printer, ThemeConfig theme, PrintItemWrapper printItem, string tabTitle)
|
||||
public PrinterTabBase(BedConfig sceneContext, ThemeConfig theme, PrintItemWrapper printItem, string tabTitle)
|
||||
: base (tabTitle)
|
||||
{
|
||||
this.printer = printer;
|
||||
this.sceneContext = sceneContext;
|
||||
this.theme = theme;
|
||||
this.BackgroundColor = theme.TabBodyBackground;
|
||||
this.Padding = 0;
|
||||
|
||||
viewControls3D = new ViewControls3D(theme, printer.Bed.Scene.UndoBuffer)
|
||||
viewControls3D = new ViewControls3D(theme, sceneContext.Scene.UndoBuffer)
|
||||
{
|
||||
PartSelectVisible = false,
|
||||
VAnchor = VAnchor.Top | VAnchor.Fit | VAnchor.Absolute,
|
||||
|
|
@ -82,8 +82,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
bool isPrinterType = this.GetType() == typeof(PrinterTabPage);
|
||||
|
||||
// The 3D model view
|
||||
modelViewer = new View3DWidget(PrinterConnection.Instance, printItem,
|
||||
printer,
|
||||
modelViewer = new View3DWidget(
|
||||
printItem,
|
||||
sceneContext,
|
||||
View3DWidget.AutoRotate.Disabled,
|
||||
viewControls3D,
|
||||
theme,
|
||||
|
|
|
|||
|
|
@ -46,7 +46,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
public class PrinterTabPage : PrinterTabBase
|
||||
{
|
||||
internal GCode2DWidget gcode2DWidget;
|
||||
|
||||
// TODO: REMOVE *****************************************************************
|
||||
PrinterConnection printerConnection;
|
||||
|
||||
private View3DConfig gcodeOptions;
|
||||
private DoubleSolidSlider layerRenderRatioSlider;
|
||||
private SolidSlider selectLayerSlider;
|
||||
|
|
@ -55,13 +58,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
private ValueDisplayInfo currentLayerInfo;
|
||||
private SystemWindow parentSystemWindow;
|
||||
|
||||
public PrinterTabPage(PrinterConnection printerConnection, PrinterConfig printer, ThemeConfig theme, PrintItemWrapper printItem, string tabTitle)
|
||||
: base(printer, theme, printItem, tabTitle)
|
||||
private PrinterConfig printer;
|
||||
|
||||
public PrinterTabPage(PrinterConfig printer, ThemeConfig theme, PrintItemWrapper printItem, string tabTitle)
|
||||
: base(printer.Bed, theme, printItem, tabTitle)
|
||||
{
|
||||
this.printerConnection = printerConnection;
|
||||
this.printerConnection = printer.Connection;
|
||||
this.printer = printer;
|
||||
modelViewer.meshViewerWidget.EditorMode = MeshViewerWidget.EditorType.Printer;
|
||||
|
||||
gcodeOptions = printer.Bed.RendererOptions;
|
||||
gcodeOptions = sceneContext.RendererOptions;
|
||||
|
||||
viewControls3D.TransformStateChanged += (s, e) =>
|
||||
{
|
||||
|
|
@ -118,7 +124,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
if (printer?.Bed?.RenderInfo != null)
|
||||
{
|
||||
printer.Bed.ActiveLayerIndex = (int)(selectLayerSlider.Value + .5);
|
||||
sceneContext.ActiveLayerIndex = (int)(selectLayerSlider.Value + .5);
|
||||
}
|
||||
|
||||
// show the layer info next to the slider
|
||||
|
|
@ -129,8 +135,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
layerRenderRatioSlider.FirstValue = 0;
|
||||
layerRenderRatioSlider.FirstValueChanged += (s, e) =>
|
||||
{
|
||||
printer.Bed.RenderInfo.FeatureToStartOnRatio0To1 = layerRenderRatioSlider.FirstValue;
|
||||
printer.Bed.RenderInfo.FeatureToEndOnRatio0To1 = layerRenderRatioSlider.SecondValue;
|
||||
sceneContext.RenderInfo.FeatureToStartOnRatio0To1 = layerRenderRatioSlider.FirstValue;
|
||||
sceneContext.RenderInfo.FeatureToEndOnRatio0To1 = layerRenderRatioSlider.SecondValue;
|
||||
|
||||
this.Invalidate();
|
||||
};
|
||||
|
|
@ -139,8 +145,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
if (printer?.Bed?.RenderInfo != null)
|
||||
{
|
||||
printer.Bed.RenderInfo.FeatureToStartOnRatio0To1 = layerRenderRatioSlider.FirstValue;
|
||||
printer.Bed.RenderInfo.FeatureToEndOnRatio0To1 = layerRenderRatioSlider.SecondValue;
|
||||
sceneContext.RenderInfo.FeatureToStartOnRatio0To1 = layerRenderRatioSlider.FirstValue;
|
||||
sceneContext.RenderInfo.FeatureToEndOnRatio0To1 = layerRenderRatioSlider.SecondValue;
|
||||
}
|
||||
|
||||
this.Invalidate();
|
||||
|
|
@ -153,7 +159,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
currentLayerInfo.EditComplete += (s, e) =>
|
||||
{
|
||||
printer.Bed.ActiveLayerIndex = (int)currentLayerInfo.Value - 1;
|
||||
sceneContext.ActiveLayerIndex = (int)currentLayerInfo.Value - 1;
|
||||
};
|
||||
|
||||
AddSettingsTabBar(leftToRight, modelViewer);
|
||||
|
|
@ -163,10 +169,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
view3DContainer.AddChild(layerCountText);
|
||||
view3DContainer.AddChild(layerStartText);
|
||||
|
||||
printer.Bed.ActiveLayerChanged += SetPositionAndValue;
|
||||
sceneContext.ActiveLayerChanged += SetPositionAndValue;
|
||||
selectLayerSlider.MouseEnter += SetPositionAndValue;
|
||||
|
||||
printer.Bed.LoadedGCodeChanged += BedPlate_LoadedGCodeChanged;
|
||||
sceneContext.LoadedGCodeChanged += BedPlate_LoadedGCodeChanged;
|
||||
|
||||
this.ShowSliceLayers = false;
|
||||
|
||||
|
|
@ -184,12 +190,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
Padding = theme.ToolbarPadding
|
||||
}, 0);
|
||||
printer.Bed.ActiveLayerChanged += ActiveLayer_Changed;
|
||||
sceneContext.ActiveLayerChanged += ActiveLayer_Changed;
|
||||
|
||||
SetSliderSizes();
|
||||
}
|
||||
|
||||
private GCodeFile loadedGCode => printer.Bed.LoadedGCode;
|
||||
private GCodeFile loadedGCode => sceneContext.LoadedGCode;
|
||||
|
||||
private bool showSliceLayers;
|
||||
private bool ShowSliceLayers
|
||||
|
|
@ -207,7 +213,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
modelViewer.Scene.ClearSelection();
|
||||
}
|
||||
|
||||
var slidersVisible = printer.Bed.RenderInfo != null && value;
|
||||
var slidersVisible = sceneContext.RenderInfo != null && value;
|
||||
|
||||
selectLayerSlider.Visible = slidersVisible;
|
||||
layerRenderRatioSlider.Visible = slidersVisible;
|
||||
|
|
@ -261,7 +267,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
private void BedPlate_LoadedGCodeChanged(object sender, EventArgs e)
|
||||
{
|
||||
var layerCount = printer.Bed.LoadedGCode.LayerCount;
|
||||
var layerCount = sceneContext.LoadedGCode.LayerCount;
|
||||
selectLayerSlider.Maximum = layerCount - 1;
|
||||
|
||||
layerCountText.Text = layerCount.ToString();
|
||||
|
|
@ -269,7 +275,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
layerStartText.Visible = true;
|
||||
|
||||
// ResetRenderInfo
|
||||
printer.Bed.RenderInfo = new GCodeRenderInfo(
|
||||
sceneContext.RenderInfo = new GCodeRenderInfo(
|
||||
0,
|
||||
1,
|
||||
Agg.Transform.Affine.NewIdentity(),
|
||||
|
|
@ -287,10 +293,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
// Close and remove any existing widget reference
|
||||
gcode2DWidget?.Close();
|
||||
|
||||
var viewerVolume = printer.Bed.ViewerVolume;
|
||||
var viewerVolume = sceneContext.ViewerVolume;
|
||||
|
||||
// Create and append new widget
|
||||
gcode2DWidget = new GCode2DWidget(new Vector2(viewerVolume.x, viewerVolume.y), printer.Bed.BedCenter)
|
||||
gcode2DWidget = new GCode2DWidget(new Vector2(viewerVolume.x, viewerVolume.y), sceneContext.BedCenter)
|
||||
{
|
||||
Visible = (this.ViewMode == PartViewMode.Layers2D)
|
||||
};
|
||||
|
|
@ -389,9 +395,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
private void ActiveLayer_Changed(object sender, EventArgs e)
|
||||
{
|
||||
if (selectLayerSlider != null
|
||||
&& printer.Bed.ActiveLayerIndex != (int)(selectLayerSlider.Value + .5))
|
||||
&& sceneContext.ActiveLayerIndex != (int)(selectLayerSlider.Value + .5))
|
||||
{
|
||||
selectLayerSlider.Value = printer.Bed.ActiveLayerIndex;
|
||||
selectLayerSlider.Value = sceneContext.ActiveLayerIndex;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -399,7 +405,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
currentLayerInfo.Value = printer.Bed.ActiveLayerIndex;
|
||||
currentLayerInfo.Value = sceneContext.ActiveLayerIndex;
|
||||
//currentLayerInfo.DebugShowBounds = true;
|
||||
currentLayerInfo.OriginRelativeParent = selectLayerSlider.OriginRelativeParent
|
||||
+ new Vector2(-currentLayerInfo.Width - 10, selectLayerSlider.PositionPixelsFromFirstValue - currentLayerInfo.Height / 2);
|
||||
|
|
@ -553,10 +559,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
parentSystemWindow.KeyDown -= Parent_KeyDown;
|
||||
}
|
||||
|
||||
printer.Bed.ActiveLayerChanged -= ActiveLayer_Changed;
|
||||
printer.Bed.LoadedGCodeChanged -= BedPlate_LoadedGCodeChanged;
|
||||
sceneContext.ActiveLayerChanged -= ActiveLayer_Changed;
|
||||
sceneContext.LoadedGCodeChanged -= BedPlate_LoadedGCodeChanged;
|
||||
|
||||
printer.Bed.ActiveLayerChanged -= SetPositionAndValue;
|
||||
sceneContext.ActiveLayerChanged -= SetPositionAndValue;
|
||||
selectLayerSlider.MouseEnter -= SetPositionAndValue;
|
||||
|
||||
base.OnClosed(e);
|
||||
|
|
@ -569,10 +575,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
switch (keyEvent.KeyCode)
|
||||
{
|
||||
case Keys.Up:
|
||||
printer.Bed.ActiveLayerIndex += 1;
|
||||
sceneContext.ActiveLayerIndex += 1;
|
||||
break;
|
||||
case Keys.Down:
|
||||
printer.Bed.ActiveLayerIndex -= 1;
|
||||
sceneContext.ActiveLayerIndex -= 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,9 +34,7 @@ using System.Linq;
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MatterHackers.Agg;
|
||||
using MatterHackers.Agg.Image;
|
||||
using MatterHackers.Agg.OpenGlGui;
|
||||
using MatterHackers.Agg.Platform;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.MatterControl;
|
||||
|
|
@ -45,7 +43,6 @@ using MatterHackers.PolygonMesh;
|
|||
using MatterHackers.RenderOpenGl;
|
||||
using MatterHackers.RenderOpenGl.OpenGl;
|
||||
using MatterHackers.VectorMath;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace MatterHackers.MeshVisualizer
|
||||
{
|
||||
|
|
@ -79,13 +76,13 @@ namespace MatterHackers.MeshVisualizer
|
|||
|
||||
private InteractionLayer interactionLayer;
|
||||
|
||||
private PrinterConfig printerConfig;
|
||||
private BedConfig sceneContext;
|
||||
|
||||
public MeshViewerWidget(PrinterConfig printerConfig, InteractionLayer interactionLayer, string startingTextMessage = "", EditorType editorType = EditorType.Part)
|
||||
public MeshViewerWidget(BedConfig sceneContext, InteractionLayer interactionLayer, string startingTextMessage = "", EditorType editorType = EditorType.Part)
|
||||
{
|
||||
this.EditorMode = editorType;
|
||||
this.scene = printerConfig.Bed.Scene;
|
||||
this.printerConfig = printerConfig;
|
||||
this.scene = sceneContext.Scene;
|
||||
this.sceneContext = sceneContext;
|
||||
|
||||
var activePrintItem = ApplicationController.Instance.ActivePrintItem;
|
||||
|
||||
|
|
@ -163,56 +160,6 @@ namespace MatterHackers.MeshVisualizer
|
|||
};
|
||||
}
|
||||
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
string url = printerConfig.Settings.GetValue("PrinterShapeUrl");
|
||||
string extension = printerConfig.Settings.GetValue("PrinterShapeExtension");
|
||||
|
||||
if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(extension))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using (var stream = ApplicationController.Instance.LoadHttpAsset(url))
|
||||
{
|
||||
var mesh = MeshFileIo.Load(stream, extension, CancellationToken.None).Mesh;
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
printerShape = mesh;
|
||||
this.Invalidate();
|
||||
Task.Run(() =>
|
||||
{
|
||||
BspNode bspTree = null;
|
||||
// if there is a chached bsp tree load it
|
||||
var meshHashCode = mesh.GetLongHashCode();
|
||||
string cachePath = ApplicationController.CacheablePath("MeshBspData", $"{meshHashCode}.bsp");
|
||||
if (File.Exists(cachePath))
|
||||
{
|
||||
JsonConvert.DeserializeObject<BspNode>(File.ReadAllText(cachePath));
|
||||
}
|
||||
else
|
||||
{
|
||||
// else calculate it
|
||||
bspTree = FaceBspTree.Create(mesh, 20, true);
|
||||
// and save it
|
||||
File.WriteAllText(cachePath, JsonConvert.SerializeObject(bspTree));
|
||||
}
|
||||
|
||||
// set the mesh to use the new tree
|
||||
UiThread.RunOnIdle(() => mesh.FaceBspTree = bspTree);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
base.OnLoad(args);
|
||||
}
|
||||
|
||||
|
|
@ -509,8 +456,6 @@ namespace MatterHackers.MeshVisualizer
|
|||
}
|
||||
}
|
||||
|
||||
private Mesh printerShape;
|
||||
|
||||
public enum EditorType { Printer, Part }
|
||||
|
||||
public EditorType EditorMode { get; set; } = EditorType.Part;
|
||||
|
|
@ -597,16 +542,16 @@ namespace MatterHackers.MeshVisualizer
|
|||
{
|
||||
bedColor = new RGBA_Bytes(this.BedColor, this.BedColor.alpha / 4);
|
||||
}
|
||||
GLHelper.Render(printerConfig.Bed.Mesh, bedColor, RenderTypes.Shaded, World.ModelviewMatrix);
|
||||
if (printerShape != null)
|
||||
GLHelper.Render(sceneContext.Mesh, bedColor, RenderTypes.Shaded, World.ModelviewMatrix);
|
||||
if (sceneContext.PrinterShape != null)
|
||||
{
|
||||
GLHelper.Render(printerShape, bedColor, RenderTypes.Shaded, World.ModelviewMatrix);
|
||||
GLHelper.Render(sceneContext.PrinterShape, bedColor, RenderTypes.Shaded, World.ModelviewMatrix);
|
||||
}
|
||||
}
|
||||
|
||||
if (printerConfig.Bed.BuildVolumeMesh != null && RenderBuildVolume)
|
||||
if (sceneContext.BuildVolumeMesh != null && RenderBuildVolume)
|
||||
{
|
||||
GLHelper.Render(printerConfig.Bed.BuildVolumeMesh, this.BuildVolumeColor, RenderTypes.Shaded, World.ModelviewMatrix);
|
||||
GLHelper.Render(sceneContext.BuildVolumeMesh, this.BuildVolumeColor, RenderTypes.Shaded, World.ModelviewMatrix);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -626,7 +571,6 @@ namespace MatterHackers.MeshVisualizer
|
|||
|
||||
GL.Vertex3(width, i, 0);
|
||||
GL.Vertex3(-width, i, 0);
|
||||
|
||||
}
|
||||
|
||||
GL.Color4(255, 0, 0, 255);
|
||||
|
|
|
|||
|
|
@ -120,13 +120,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
private ThemeConfig theme;
|
||||
|
||||
private PrinterConfig printer;
|
||||
|
||||
public Vector3 BedCenter
|
||||
{
|
||||
get
|
||||
{
|
||||
return new Vector3(printer.Bed.BedCenter);
|
||||
return new Vector3(sceneContext.BedCenter);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -138,15 +136,15 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
internal ViewGcodeBasic gcodeViewer;
|
||||
|
||||
public InteractionLayer InteractionLayer { get; }
|
||||
PrinterConnection printerConnection;
|
||||
|
||||
public View3DWidget(PrinterConnection printerConnection, PrintItemWrapper printItemWrapper, PrinterConfig printer, AutoRotate autoRotate, ViewControls3D viewControls3D, ThemeConfig theme, OpenMode openMode = OpenMode.Viewing, MeshViewerWidget.EditorType editorType = MeshViewerWidget.EditorType.Part)
|
||||
private BedConfig sceneContext;
|
||||
|
||||
public View3DWidget(PrintItemWrapper printItemWrapper, BedConfig sceneContext, AutoRotate autoRotate, ViewControls3D viewControls3D, ThemeConfig theme, OpenMode openMode = OpenMode.Viewing, MeshViewerWidget.EditorType editorType = MeshViewerWidget.EditorType.Part)
|
||||
{
|
||||
this.printerConnection = printerConnection;
|
||||
var smallMarginButtonFactory = theme.SmallMarginButtonFactory;
|
||||
|
||||
this.printer = printer;
|
||||
this.Scene = this.printer.Bed.Scene;
|
||||
this.sceneContext = sceneContext;
|
||||
this.Scene = sceneContext.Scene;
|
||||
|
||||
this.TrackballTumbleWidget = new TrackballTumbleWidget(ApplicationController.Instance.Printer.Bed.World)
|
||||
{
|
||||
|
|
@ -179,12 +177,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
};
|
||||
|
||||
// MeshViewer
|
||||
meshViewerWidget = new MeshViewerWidget(printer, this.InteractionLayer, editorType: editorType);
|
||||
meshViewerWidget = new MeshViewerWidget(sceneContext, this.InteractionLayer, editorType: editorType);
|
||||
meshViewerWidget.AnchorAll();
|
||||
this.InteractionLayer.AddChild(meshViewerWidget);
|
||||
|
||||
// The slice layers view
|
||||
gcodeViewer = new ViewGcodeBasic(printer, viewControls3D);
|
||||
gcodeViewer = new ViewGcodeBasic(sceneContext, viewControls3D);
|
||||
gcodeViewer.AnchorAll();
|
||||
gcodeViewer.Visible = false;
|
||||
this.InteractionLayer.AddChild(gcodeViewer);
|
||||
|
|
@ -486,17 +484,39 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
UiThread.RunOnIdle(AutoSpin);
|
||||
|
||||
if (printer.Bed.RendererOptions.SyncToPrint)
|
||||
if (sceneContext.RendererOptions.SyncToPrint)
|
||||
{
|
||||
printerConnection.CommunicationStateChanged.RegisterEvent(SetEditControlsBasedOnPrinterState, ref unregisterEvents);
|
||||
|
||||
// make sure we lock the controls if we are printing or paused
|
||||
switch (printerConnection.CommunicationState)
|
||||
if (sceneContext.Printer != null)
|
||||
{
|
||||
case CommunicationStates.Printing:
|
||||
case CommunicationStates.Paused:
|
||||
LockEditControls();
|
||||
break;
|
||||
sceneContext.Printer.Connection.CommunicationStateChanged.RegisterEvent(
|
||||
(s, e) =>
|
||||
{
|
||||
if (sceneContext.RendererOptions.SyncToPrint
|
||||
&& sceneContext.Printer != null)
|
||||
{
|
||||
switch (sceneContext.Printer.Connection.CommunicationState)
|
||||
{
|
||||
case CommunicationStates.Printing:
|
||||
case CommunicationStates.Paused:
|
||||
LockEditControls();
|
||||
break;
|
||||
|
||||
default:
|
||||
UnlockEditControls();
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
ref unregisterEvents);
|
||||
|
||||
// make sure we lock the controls if we are printing or paused
|
||||
switch (sceneContext.Printer.Connection.CommunicationState)
|
||||
{
|
||||
case CommunicationStates.Printing:
|
||||
case CommunicationStates.Paused:
|
||||
LockEditControls();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -624,12 +644,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
// This shows the BVH as rects around the scene items
|
||||
//Scene?.TraceData().RenderBvhRecursive(0, 3);
|
||||
|
||||
if (gcodeViewer?.loadedGCode == null || printer.Bed.GCodeRenderer == null || !gcodeViewer.Visible)
|
||||
if (sceneContext.LoadedGCode == null || sceneContext.GCodeRenderer == null || !gcodeViewer.Visible)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
printer.Bed.Render3DLayerFeatures(e);
|
||||
sceneContext.Render3DLayerFeatures(e);
|
||||
}
|
||||
|
||||
public override void OnKeyDown(KeyEventArgs keyEvent)
|
||||
|
|
@ -1515,7 +1535,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
world.Reset();
|
||||
world.Scale = .03;
|
||||
world.Translate(-new Vector3(printer.Bed.BedCenter));
|
||||
world.Translate(-new Vector3(sceneContext.BedCenter));
|
||||
world.Rotate(Quaternion.FromEulerAngles(new Vector3(0, 0, MathHelper.Tau / 16)));
|
||||
world.Rotate(Quaternion.FromEulerAngles(new Vector3(-MathHelper.Tau * .19, 0, 0)));
|
||||
}
|
||||
|
|
@ -2243,9 +2263,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
private void meshViewerWidget_LoadDone(object sender, EventArgs e)
|
||||
{
|
||||
if (printer.Bed.RendererOptions.SyncToPrint)
|
||||
if (sceneContext.RendererOptions.SyncToPrint)
|
||||
{
|
||||
switch (printerConnection.CommunicationState)
|
||||
switch (sceneContext.Printer?.Connection.CommunicationState)
|
||||
{
|
||||
case CommunicationStates.Printing:
|
||||
case CommunicationStates.Paused:
|
||||
|
|
@ -2350,24 +2370,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
this.saveAsWindow = null;
|
||||
}
|
||||
|
||||
private void SetEditControlsBasedOnPrinterState(object sender, EventArgs e)
|
||||
{
|
||||
if (printer.Bed.RendererOptions.SyncToPrint)
|
||||
{
|
||||
switch (printerConnection.CommunicationState)
|
||||
{
|
||||
case CommunicationStates.Printing:
|
||||
case CommunicationStates.Paused:
|
||||
LockEditControls();
|
||||
break;
|
||||
|
||||
default:
|
||||
UnlockEditControls();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Vector2 DragSelectionStartPosition { get; private set; }
|
||||
public bool DragSelectionInProgress { get; private set; }
|
||||
public Vector2 DragSelectionEndPosition { get; private set; }
|
||||
|
|
|
|||
|
|
@ -52,13 +52,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
private string fileNotFoundMessage = "File not found on disk.".Localize();
|
||||
private string fileTooBigToLoad = "GCode file too big to preview ({0}).".Localize();
|
||||
|
||||
private PrinterConfig printer;
|
||||
private BedConfig sceneContext;
|
||||
|
||||
private ViewControls3D viewControls3D;
|
||||
|
||||
public ViewGcodeBasic(PrinterConfig printer, ViewControls3D viewControls3D)
|
||||
public ViewGcodeBasic(BedConfig sceneContext, ViewControls3D viewControls3D)
|
||||
{
|
||||
this.printer = printer;
|
||||
this.sceneContext = sceneContext;
|
||||
this.viewControls3D = viewControls3D;
|
||||
|
||||
CreateAndAddChildren();
|
||||
|
|
@ -69,17 +69,15 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
if (stringEvent.Data == "extruder_offset")
|
||||
{
|
||||
printer.Bed.GCodeRenderer?.Clear3DGCode();
|
||||
sceneContext.GCodeRenderer?.Clear3DGCode();
|
||||
}
|
||||
}
|
||||
}, ref unregisterEvents);
|
||||
|
||||
// TODO: Why do we clear GCode on AdvancedControlsPanelReloading - assume some slice settings should invalidate. If so, code should be more specific and bound to slice settings changed
|
||||
ApplicationController.Instance.AdvancedControlsPanelReloading.RegisterEvent((s, e) => printer.Bed.GCodeRenderer?.Clear3DGCode(), ref unregisterEvents);
|
||||
ApplicationController.Instance.AdvancedControlsPanelReloading.RegisterEvent((s, e) => sceneContext.GCodeRenderer?.Clear3DGCode(), ref unregisterEvents);
|
||||
}
|
||||
|
||||
internal GCodeFile loadedGCode => printer.Bed.LoadedGCode;
|
||||
|
||||
internal void CreateAndAddChildren()
|
||||
{
|
||||
CloseAllChildren();
|
||||
|
|
@ -98,9 +96,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
VAnchor = VAnchor.Stretch
|
||||
};
|
||||
|
||||
if (!File.Exists(printer.Bed.GCodePath))
|
||||
if (!File.Exists(sceneContext.GCodePath))
|
||||
{
|
||||
SetProcessingMessage($"{fileNotFoundMessage}\n'{printer.Bed.GCodePath}'");
|
||||
SetProcessingMessage($"{fileNotFoundMessage}\n'{sceneContext.GCodePath}'");
|
||||
}
|
||||
|
||||
mainContainerTopToBottom.AddChild(gcodeDisplayWidget);
|
||||
|
|
@ -109,23 +107,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
// *************** AddGCodeFileControls ***************
|
||||
SetProcessingMessage("");
|
||||
if (loadedGCode == null)
|
||||
if (sceneContext.LoadedGCode == null)
|
||||
{
|
||||
SetProcessingMessage($"{fileNotFoundMessage}\n'{printer.Bed.GCodePath}'");
|
||||
SetProcessingMessage($"{fileNotFoundMessage}\n'{sceneContext.GCodePath}'");
|
||||
}
|
||||
|
||||
if (loadedGCode?.LineCount > 0)
|
||||
if (sceneContext.LoadedGCode?.LineCount > 0)
|
||||
{
|
||||
gradientWidget = new ColorGradientWidget(loadedGCode)
|
||||
gradientWidget = new ColorGradientWidget(sceneContext.LoadedGCode)
|
||||
{
|
||||
Margin = new BorderDouble(top: 55, left: 11),
|
||||
HAnchor = HAnchor.Fit | HAnchor.Left,
|
||||
VAnchor = VAnchor.Top,
|
||||
Visible = printer.Bed.RendererOptions.RenderSpeeds
|
||||
Visible = sceneContext.RendererOptions.RenderSpeeds
|
||||
};
|
||||
AddChild(gradientWidget);
|
||||
|
||||
var gcodeDetails = new GCodeDetails(this.loadedGCode);
|
||||
var gcodeDetails = new GCodeDetails(sceneContext.LoadedGCode);
|
||||
|
||||
this.AddChild(new GCodeDetailsView(gcodeDetails)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue