Merge branch 'design_tools' of https://github.com/MatterHackers/MatterControl into design_tools

This commit is contained in:
Lars Brubaker 2017-07-07 13:01:22 -07:00
commit 71a7837880
3 changed files with 113 additions and 57 deletions

View file

@ -77,33 +77,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
};
viewControls3D.ViewModeChanged += (s, e) =>
{
switch(e.ViewMode)
{
case PartViewMode.Layers2D:
UserSettings.Instance.set("LayerViewDefault", "2D Layer");
if (gcodeViewer.gcode2DWidget != null)
{
gcodeViewer.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);
}
this.SwitchToLayerView();
break;
case PartViewMode.Layers3D:
UserSettings.Instance.set("LayerViewDefault", "3D Layer");
if (gcodeViewer.gcode2DWidget != null)
{
gcodeViewer.gcode2DWidget.Visible = false;
}
this.SwitchToLayerView();
break;
case PartViewMode.Model:
this.SwitchToModelView();
break;
}
this.ViewMode = e.ViewMode;
};
viewControls3D.ResetView += (sender, e) =>
@ -356,25 +330,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
sideBar.AddPage("Terminal".Localize(), terminalControls);
}
public void SwitchToLayerView()
{
this.ShowSliceLayers = true;
}
public void SwitchToModelView()
{
this.ShowSliceLayers = false;
}
public void ToggleView()
{
this.ShowSliceLayers = !gcodeViewer.Visible;
}
private GCodeFile loadedGCode => printer.BedPlate.LoadedGCode;
private bool showSliceLayers;
public bool ShowSliceLayers
private bool ShowSliceLayers
{
get => showSliceLayers;
set
@ -398,6 +357,49 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
private PartViewMode viewMode;
public PartViewMode ViewMode
{
get => viewMode;
set
{
if (viewMode != value)
{
viewMode = value;
viewControls3D.ViewMode = viewMode;
switch (viewMode)
{
case PartViewMode.Layers2D:
UserSettings.Instance.set("LayerViewDefault", "2D Layer");
if (gcodeViewer.gcode2DWidget != null)
{
gcodeViewer.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);
}
this.ShowSliceLayers = true;
break;
case PartViewMode.Layers3D:
UserSettings.Instance.set("LayerViewDefault", "3D Layer");
if (gcodeViewer.gcode2DWidget != null)
{
gcodeViewer.gcode2DWidget.Visible = false;
}
this.ShowSliceLayers = true;
break;
case PartViewMode.Model:
this.ShowSliceLayers = false;
break;
}
}
}
}
private async void LoadActivePrintItem()
{
await modelViewer.ClearBedAndLoadPrintItemWrapper(printItem);
@ -444,7 +446,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private void TrackballTumbleWidget_DrawGlContent(object sender, EventArgs e)
{
if (loadedGCode == null || printer.BedPlate.GCodeRenderer == null || !this.Visible)
if (loadedGCode == null || printer.BedPlate.GCodeRenderer == null || !gcodeViewer.Visible)
{
return;
}

View file

@ -121,7 +121,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ApplicationController.Instance.Printer.BedPlate.LoadGCode(printItem.GetGCodePathAndFileName(), printerTabPage.gcodeViewer.LoadProgress_Changed);
sliceProgressReporter.EndReporting();
printerTabPage.SwitchToLayerView();
printerTabPage.ViewMode = PartViewMode.Layers3D;
// HACK: directly fire method which previously ran on SlicingDone event on PrintItemWrapper
UiThread.RunOnIdle(printerTabPage.gcodeViewer.CreateAndAddChildren);

View file

@ -28,6 +28,7 @@ either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using MatterHackers.Agg;
@ -143,27 +144,36 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
resetViewButton.Click += (s, e) => ResetView?.Invoke(this, null);
AddChild(resetViewButton);
var buttonGroupA = new ObservableCollection<GuiWidget>();
if (UserSettings.Instance.IsTouchScreen)
{
iconPath = Path.Combine("ViewTransformControls", "rotate.png");
rotateButton = buttonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath, 32, 32));
rotateButton.SiblingRadioButtonList = buttonGroupA;
rotateButton.ToolTipText = "Rotate (Alt + Left Mouse)".Localize();
rotateButton.Margin = new BorderDouble(3);
rotateButton.Margin = 3;
rotateButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.Rotate;
buttonGroupA.Add(rotateButton);
AddChild(rotateButton);
iconPath = Path.Combine("ViewTransformControls", "translate.png");
translateButton = buttonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath, 32, 32));
translateButton.SiblingRadioButtonList = buttonGroupA;
translateButton.ToolTipText = "Move (Shift + Left Mouse)".Localize();
translateButton.Margin = new BorderDouble(3);
translateButton.Margin = 3;
translateButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.Translate;
buttonGroupA.Add(translateButton);
AddChild(translateButton);
iconPath = Path.Combine("ViewTransformControls", "scale.png");
scaleButton = buttonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath, 32, 32));
scaleButton.SiblingRadioButtonList = buttonGroupA;
scaleButton.ToolTipText = "Zoom (Ctrl + Left Mouse)".Localize();
scaleButton.Margin = 3;
scaleButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.Scale;
buttonGroupA.Add(scaleButton);
AddChild(scaleButton);
rotateButton.Checked = true;
@ -176,26 +186,34 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
iconPath = Path.Combine("ViewTransformControls", "partSelect.png");
partSelectButton = buttonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath,32,32));
partSelectButton.SiblingRadioButtonList = buttonGroupA;
partSelectButton.ToolTipText = "Select Part".Localize();
partSelectButton.Visible = false;
partSelectButton.Margin = new BorderDouble(3);
partSelectButton.Margin = 3;
partSelectButton.Click += (s, e) => this.ActiveButton = ViewControls3DButtons.PartSelect;
buttonGroupA.Add(partSelectButton);
AddChild(partSelectButton);
var buttonGroupB = new ObservableCollection<GuiWidget>();
iconPath = Path.Combine("ViewTransformControls", "model.png");
var modelViewButton = buttonFactory.GenerateRadioButton("", StaticData.Instance.LoadIcon(iconPath, 32, 32));
modelViewButton.SiblingRadioButtonList = buttonGroupB;
modelViewButton.Name = "Model View Button";
modelViewButton.Checked = false;
modelViewButton.ToolTipText = "Model".Localize();
modelViewButton.Checked = true;
modelViewButton.Margin = 3;
modelViewButton.Click += SwitchModes_Click;
buttonGroupB.Add(modelViewButton);
AddChild(modelViewButton);
var layers3DButton = buttonFactory.GenerateRadioButton("", Path.Combine("ViewTransformControls", "3d.png"));
layers3DButton.SiblingRadioButtonList = buttonGroupB;
layers3DButton.Name = "Layers3D Button";
layers3DButton.ToolTipText = "3D Layers".Localize();
layers3DButton.Margin = 3;
layers3DButton.Click += SwitchModes_Click;
layers3DButton.Margin = new BorderDouble(3);
buttonGroupB.Add(layers3DButton);
if (!UserSettings.Instance.IsTouchScreen)
{
@ -203,10 +221,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
var layers2DButton = buttonFactory.GenerateRadioButton("", Path.Combine("ViewTransformControls", "2d.png"));
layers2DButton.SiblingRadioButtonList = buttonGroupB;
layers2DButton.Name = "Layers2D Button";
layers2DButton.ToolTipText = "2D Layers".Localize();
layers2DButton.Margin = new BorderDouble(3);
layers2DButton.Margin = 3;
layers2DButton.Click += SwitchModes_Click;
buttonGroupB.Add(layers2DButton);
this.AddChild(layers2DButton);
OverflowButton = new OverflowDropdown(allowLightnessInvert: false)
@ -216,34 +236,68 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Margin = 3
};
AddChild(OverflowButton);
this.ViewMode = PartViewMode.Model;
}
private void SwitchModes_Click(object sender, MouseEventArgs e)
{
if (sender is GuiWidget widget)
{
PartViewMode viewMode;
if (widget.Name == "Layers2D Button")
{
viewMode = PartViewMode.Layers2D;
this.ViewMode = PartViewMode.Layers2D;
}
else if (widget.Name == "Layers3D Button")
{
viewMode = PartViewMode.Layers3D;
this.ViewMode = PartViewMode.Layers3D;
}
else
{
viewMode = PartViewMode.Model;
this.ViewMode = PartViewMode.Model;
}
ViewModeChanged?.Invoke(this, new ViewModeChangedEventArgs()
{
ViewMode = viewMode
ViewMode = this.ViewMode
});
}
}
private PartViewMode viewMode;
public PartViewMode ViewMode
{
get => viewMode;
set
{
if (viewMode != value)
{
viewMode = value;
string controlName;
if (viewMode == PartViewMode.Layers2D)
{
controlName = "Layers2D Button";
}
else if (viewMode == PartViewMode.Layers3D)
{
controlName = "Layers3D Button";
}
else
{
controlName = "Model View Button";
}
var targetChild = Children.Where(c => c.Name == controlName).FirstOrDefault();
if (targetChild != null && targetChild is RadioButton button)
{
button.Checked = true;
}
}
}
}
public override void OnClosed(ClosedEventArgs e)
{
unregisterEvents?.Invoke(this, null);