diff --git a/ApplicationView/WidescreenPanel.cs b/ApplicationView/WidescreenPanel.cs index 96c1ca55b..bb0b1730f 100644 --- a/ApplicationView/WidescreenPanel.cs +++ b/ApplicationView/WidescreenPanel.cs @@ -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); diff --git a/ControlElements/TextImageButtonFactory.cs b/ControlElements/TextImageButtonFactory.cs index 9dace3148..31898dd3b 100644 --- a/ControlElements/TextImageButtonFactory.cs +++ b/ControlElements/TextImageButtonFactory.cs @@ -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 { diff --git a/MatterControl.csproj b/MatterControl.csproj index 35fb9d22b..711ee2076 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -101,6 +101,8 @@ + + @@ -170,7 +172,7 @@ Code - + diff --git a/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs b/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs index 0f489bd19..4edb915ce 100644 --- a/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs +++ b/PartPreviewWindow/BaseClasses/PartPreview3DWidget.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); - } } } diff --git a/PartPreviewWindow/BaseClasses/PartPreviewWidget.cs b/PartPreviewWindow/BaseClasses/PartPreviewWidget.cs index 46bc43ff8..7edcdb331 100644 --- a/PartPreviewWindow/BaseClasses/PartPreviewWidget.cs +++ b/PartPreviewWindow/BaseClasses/PartPreviewWidget.cs @@ -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; - } } } diff --git a/PartPreviewWindow/PartPreviewMainWindow.cs b/PartPreviewWindow/PartPreviewMainWindow.cs index 32ae0ea7f..01df77466 100644 --- a/PartPreviewWindow/PartPreviewMainWindow.cs +++ b/PartPreviewWindow/PartPreviewMainWindow.cs @@ -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) diff --git a/PartPreviewWindow/View3DTransfromPart.cs b/PartPreviewWindow/View3DTransfromPart.cs index 8449aa09b..c0550da3f 100644 --- a/PartPreviewWindow/View3DTransfromPart.cs +++ b/PartPreviewWindow/View3DTransfromPart.cs @@ -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); } } diff --git a/PartPreviewWindow/ViewControls2D.cs b/PartPreviewWindow/ViewControls2D.cs new file mode 100644 index 000000000..894301058 --- /dev/null +++ b/PartPreviewWindow/ViewControls2D.cs @@ -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; + } + } +} diff --git a/PartPreviewWindow/ViewControls3D.cs b/PartPreviewWindow/ViewControls3D.cs new file mode 100644 index 000000000..b577a130d --- /dev/null +++ b/PartPreviewWindow/ViewControls3D.cs @@ -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); + } + } +} diff --git a/PartPreviewWindow/GcodeViewBasic.cs b/PartPreviewWindow/ViewGcodeBasic.cs similarity index 92% rename from PartPreviewWindow/GcodeViewBasic.cs rename to PartPreviewWindow/ViewGcodeBasic.cs index 0f8e84992..f0b9546b5 100644 --- a/PartPreviewWindow/GcodeViewBasic.cs +++ b/PartPreviewWindow/ViewGcodeBasic.cs @@ -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; diff --git a/SlicerConfiguration/ActiveSliceSettings.cs b/SlicerConfiguration/ActiveSliceSettings.cs index 74e59fc8a..0774ff715 100644 --- a/SlicerConfiguration/ActiveSliceSettings.cs +++ b/SlicerConfiguration/ActiveSliceSettings.cs @@ -337,10 +337,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } - public Vector2 GetBedCenter() - { - return BedCenter; - } public Vector2 BedCenter { get diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 35589cf26..862ec3f8d 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -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 +