From fed2db8b6c38502cf0f1c105b2389af2afc4ff0a Mon Sep 17 00:00:00 2001 From: John Lewin Date: Fri, 29 May 2015 15:13:56 -0700 Subject: [PATCH] Make ViewControls3D display actual mode during overrides - Show trackball controls during mouse overrides Conflicts: PartPreviewWindow/View3D/View3DCreateSelecitonData.cs PartPreviewWindow/View3D/View3DWidget.cs Submodules/agg-sharp --- .../View3D/View3DCreateSelecitonData.cs | 3 +- PartPreviewWindow/View3D/View3DWidget.cs | 79 ++++++++++++++----- PartPreviewWindow/ViewControls3D.cs | 63 +++++++++++++-- PartPreviewWindow/ViewGcodeBasic.cs | 3 +- TextCreator/View3DTextCreator.cs | 9 ++- 5 files changed, 125 insertions(+), 32 deletions(-) diff --git a/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs b/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs index 074e27978..75a298629 100644 --- a/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs +++ b/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs @@ -80,6 +80,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow enterEditButtonsContainer.Visible = false; } + viewControls3D.ActiveButton = ViewControls3DButtons.PartSelect; if (MeshGroups.Count > 0) { processingProgressControl.Visible = true; @@ -98,7 +99,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow SelectedMeshGroupIndex = 0; buttonRightPanel.Visible = true; UnlockEditControls(); - viewControls3D.partSelectButton.ClickButton(null); + viewControls3D.ActiveButton = ViewControls3DButtons.PartSelect; Invalidate(); diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index f67594436..734dddb20 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -592,8 +592,57 @@ namespace MatterHackers.MatterControl.PartPreviewWindow DrawStuffForSelectedPart(graphics2D); } + ViewControls3DButtons? activeButtonBeforeMouseOverride = null; + ViewControls3DButtons? activeButtonBeforeKeyOverride = null; + + public override void OnKeyDown(KeyEventArgs keyEvent) + { + if (activeButtonBeforeKeyOverride == null) + { + activeButtonBeforeKeyOverride = viewControls3D.ActiveButton; + + if (keyEvent.Alt) + { + viewControls3D.ActiveButton = ViewControls3DButtons.Rotate; + } + else if (keyEvent.Shift) + { + viewControls3D.ActiveButton = ViewControls3DButtons.Translate; + } + else if (keyEvent.Control) + { + viewControls3D.ActiveButton = ViewControls3DButtons.Scale; + } + } + + base.OnKeyDown(keyEvent); + } + + public override void OnKeyUp(KeyEventArgs keyEvent) + { + if (activeButtonBeforeKeyOverride != null) + { + viewControls3D.ActiveButton = (ViewControls3DButtons)activeButtonBeforeKeyOverride; + activeButtonBeforeKeyOverride = null; + } + + base.OnKeyUp(keyEvent); + } + public override void OnMouseDown(MouseEventArgs mouseEvent) { + // Show transform override + if (activeButtonBeforeMouseOverride == null && mouseEvent.Button == MouseButtons.Right) + { + activeButtonBeforeMouseOverride = viewControls3D.ActiveButton; + viewControls3D.ActiveButton = ViewControls3DButtons.Rotate; + } + else if (activeButtonBeforeMouseOverride == null && mouseEvent.Button == MouseButtons.Middle) + { + activeButtonBeforeMouseOverride = viewControls3D.ActiveButton; + viewControls3D.ActiveButton = ViewControls3DButtons.Translate; + } + autoRotating = false; base.OnMouseDown(mouseEvent); if (meshViewerWidget.TrackballTumbleWidget.UnderMouseState == Agg.UI.UnderMouseState.FirstUnderMouse) @@ -665,6 +714,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow meshSelectInfo.downOnPart = false; + if (activeButtonBeforeMouseOverride != null) + { + viewControls3D.ActiveButton = (ViewControls3DButtons)activeButtonBeforeMouseOverride; + activeButtonBeforeMouseOverride = null; + } + base.OnMouseUp(mouseEvent); } @@ -1690,12 +1745,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow if (viewControls3D.PartSelectVisible == true) { viewControls3D.PartSelectVisible = false; - if (viewControls3D.partSelectButton.Checked) + if (viewControls3D.ActiveButton == ViewControls3DButtons.PartSelect) { wasInSelectMode = true; - viewControls3D.rotateButton.ClickButton(null); - viewControls3D.scaleButton.Click += StopReturnToSelectionButton; - viewControls3D.translateButton.Click += StopReturnToSelectionButton; + viewControls3D.ActiveButton = ViewControls3DButtons.Rotate; } } } @@ -2188,13 +2241,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - private void StopReturnToSelectionButton(object sender, EventArgs e) - { - wasInSelectMode = false; - RadioButton button = sender as RadioButton; - button.Click -= StopReturnToSelectionButton; - } - private void SwitchStateToNotEditing() { if (!enterEditButtonsContainer.Visible) @@ -2204,10 +2250,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow buttonRightPanel.Visible = false; doEdittingButtonsContainer.Visible = false; viewControls3D.PartSelectVisible = false; - if (viewControls3D.partSelectButton.Checked) + if (viewControls3D.ActiveButton == ViewControls3DButtons.PartSelect) { - viewControls3D.rotateButton.ClickButton(null); - } + viewControls3D.ActiveButton = ViewControls3DButtons.Rotate; + } SelectedMeshGroupIndex = -1; } } @@ -2232,13 +2278,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow if (wasInSelectMode) { - viewControls3D.partSelectButton.ClickButton(null); + viewControls3D.ActiveButton = ViewControls3DButtons.PartSelect; wasInSelectMode = false; } - viewControls3D.scaleButton.Click -= StopReturnToSelectionButton; - viewControls3D.translateButton.Click -= StopReturnToSelectionButton; - UpdateSizeInfo(); } diff --git a/PartPreviewWindow/ViewControls3D.cs b/PartPreviewWindow/ViewControls3D.cs index 86415fc75..291eb91ef 100644 --- a/PartPreviewWindow/ViewControls3D.cs +++ b/PartPreviewWindow/ViewControls3D.cs @@ -37,15 +37,25 @@ using MatterHackers.Localizations; namespace MatterHackers.MatterControl.PartPreviewWindow { + + public enum ViewControls3DButtons + { + Rotate, + Scale, + Translate, + PartSelect + } + public class ViewControls3D : FlowLayoutWidget { private GuiWidget partSelectSeparator; private MeshViewerWidget meshViewerWidget; - public RadioButton translateButton; - public RadioButton rotateButton; - public RadioButton scaleButton; - public RadioButton partSelectButton; + private RadioButton translateButton; + private RadioButton rotateButton; + private RadioButton scaleButton; + private RadioButton partSelectButton; + private int buttonHeight; public bool PartSelectVisible @@ -58,6 +68,43 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } + private ViewControls3DButtons activeTransformState = ViewControls3DButtons.Rotate; + + public ViewControls3DButtons ActiveButton + { + get + { + return activeTransformState; + } + set + { + this.activeTransformState = value; + + switch(value) + { + case ViewControls3DButtons.Rotate: + meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation; + rotateButton.Checked = true; + break; + + case ViewControls3DButtons.Translate: + meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Translation; + translateButton.Checked = true; + break; + + case ViewControls3DButtons.Scale: + meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Scale; + scaleButton.Checked = true; + break; + + case ViewControls3DButtons.PartSelect: + meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.None; + partSelectButton.Checked = true; + break; + } + } + } + public ViewControls3D(MeshViewerWidget meshViewerWidget) { if (ActiveTheme.Instance.DisplayMode == ActiveTheme.ApplicationDisplayType.Touchscreen) @@ -90,7 +137,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow AddChild(rotateButton); rotateButton.Click += (sender, e) => { - meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation; + this.ActiveButton = ViewControls3DButtons.Rotate; }; string translateIconPath = Path.Combine("ViewTransformControls", "translate.png"); @@ -100,7 +147,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow AddChild(translateButton); translateButton.Click += (sender, e) => { - meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Translation; + this.ActiveButton = ViewControls3DButtons.Translate; }; string scaleIconPath = Path.Combine("ViewTransformControls", "scale.png"); @@ -110,7 +157,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow AddChild(scaleButton); scaleButton.Click += (sender, e) => { - meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Scale; + this.ActiveButton = ViewControls3DButtons.Scale; }; partSelectSeparator = new GuiWidget(2, 32); @@ -125,7 +172,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow AddChild(partSelectButton); partSelectButton.Click += (sender, e) => { - meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.None; + this.ActiveButton = ViewControls3DButtons.PartSelect; }; Margin = new BorderDouble(5); diff --git a/PartPreviewWindow/ViewGcodeBasic.cs b/PartPreviewWindow/ViewGcodeBasic.cs index 41cde1b7c..b3856d54b 100644 --- a/PartPreviewWindow/ViewGcodeBasic.cs +++ b/PartPreviewWindow/ViewGcodeBasic.cs @@ -263,7 +263,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow viewControls3D = new ViewControls3D(meshViewerWidget); viewControls3D.PartSelectVisible = false; AddChild(viewControls3D); - viewControls3D.rotateButton.ClickButton(null); + + viewControls3D.ActiveButton = ViewControls3DButtons.Rotate; viewControls3D.Visible = false; viewControlsToggle = new ViewControlsToggle(); diff --git a/TextCreator/View3DTextCreator.cs b/TextCreator/View3DTextCreator.cs index 69729715b..77062e6ba 100644 --- a/TextCreator/View3DTextCreator.cs +++ b/TextCreator/View3DTextCreator.cs @@ -343,7 +343,7 @@ namespace MatterHackers.MatterControl.Plugins.TextCreator { if (meshViewerWidget.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None) { - viewControls3D.partSelectButton.ClickButton(null); + viewControls3D.ActiveButton = ViewControls3DButtons.PartSelect; int meshHitIndex; if (FindMeshGroupHitPosition(mouseEvent.Position, out meshHitIndex)) { @@ -522,7 +522,7 @@ namespace MatterHackers.MatterControl.Plugins.TextCreator UnlockEditControls(); saveButton.Visible = true; saveAndExitButton.Visible = true; - viewControls3D.partSelectButton.ClickButton(null); + viewControls3D.ActiveButton = ViewControls3DButtons.PartSelect; PullMeshDataFromAsynchLists(); } @@ -559,7 +559,7 @@ namespace MatterHackers.MatterControl.Plugins.TextCreator viewControls3D.PartSelectVisible = false; if (meshViewerWidget.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None) { - viewControls3D.rotateButton.ClickButton(null); + viewControls3D.ActiveButton = ViewControls3DButtons.Rotate; } } @@ -852,7 +852,8 @@ namespace MatterHackers.MatterControl.Plugins.TextCreator { if (MeshGroups.Count > 0) { - partSelectButtonWasClicked = viewControls3D.partSelectButton.Checked; + partSelectButtonWasClicked = viewControls3D.ActiveButton == ViewControls3DButtons.PartSelect; + processingProgressControl.ProcessType = "Saving Parts:".Localize(); processingProgressControl.Visible = true;