Working on 3D gcode view
Making the view navigation controls for 2d and 3d a separate class.
This commit is contained in:
parent
ad227e1f9d
commit
00e10bfbea
12 changed files with 276 additions and 193 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
43
PartPreviewWindow/ViewControls2D.cs
Normal file
43
PartPreviewWindow/ViewControls2D.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
119
PartPreviewWindow/ViewControls3D.cs
Normal file
119
PartPreviewWindow/ViewControls3D.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
@ -337,10 +337,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
}
|
||||
}
|
||||
|
||||
public Vector2 GetBedCenter()
|
||||
{
|
||||
return BedCenter;
|
||||
}
|
||||
public Vector2 BedCenter
|
||||
{
|
||||
get
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue