Move 2D layer view to same context as siblings views
This commit is contained in:
parent
c5363aa077
commit
b2c898be6c
3 changed files with 68 additions and 56 deletions
|
|
@ -46,6 +46,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
private View3DWidget modelViewer;
|
||||
internal ViewGcodeBasic gcodeViewer;
|
||||
internal GCode2DWidget gcode2DWidget;
|
||||
|
||||
private PrintItemWrapper printItem;
|
||||
private ViewControls3D viewControls3D;
|
||||
|
||||
|
|
@ -61,6 +63,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
private ValueDisplayInfo currentLayerInfo;
|
||||
|
||||
private Vector3 viewerVolume;
|
||||
private Vector2 bedCenter;
|
||||
|
||||
public PrinterTabPage(PrinterSettings activeSettings, PrintItemWrapper printItem)
|
||||
{
|
||||
printer = ApplicationController.Instance.Printer;
|
||||
|
|
@ -85,9 +90,36 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
this.ViewMode = e.ViewMode;
|
||||
};
|
||||
|
||||
viewControls3D.TransformStateChanged += (s, e) =>
|
||||
{
|
||||
switch (e.TransformMode)
|
||||
{
|
||||
case ViewControls3DButtons.Translate:
|
||||
if (gcode2DWidget != null)
|
||||
{
|
||||
gcode2DWidget.TransformState = GCode2DWidget.ETransformState.Move;
|
||||
}
|
||||
break;
|
||||
|
||||
case ViewControls3DButtons.Scale:
|
||||
if (gcode2DWidget != null)
|
||||
{
|
||||
gcode2DWidget.TransformState = GCode2DWidget.ETransformState.Scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
viewControls3D.ResetView += (sender, e) =>
|
||||
{
|
||||
modelViewer.meshViewerWidget.ResetView();
|
||||
if (gcode2DWidget.Visible)
|
||||
{
|
||||
gcode2DWidget.CenterPartInView();
|
||||
}
|
||||
else if (modelViewer.Visible)
|
||||
{
|
||||
modelViewer.meshViewerWidget.ResetView();
|
||||
}
|
||||
};
|
||||
viewControls3D.OverflowButton.DynamicPopupContent = () =>
|
||||
{
|
||||
|
|
@ -149,10 +181,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
SetSliderSizes();
|
||||
|
||||
this.viewerVolume = new Vector3(activeSettings.GetValue<Vector2>(SettingsKey.bed_size), buildHeight);
|
||||
this.bedCenter = activeSettings.GetValue<Vector2>(SettingsKey.print_center);
|
||||
|
||||
// The 3D model view
|
||||
modelViewer = new View3DWidget(printItem,
|
||||
new Vector3(activeSettings.GetValue<Vector2>(SettingsKey.bed_size), buildHeight),
|
||||
activeSettings.GetValue<Vector2>(SettingsKey.print_center),
|
||||
this.viewerVolume,
|
||||
this.bedCenter,
|
||||
activeSettings.GetValue<BedShape>(SettingsKey.bed_shape),
|
||||
View3DWidget.WindowMode.Embeded,
|
||||
View3DWidget.AutoRotate.Disabled,
|
||||
|
|
@ -286,6 +321,18 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
},
|
||||
this.GetRenderType,
|
||||
MeshViewerWidget.GetMaterialColor);
|
||||
|
||||
// Close and remove any existing widget reference
|
||||
gcode2DWidget?.Close();
|
||||
|
||||
// Create and append new widget
|
||||
gcode2DWidget = new GCode2DWidget( new Vector2(viewerVolume.x, viewerVolume.y), this.bedCenter)
|
||||
{
|
||||
Visible = (this.ViewMode == PartViewMode.Layers2D)
|
||||
};
|
||||
view3DContainer.AddChild(gcode2DWidget);
|
||||
|
||||
viewControls3D.Layers2DButton.Enabled = true;
|
||||
}
|
||||
|
||||
private RenderType GetRenderType()
|
||||
|
|
@ -390,21 +437,21 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
case PartViewMode.Layers2D:
|
||||
UserSettings.Instance.set("LayerViewDefault", "2D Layer");
|
||||
if (gcodeViewer.gcode2DWidget != null)
|
||||
if (gcode2DWidget != null)
|
||||
{
|
||||
gcodeViewer.gcode2DWidget.Visible = true;
|
||||
gcode2DWidget.Visible = true;
|
||||
|
||||
// HACK: Getting the Layer2D view to show content only works if CenterPartInView is called after the control is visible and after some cycles have passed
|
||||
UiThread.RunOnIdle(gcodeViewer.gcode2DWidget.CenterPartInView);
|
||||
UiThread.RunOnIdle(gcode2DWidget.CenterPartInView);
|
||||
}
|
||||
this.ShowSliceLayers = true;
|
||||
break;
|
||||
|
||||
case PartViewMode.Layers3D:
|
||||
UserSettings.Instance.set("LayerViewDefault", "3D Layer");
|
||||
if (gcodeViewer.gcode2DWidget != null)
|
||||
if (gcode2DWidget != null)
|
||||
{
|
||||
gcodeViewer.gcode2DWidget.Visible = false;
|
||||
gcode2DWidget.Visible = false;
|
||||
}
|
||||
this.ShowSliceLayers = true;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -69,6 +69,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
private RadioButton scaleButton;
|
||||
private RadioButton partSelectButton;
|
||||
|
||||
public RadioButton Layers2DButton;
|
||||
|
||||
private EventHandler unregisterEvents;
|
||||
|
||||
private ViewControls3DButtons activeTransformState = ViewControls3DButtons.Rotate;
|
||||
|
|
@ -222,14 +224,15 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
}
|
||||
|
||||
iconPath = Path.Combine("ViewTransformControls", "2d.png");
|
||||
var layers2DButton = buttonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath, 32, 32));
|
||||
layers2DButton.SiblingRadioButtonList = buttonGroupB;
|
||||
layers2DButton.Name = "Layers2D Button";
|
||||
layers2DButton.ToolTipText = "2D Layers".Localize();
|
||||
layers2DButton.Margin = 3;
|
||||
layers2DButton.Click += SwitchModes_Click;
|
||||
buttonGroupB.Add(layers2DButton);
|
||||
this.AddChild(layers2DButton);
|
||||
Layers2DButton = buttonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath, 32, 32));
|
||||
Layers2DButton.SiblingRadioButtonList = buttonGroupB;
|
||||
Layers2DButton.Name = "Layers2D Button";
|
||||
Layers2DButton.ToolTipText = "2D Layers".Localize();
|
||||
Layers2DButton.Enabled = false;
|
||||
Layers2DButton.Margin = 3;
|
||||
Layers2DButton.Click += SwitchModes_Click;
|
||||
buttonGroupB.Add(Layers2DButton);
|
||||
this.AddChild(Layers2DButton);
|
||||
|
||||
OverflowButton = new OverflowDropdown(allowLightnessInvert: false)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
public class ViewGcodeBasic : GuiWidget
|
||||
{
|
||||
private TextWidget gcodeProcessingStateInfoText;
|
||||
internal GCode2DWidget gcode2DWidget;
|
||||
private PrintItemWrapper printItem => ApplicationController.Instance.ActivePrintItem;
|
||||
|
||||
private GuiWidget gcodeDisplayWidget;
|
||||
|
|
@ -132,7 +131,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
CloseAllChildren();
|
||||
|
||||
gcode2DWidget = null;
|
||||
gcodeProcessingStateInfoText = null;
|
||||
|
||||
var mainContainerTopToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom)
|
||||
|
|
@ -154,15 +152,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
bool isGCode = Path.GetExtension(printItem.FileLocation).ToUpper() == ".GCODE";
|
||||
|
||||
string gcodeFilePath = isGCode ? printItem.FileLocation : printItem.GetGCodePathAndFileName();
|
||||
if (File.Exists(gcodeFilePath))
|
||||
{
|
||||
gcode2DWidget = new GCode2DWidget(new Vector2(viewerVolume.x, viewerVolume.y), bedCenter)
|
||||
{
|
||||
Visible = (activeViewMode == PartViewMode.Layers2D)
|
||||
};
|
||||
gcodeDisplayWidget.AddChild(gcode2DWidget);
|
||||
}
|
||||
else
|
||||
if (!File.Exists(gcodeFilePath))
|
||||
{
|
||||
SetProcessingMessage(string.Format("{0}\n'{1}'", fileNotFoundMessage, printItem.Name));
|
||||
}
|
||||
|
|
@ -172,37 +162,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
this.AddChild(mainContainerTopToBottom);
|
||||
|
||||
viewControls3D.ResetView += (sender, e) =>
|
||||
{
|
||||
if (gcodeDisplayWidget.Visible)
|
||||
{
|
||||
gcode2DWidget.CenterPartInView();
|
||||
}
|
||||
};
|
||||
viewControls3D.TransformStateChanged += (s, e) =>
|
||||
{
|
||||
switch (e.TransformMode)
|
||||
{
|
||||
case ViewControls3DButtons.Translate:
|
||||
if (gcode2DWidget != null)
|
||||
{
|
||||
gcode2DWidget.TransformState = GCode2DWidget.ETransformState.Move;
|
||||
}
|
||||
break;
|
||||
|
||||
case ViewControls3DButtons.Scale:
|
||||
if (gcode2DWidget != null)
|
||||
{
|
||||
gcode2DWidget.TransformState = GCode2DWidget.ETransformState.Scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
// *************** AddGCodeFileControls ***************
|
||||
SetProcessingMessage("");
|
||||
if (gcode2DWidget != null
|
||||
&& loadedGCode == null)
|
||||
if (loadedGCode == null)
|
||||
{
|
||||
// If we have finished loading the gcode and the source file exists but we don't have any loaded gcode it is because the loader decided to not load it.
|
||||
if (File.Exists(printItem.FileLocation))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue