Working on 3D gcode view

Making the view navigation controls for 2d and 3d a separate class.
This commit is contained in:
larsbrubaker 2014-05-25 11:11:11 -07:00
parent ad227e1f9d
commit 00e10bfbea
12 changed files with 276 additions and 193 deletions

View file

@ -67,7 +67,7 @@ namespace MatterHackers.MatterControl
int Max2ColumnWidth = 1590;
View3DTransformPart part3DView;
GcodeViewBasic partGcodeView;
ViewGcodeBasic partGcodeView;
PanelSeparator RightBorderLine;
PanelSeparator LeftBorderLine;
@ -247,7 +247,7 @@ namespace MatterHackers.MatterControl
part3DView.Margin = new BorderDouble(bottom: 4);
part3DView.AnchorAll();
partGcodeView = new GcodeViewBasic(PrinterCommunication.Instance.ActivePrintItem, ActiveSliceSettings.Instance.GetBedSize, ActiveSliceSettings.Instance.GetBedCenter, false);
partGcodeView = new ViewGcodeBasic(PrinterCommunication.Instance.ActivePrintItem, new Vector3(ActiveSliceSettings.Instance.BedSize, buildHeight), ActiveSliceSettings.Instance.BedShape, ActiveSliceSettings.Instance.BedCenter, false);
partGcodeView.AnchorAll();
ColumnTwo.AddChild(part3DView);

View file

@ -28,21 +28,14 @@ either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using MatterHackers.Agg;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.ImageProcessing;
using MatterHackers.Agg.UI;
using MatterHackers.Agg.OpenGlGui;
using MatterHackers.PolygonMesh;
using MatterHackers.RenderOpenGl;
using MatterHackers.VectorMath;
using MatterHackers.Agg.VertexSource;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.Agg.ImageProcessing;
using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl
{

View file

@ -101,6 +101,8 @@
<Compile Include="CustomWidgets\PanelSeparator.cs" />
<Compile Include="DataStorage\Models.cs" />
<Compile Include="LocalizedString.cs" />
<Compile Include="PartPreviewWindow\ViewControls3D.cs" />
<Compile Include="PartPreviewWindow\ViewControls2D.cs" />
<Compile Include="PartPreviewWindow\BaseClasses\PartPreview3DWidget.cs" />
<Compile Include="PrinterCommunication\ActivePrinterProfile.cs" />
<Compile Include="ConfigurationPage\ConfigurationPage.cs" />
@ -170,7 +172,7 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="ControlElements\MHTextEditWidget.cs" />
<Compile Include="PartPreviewWindow\GcodeViewBasic.cs" />
<Compile Include="PartPreviewWindow\ViewGcodeBasic.cs" />
<Compile Include="PartPreviewWindow\PartPreviewMainWindow.cs" />
<Compile Include="PrintQueue\OptionsMenu\PartsSheetCreator.cs" />
<Compile Include="Utilities\WebUtilities\JsonResponseDictionary.cs" />

View file

@ -51,68 +51,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
protected MeshViewerWidget meshViewerWidget;
event EventHandler unregisterEvents;
protected ViewControls3D viewControls3D;
public PartPreview3DWidget()
{
ActiveTheme.Instance.ThemeChanged.RegisterEvent(Instance_ThemeChanged, ref unregisterEvents);
}
protected void Add3DViewControls()
{
FlowLayoutWidget transformTypeSelector = new FlowLayoutWidget();
transformTypeSelector.BackgroundColor = new RGBA_Bytes(0, 0, 0, 120);
textImageButtonFactory.FixedHeight = 20;
textImageButtonFactory.FixedWidth = 20;
textImageButtonFactory.AllowThemeToAdjustImage = false;
string rotateIconPath = Path.Combine("Icons", "ViewTransformControls", "rotate.png");
rotateViewButton = textImageButtonFactory.GenerateRadioButton("", rotateIconPath);
rotateViewButton.Margin = new BorderDouble(3);
transformTypeSelector.AddChild(rotateViewButton);
rotateViewButton.Click += (sender, e) =>
{
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
};
string translateIconPath = Path.Combine("Icons", "ViewTransformControls", "translate.png");
translateButton = textImageButtonFactory.GenerateRadioButton("", translateIconPath);
translateButton.Margin = new BorderDouble(3);
transformTypeSelector.AddChild(translateButton);
translateButton.Click += (sender, e) =>
{
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Translation;
};
string scaleIconPath = Path.Combine("Icons", "ViewTransformControls", "scale.png");
RadioButton scaleButton = textImageButtonFactory.GenerateRadioButton("", scaleIconPath);
scaleButton.Margin = new BorderDouble(3);
transformTypeSelector.AddChild(scaleButton);
scaleButton.Click += (sender, e) =>
{
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Scale;
};
viewControlsSeparator = new GuiWidget(2, 32);
viewControlsSeparator.BackgroundColor = RGBA_Bytes.White;
viewControlsSeparator.Margin = new BorderDouble(3);
transformTypeSelector.AddChild(viewControlsSeparator);
string partSelectIconPath = Path.Combine("Icons", "ViewTransformControls", "partSelect.png");
partSelectButton = textImageButtonFactory.GenerateRadioButton("", partSelectIconPath);
partSelectButton.Margin = new BorderDouble(3);
transformTypeSelector.AddChild(partSelectButton);
partSelectButton.Click += (sender, e) =>
{
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.None;
};
transformTypeSelector.Margin = new BorderDouble(5);
transformTypeSelector.HAnchor |= Agg.UI.HAnchor.ParentLeft;
transformTypeSelector.VAnchor = Agg.UI.VAnchor.ParentTop;
AddChild(transformTypeSelector);
rotateViewButton.Checked = true;
SetMeshViewerDisplayTheme();
partSelectButton.CheckedStateChanged += SetMeshViewerDisplayTheme;
}
public override void OnClosed(EventArgs e)
@ -124,12 +66,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
base.OnClosed(e);
}
void Instance_ThemeChanged(object sender, EventArgs e)
{
SetMeshViewerDisplayTheme();
Invalidate();
}
protected static Slider InseretUiForSlider(FlowLayoutWidget wordOptionContainer, string header, double min = 0, double max = .5)
{
double scrollBarWidth = 100;
@ -147,24 +83,5 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
return namedSlider;
}
protected void SetMeshViewerDisplayTheme(object sender = null, EventArgs e = null)
{
meshViewerWidget.TrackballTumbleWidget.RotationHelperCircleColor = ActiveTheme.Instance.PrimaryBackgroundColor;
//if (partSelectButton.Checked)
{
meshViewerWidget.PartColor = RGBA_Bytes.White;
meshViewerWidget.SelectedPartColor = ActiveTheme.Instance.PrimaryAccentColor;
}
#if false
else
{
meshViewerWidget.PartColor = ActiveTheme.Instance.PrimaryAccentColor;
meshViewerWidget.SelectedPartColor = ActiveTheme.Instance.PrimaryAccentColor;
}
#endif
meshViewerWidget.SelectedPartColor = ActiveTheme.Instance.PrimaryAccentColor;
meshViewerWidget.BuildVolumeColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryAccentColor.Red0To255, ActiveTheme.Instance.PrimaryAccentColor.Green0To255, ActiveTheme.Instance.PrimaryAccentColor.Blue0To255, 50);
}
}
}

View file

@ -55,11 +55,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
protected TextImageButtonFactory expandMenuOptionFactory = new TextImageButtonFactory();
protected TextImageButtonFactory whiteButtonFactory = new TextImageButtonFactory();
protected RadioButton partSelectButton;
protected RadioButton translateButton;
protected RadioButton rotateViewButton;
protected RadioButton scaleButton;
protected GuiWidget viewControlsSeparator;
protected ViewControls2D viewControls2D;
protected Cover buttonRightPanelDisabledCover;
protected FlowLayoutWidget buttonRightPanel;
@ -106,32 +102,5 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
BackgroundColor = RGBA_Bytes.White;
}
protected void Add2DViewControls()
{
TextImageButtonFactory iconTextImageButtonFactory = new TextImageButtonFactory();
iconTextImageButtonFactory.AllowThemeToAdjustImage = false;
FlowLayoutWidget transformTypeSelector = new FlowLayoutWidget();
transformTypeSelector.BackgroundColor = new RGBA_Bytes(0, 0, 0, 120);
iconTextImageButtonFactory.FixedHeight = 20;
iconTextImageButtonFactory.FixedWidth = 20;
string translateIconPath = Path.Combine("Icons", "ViewTransformControls", "translate.png");
translateButton = iconTextImageButtonFactory.GenerateRadioButton("", translateIconPath);
translateButton.Margin = new BorderDouble(3);
transformTypeSelector.AddChild(translateButton);
string scaleIconPath = Path.Combine("Icons", "ViewTransformControls", "scale.png");
scaleButton = iconTextImageButtonFactory.GenerateRadioButton("", scaleIconPath);
scaleButton.Margin = new BorderDouble(3);
transformTypeSelector.AddChild(scaleButton);
transformTypeSelector.Margin = new BorderDouble(5);
transformTypeSelector.HAnchor |= Agg.UI.HAnchor.ParentLeft;
transformTypeSelector.VAnchor = Agg.UI.VAnchor.ParentTop;
AddChild(transformTypeSelector);
translateButton.Checked = true;
}
}
}

View file

@ -43,15 +43,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
public class PartPreviewMainWindow : SystemWindow
{
View3DTransformPart part3DView;
GcodeViewBasic partGcodeView;
//PartPreview3DGcode part3DGcodeView;
View3DTransformPart view3DTransformPart;
ViewGcodeBasic viewGcodeBasic;
public PartPreviewMainWindow(PrintItemWrapper printItem)
: base(690, 340)
{
string partPreviewTitle = LocalizedString.Get ("MatterControl");
Title = string.Format("{0}: ", partPreviewTitle) + Path.GetFileName(printItem.Name);
string partPreviewTitle = LocalizedString.Get("MatterControl");
Title = string.Format("{0}: ", partPreviewTitle) + Path.GetFileName(printItem.Name);
BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor;
@ -61,22 +60,24 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
double buildHeight = ActiveSliceSettings.Instance.BuildHeight;
string part3DViewLabelBegining = ("3D");
string part3DViewLabelEnd = LocalizedString.Get ("View");
string part3DViewLabelFull = string.Format("{0} {1} ", part3DViewLabelBegining, part3DViewLabelEnd);
part3DView = new View3DTransformPart(printItem, new Vector3(ActiveSliceSettings.Instance.BedSize, buildHeight), ActiveSliceSettings.Instance.BedShape, true);
TabPage partPreview3DView = new TabPage(part3DView, part3DViewLabelFull);
// put in the 3D view
{
string part3DViewLabelFull = string.Format("{0} {1} ", "3D", "View".Localize());
partGcodeView = new GcodeViewBasic(printItem, ActiveSliceSettings.Instance.GetBedSize, ActiveSliceSettings.Instance.GetBedCenter, true);
TabPage layerView = new TabPage(partGcodeView, LocalizedString.Get("Layer View"));
view3DTransformPart = new View3DTransformPart(printItem, new Vector3(ActiveSliceSettings.Instance.BedSize, buildHeight), ActiveSliceSettings.Instance.BedShape, true);
TabPage partPreview3DView = new TabPage(view3DTransformPart, part3DViewLabelFull);
tabControl.AddTab(new SimpleTextTabWidget(partPreview3DView, 16,
ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), ActiveTheme.Instance.TabLabelUnselected, new RGBA_Bytes()));
}
//part3DGcodeView = new PartPreview3DGcode(printItem.FileLocation, bedXSize, bedYSize);
tabControl.AddTab(new SimpleTextTabWidget(partPreview3DView , 16,
ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), ActiveTheme.Instance.TabLabelUnselected, new RGBA_Bytes()));
tabControl.AddTab(new SimpleTextTabWidget(layerView, 16,
ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), ActiveTheme.Instance.TabLabelUnselected, new RGBA_Bytes()));
// put in the 2d gcode view
TabPage layerView;
{
viewGcodeBasic = new ViewGcodeBasic(printItem, new Vector3(ActiveSliceSettings.Instance.BedSize, buildHeight), ActiveSliceSettings.Instance.BedShape, ActiveSliceSettings.Instance.BedCenter, true);
layerView = new TabPage(viewGcodeBasic, LocalizedString.Get("Layer View"));
tabControl.AddTab(new SimpleTextTabWidget(layerView, 16,
ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), ActiveTheme.Instance.TabLabelUnselected, new RGBA_Bytes()));
}
this.AddChild(tabControl);
this.AnchorAll();
@ -89,12 +90,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
MinimumSize = new Vector2(400, 300);
ShowAsSystemWindow();
// We do this after showing the system window so that when we try and take fucus the parent window (the system window)
// exists and can give the fucus to its child the gecode window.
// We do this after showing the system window so that when we try and take focus of the parent window (the system window)
// it exists and can give the focus to its child the gcode window.
if (Path.GetExtension(printItem.FileLocation).ToUpper() == ".GCODE")
{
tabControl.TabBar.SwitchToPage(layerView);
partGcodeView.Focus();
viewGcodeBasic.Focus();
}
}
@ -102,8 +103,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private void AddHandlers()
{
ActiveTheme.Instance.ThemeChanged.RegisterEvent(Instance_ThemeChanged, ref unregisterEvents);
part3DView.Closed += (sender, e) => { Close(); };
partGcodeView.Closed += (sender, e) => { Close(); };
view3DTransformPart.Closed += (sender, e) => { Close(); };
viewGcodeBasic.Closed += (sender, e) => { Close(); };
}
public override void OnClosed(EventArgs e)

View file

@ -177,7 +177,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
if (meshViewerWidget.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None)
{
partSelectButton.ClickButton(null);
viewControls3D.partSelectButton.ClickButton(null);
int meshHitIndex;
if (FindMeshHitPosition(mouseEvent.Position, out meshHitIndex))
{
@ -389,6 +389,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
centerPartPreviewAndControls.AddChild(buttonRightPanelHolder);
buttonRightPanelHolder.AddChild(buttonRightPanel);
viewControls3D = new ViewControls3D(meshViewerWidget);
buttonRightPanelDisabledCover = new Cover(HAnchor.ParentLeftRight, VAnchor.ParentBottomTop);
buttonRightPanelDisabledCover.BackgroundColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryBackgroundColor, 150);
buttonRightPanelHolder.AddChild(buttonRightPanelDisabledCover);
@ -415,9 +417,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
this.AnchorAll();
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
Add3DViewControls();
viewControlsSeparator.Visible = false;
partSelectButton.Visible = false;
AddChild(viewControls3D);
viewControls3D.PartSelectVisible = false;
AddHandlers();
@ -490,7 +491,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
UnlockEditControls();
PullMeshDataFromAsynchLists();
saveButtons.Visible = true;
partSelectButton.ClickButton(null);
viewControls3D.partSelectButton.ClickButton(null);
// now set the selection to the new copy
MeshExtraData[Meshes.Count - 1].currentScale = MeshExtraData[SelectedMeshIndex].currentScale;
@ -684,7 +685,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
UnlockEditControls();
saveButtons.Visible = true;
partSelectButton.ClickButton(null);
viewControls3D.partSelectButton.ClickButton(null);
PullMeshDataFromAsynchLists();
}
@ -693,7 +694,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
UnlockEditControls();
saveButtons.Visible = true;
partSelectButton.ClickButton(null);
viewControls3D.partSelectButton.ClickButton(null);
if (asynchMeshesList.Count == Meshes.Count + 1)
{
@ -773,14 +774,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
doEdittingButtonsContainer.Visible = false;
buttonRightPanelDisabledCover.Visible = true;
if (viewControlsSeparator != null)
viewControls3D.PartSelectVisible = false;
if (meshViewerWidget.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None)
{
viewControlsSeparator.Visible = false;
partSelectButton.Visible = false;
if (meshViewerWidget.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None)
{
rotateViewButton.ClickButton(null);
}
viewControls3D.rotateButton.ClickButton(null);
}
}
@ -791,8 +788,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (!enterEditButtonsContainer.Visible)
{
viewControlsSeparator.Visible = true;
partSelectButton.Visible = true;
viewControls3D.PartSelectVisible = true;
doEdittingButtonsContainer.Visible = true;
}
@ -877,7 +873,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
UnlockEditControls();
autoArrangeButton.Visible = true;
partSelectButton.ClickButton(null);
viewControls3D.partSelectButton.ClickButton(null);
Invalidate();
@ -1638,7 +1634,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (Meshes.Count > 0)
{
partSelectButtonWasClicked = partSelectButton.Checked;
partSelectButtonWasClicked = viewControls3D.partSelectButton.Checked;
string progressSavingPartsLabel = LocalizedString.Get("Saving");
string progressSavingPartsLabelFull = "{0}:".FormatWith(progressSavingPartsLabel);
@ -1699,7 +1695,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (partSelectButtonWasClicked)
{
partSelectButton.ClickButton(null);
viewControls3D.partSelectButton.ClickButton(null);
}
}

View file

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.MatterControl;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
public class ViewControls2D : FlowLayoutWidget
{
public RadioButton translateButton;
public RadioButton scaleButton;
public ViewControls2D()
{
TextImageButtonFactory iconTextImageButtonFactory = new TextImageButtonFactory();
iconTextImageButtonFactory.AllowThemeToAdjustImage = false;
BackgroundColor = new RGBA_Bytes(0, 0, 0, 120);
iconTextImageButtonFactory.FixedHeight = 20;
iconTextImageButtonFactory.FixedWidth = 20;
string translateIconPath = Path.Combine("Icons", "ViewTransformControls", "translate.png");
translateButton = iconTextImageButtonFactory.GenerateRadioButton("", translateIconPath);
translateButton.Margin = new BorderDouble(3);
AddChild(translateButton);
string scaleIconPath = Path.Combine("Icons", "ViewTransformControls", "scale.png");
scaleButton = iconTextImageButtonFactory.GenerateRadioButton("", scaleIconPath);
scaleButton.Margin = new BorderDouble(3);
AddChild(scaleButton);
Margin = new BorderDouble(5);
HAnchor |= Agg.UI.HAnchor.ParentLeft;
VAnchor = Agg.UI.VAnchor.ParentTop;
translateButton.Checked = true;
}
}
}

View file

@ -0,0 +1,119 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.MatterControl;
using MatterHackers.MeshVisualizer;
using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
public class ViewControls3D : FlowLayoutWidget
{
GuiWidget partSelectSeparator;
MeshViewerWidget meshViewerWidget;
public RadioButton translateButton;
public RadioButton rotateButton;
public RadioButton scaleButton;
public RadioButton partSelectButton;
public bool PartSelectVisible
{
get { return partSelectSeparator.Visible; }
set
{
partSelectSeparator.Visible = value;
partSelectButton.Visible = value;
}
}
public ViewControls3D(MeshViewerWidget meshViewerWidget)
{
this.meshViewerWidget = meshViewerWidget;
TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
textImageButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor;
textImageButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor;
textImageButtonFactory.disabledTextColor = ActiveTheme.Instance.PrimaryTextColor;
textImageButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor;
BackgroundColor = new RGBA_Bytes(0, 0, 0, 120);
textImageButtonFactory.FixedHeight = 20;
textImageButtonFactory.FixedWidth = 20;
textImageButtonFactory.AllowThemeToAdjustImage = false;
string rotateIconPath = Path.Combine("Icons", "ViewTransformControls", "rotate.png");
rotateButton = textImageButtonFactory.GenerateRadioButton("", rotateIconPath);
rotateButton.Margin = new BorderDouble(3);
AddChild(rotateButton);
rotateButton.Click += (sender, e) =>
{
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
};
string translateIconPath = Path.Combine("Icons", "ViewTransformControls", "translate.png");
translateButton = textImageButtonFactory.GenerateRadioButton("", translateIconPath);
translateButton.Margin = new BorderDouble(3);
AddChild(translateButton);
translateButton.Click += (sender, e) =>
{
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Translation;
};
string scaleIconPath = Path.Combine("Icons", "ViewTransformControls", "scale.png");
RadioButton scaleButton = textImageButtonFactory.GenerateRadioButton("", scaleIconPath);
scaleButton.Margin = new BorderDouble(3);
AddChild(scaleButton);
scaleButton.Click += (sender, e) =>
{
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Scale;
};
partSelectSeparator = new GuiWidget(2, 32);
partSelectSeparator.BackgroundColor = RGBA_Bytes.White;
partSelectSeparator.Margin = new BorderDouble(3);
AddChild(partSelectSeparator);
string partSelectIconPath = Path.Combine("Icons", "ViewTransformControls", "partSelect.png");
partSelectButton = textImageButtonFactory.GenerateRadioButton("", partSelectIconPath);
partSelectButton.Margin = new BorderDouble(3);
AddChild(partSelectButton);
partSelectButton.Click += (sender, e) =>
{
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.None;
};
Margin = new BorderDouble(5);
HAnchor |= Agg.UI.HAnchor.ParentLeft;
VAnchor = Agg.UI.VAnchor.ParentTop;
rotateButton.Checked = true;
SetMeshViewerDisplayTheme();
partSelectButton.CheckedStateChanged += SetMeshViewerDisplayTheme;
}
protected void SetMeshViewerDisplayTheme(object sender = null, EventArgs e = null)
{
meshViewerWidget.TrackballTumbleWidget.RotationHelperCircleColor = ActiveTheme.Instance.PrimaryBackgroundColor;
//if (partSelectButton.Checked)
{
meshViewerWidget.PartColor = RGBA_Bytes.White;
meshViewerWidget.SelectedPartColor = ActiveTheme.Instance.PrimaryAccentColor;
}
#if false
else
{
meshViewerWidget.PartColor = ActiveTheme.Instance.PrimaryAccentColor;
meshViewerWidget.SelectedPartColor = ActiveTheme.Instance.PrimaryAccentColor;
}
#endif
meshViewerWidget.SelectedPartColor = ActiveTheme.Instance.PrimaryAccentColor;
meshViewerWidget.BuildVolumeColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryAccentColor.Red0To255, ActiveTheme.Instance.PrimaryAccentColor.Green0To255, ActiveTheme.Instance.PrimaryAccentColor.Blue0To255, 50);
}
}
}

View file

@ -33,6 +33,7 @@ using System.IO;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.GCodeVisualizer;
using MatterHackers.MeshVisualizer;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.MatterControl.SlicerConfiguration;
@ -40,7 +41,7 @@ using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
public class GcodeViewBasic : PartPreviewWidget
public class ViewGcodeBasic : PartPreview3DWidget
{
public Slider selectLayerSlider;
public Slider layerStartRenderRatioSlider;
@ -62,29 +63,38 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
GuiWidget gcodeDispalyWidget;
GetSizeFunction bedSizeFunction;
GetSizeFunction bedCenterFunction;
EventHandler unregisterEvents;
bool widgetHasCloseButton;
public delegate Vector2 GetSizeFunction();
public GcodeViewBasic(PrintItemWrapper printItem, GetSizeFunction bedSizeFunction, GetSizeFunction bedCenterFunction, bool addCloseButton)
static string slicingErrorMessage = "Slicing Error.\nPlease review your slice settings.".Localize();
static string pressGenerateMessage = "Press 'generate' to view layers".Localize();
static string fileNotFoundMessage = "File not found on disk.".Localize();
Vector2 bedCenter;
Vector3 viewerVolume;
MeshViewerWidget.BedShape bedShape;
public ViewGcodeBasic(PrintItemWrapper printItem, Vector3 viewerVolume, MeshViewerWidget.BedShape bedShape, Vector2 bedCenter, bool addCloseButton)
{
this.viewerVolume = viewerVolume;
this.bedShape = bedShape;
this.bedCenter = bedCenter;
widgetHasCloseButton = addCloseButton;
this.printItem = printItem;
this.bedSizeFunction = bedSizeFunction;
this.bedCenterFunction = bedCenterFunction;
CreateAndAddChildren(null);
}
static string slicingErrorMessage = "Slicing Error.\nPlease review your slice settings.".Localize();
static string pressGenerateMessage = "Press 'generate' to view layers".Localize();
static string fileNotFoundMessage = "File not found on disk.".Localize();
void CreateAndAddChildren(object state)
{
TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
textImageButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor;
textImageButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor;
textImageButtonFactory.disabledTextColor = ActiveTheme.Instance.PrimaryTextColor;
textImageButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor;
RemoveAllChildren();
gcodeViewWidget = null;
gcodeProcessingStateInfoText = null;
@ -181,12 +191,20 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
mainContainerTopToBottom.AddChild(buttonBottomPanel);
this.AddChild(mainContainerTopToBottom);
Add2DViewControls();
translateButton.Click += (sender, e) =>
meshViewerWidget = new MeshViewerWidget(viewerVolume, 1, bedShape, "Press 'Add' to select an item.".Localize());
viewControls2D = new ViewControls2D();
AddChild(viewControls2D);
viewControls3D = new ViewControls3D(meshViewerWidget);
AddChild(viewControls3D);
viewControls3D.Visible = false;
viewControls3D.translateButton.ClickButton(null);
viewControls2D.translateButton.Click += (sender, e) =>
{
gcodeViewWidget.TransformState = GCodeViewWidget.ETransformState.Move;
};
scaleButton.Click += (sender, e) =>
viewControls2D.scaleButton.Click += (sender, e) =>
{
gcodeViewWidget.TransformState = GCodeViewWidget.ETransformState.Scale;
};
@ -254,6 +272,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private void AddModelInfo(FlowLayoutWidget buttonPanel)
{
int oldWidth = textImageButtonFactory.FixedWidth;
textImageButtonFactory.FixedWidth = 44;
FlowLayoutWidget modelInfoContainer = new FlowLayoutWidget(FlowDirection.TopToBottom);
@ -343,11 +362,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
buttonPanel.AddChild(modelInfoContainer);
textImageButtonFactory.FixedWidth = 0;
textImageButtonFactory.FixedWidth = oldWidth;
}
private void AddLayerInfo(FlowLayoutWidget buttonPanel)
{
int oldWidth = textImageButtonFactory.FixedWidth;
textImageButtonFactory.FixedWidth = 44;
FlowLayoutWidget layerInfoContainer = new FlowLayoutWidget(FlowDirection.TopToBottom);
@ -366,11 +386,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
buttonPanel.AddChild(layerInfoContainer);
textImageButtonFactory.FixedWidth = 0;
textImageButtonFactory.FixedWidth = oldWidth;
}
private void AddDisplayControls(FlowLayoutWidget buttonPanel)
{
int oldWidth = textImageButtonFactory.FixedWidth;
textImageButtonFactory.FixedWidth = 44;
FlowLayoutWidget layerInfoContainer = new FlowLayoutWidget(FlowDirection.TopToBottom);
@ -410,6 +431,26 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
layerInfoContainer.AddChild(showRetractions);
}
// put in a show 3D view checkbox
{
CheckBox show3D = new CheckBox(LocalizedString.Get("Show 3D"), textColor: ActiveTheme.Instance.PrimaryTextColor);
show3D.CheckedStateChanged += (sender, e) =>
{
// show the tumbel widget and not the line widget
if (show3D.Checked)
{
viewControls2D.Visible = false;
viewControls3D.Visible = true;
}
else
{
viewControls2D.Visible = true;
viewControls3D.Visible = false;
}
};
layerInfoContainer.AddChild(show3D);
}
// Put in the sync to print checkbox
if (!widgetHasCloseButton)
{
@ -437,7 +478,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
buttonPanel.AddChild(layerInfoContainer);
textImageButtonFactory.FixedWidth = 0;
textImageButtonFactory.FixedWidth = oldWidth;
}
public override void OnParentChanged(EventArgs e)
@ -448,7 +489,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
string partToStartLoadingOnFirstDraw = null;
private GuiWidget CreateGCodeViewWidget(string pathAndFileName)
{
gcodeViewWidget = new GCodeViewWidget(bedSizeFunction(), bedCenterFunction());
gcodeViewWidget = new GCodeViewWidget(new Vector2(viewerVolume.x, viewerVolume.y), bedCenter);
gcodeViewWidget.DoneLoading += DoneLoadingGCode;
gcodeViewWidget.LoadingProgressChanged += LoadingProgressChanged;
partToStartLoadingOnFirstDraw = pathAndFileName;

View file

@ -337,10 +337,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
}
public Vector2 GetBedCenter()
{
return BedCenter;
}
public Vector2 BedCenter
{
get

View file

@ -2259,3 +2259,9 @@ Translated:Printer Sync
English:Sync To Print
Translated:Sync To Print
English:Layers
Translated:Layers
English:Show 3D
Translated:Show 3D