Improving new view ui
This commit is contained in:
parent
01b93ccb62
commit
d4696dff2d
7 changed files with 113 additions and 54 deletions
|
|
@ -26,6 +26,7 @@ The views and conclusions contained in the software and documentation are those
|
|||
of the authors and should not be interpreted as representing official policies,
|
||||
either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using MatterHackers.Agg;
|
||||
using MatterHackers.Agg.Platform;
|
||||
|
|
@ -39,6 +40,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
public class GridOptionsPanel : DropButton
|
||||
{
|
||||
Object3DControlsLayer object3DControlLayer;
|
||||
private GuiWidget textButton;
|
||||
private PopupMenu popupMenu;
|
||||
|
||||
public GridOptionsPanel(Object3DControlsLayer object3DControlLayer, ThemeConfig theme)
|
||||
: base(theme)
|
||||
|
|
@ -46,17 +49,58 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
this.object3DControlLayer = object3DControlLayer;
|
||||
this.PopupContent = () => ShowGridOptions(theme);
|
||||
|
||||
this.AddChild(new TextIconButton("Snap", StaticData.Instance.LoadIcon("snap_grid.png", 16, 16).SetToColor(theme.TextColor), theme)
|
||||
var gridDistance = object3DControlLayer.SnapGridDistance;
|
||||
|
||||
textButton = this.AddChild(new TextButton(gridDistance.ToString(), theme)
|
||||
{
|
||||
Selectable = false
|
||||
Selectable = false,
|
||||
HAnchor = HAnchor.Center
|
||||
});
|
||||
this.HAnchor = HAnchor.Fit;
|
||||
this.VAnchor = VAnchor.Fit;
|
||||
this.Width = this.Height;
|
||||
|
||||
UserSettings.Instance.SettingChanged += UserSettings_SettingChanged;
|
||||
|
||||
SetToolTip();
|
||||
}
|
||||
|
||||
public override void OnClosed(EventArgs e)
|
||||
{
|
||||
// Unregister listener
|
||||
UserSettings.Instance.SettingChanged -= UserSettings_SettingChanged;
|
||||
|
||||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
private void UserSettings_SettingChanged(object sender, StringEventArgs e)
|
||||
{
|
||||
if (e.Data == UserSettingsKey.SnapGridDistance)
|
||||
{
|
||||
SetToolTip();
|
||||
}
|
||||
}
|
||||
|
||||
private void SetToolTip()
|
||||
{
|
||||
var distance = object3DControlLayer.SnapGridDistance;
|
||||
if (distance == 0)
|
||||
{
|
||||
textButton.Text = "-";
|
||||
ToolTipText = "Snapping Turned Off".Localize();
|
||||
}
|
||||
else
|
||||
{
|
||||
textButton.Text = distance.ToString().TrimStart('0');
|
||||
ToolTipText = "Snap Grid".Localize() + " = " + textButton.Text;
|
||||
}
|
||||
|
||||
popupMenu?.Close();
|
||||
popupMenu = null;
|
||||
}
|
||||
|
||||
private GuiWidget ShowGridOptions(ThemeConfig theme)
|
||||
{
|
||||
var popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);
|
||||
popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);
|
||||
|
||||
var siblingList = new List<GuiWidget>();
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
public static void FlashBackground(this GuiWidget widget, Color hightlightColor)
|
||||
{
|
||||
double displayTime = 2;
|
||||
double displayTime = 1.5;
|
||||
double pulseTime = .5;
|
||||
double totalSeconds = 0;
|
||||
Color backgroundColor = widget.BackgroundColor;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,9 @@ using MatterHackers.VectorMath;
|
|||
using MatterHackers.VectorMath.TrackBall;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||
{
|
||||
|
|
@ -288,10 +291,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
}
|
||||
}
|
||||
|
||||
public void Reset(Vector3 bedCenter)
|
||||
public void SetRotationCenter(Vector3 worldPosition)
|
||||
{
|
||||
ZeroVelocity();
|
||||
mouseDownWorldPosition = bedCenter;
|
||||
mouseDownWorldPosition = worldPosition;
|
||||
}
|
||||
|
||||
public void SetRotationWithDisplacement(Quaternion rotationQ)
|
||||
|
|
@ -422,6 +425,34 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
}
|
||||
}
|
||||
|
||||
public void AnimateTo(Matrix4X4 newRotation)
|
||||
{
|
||||
var rotationStart = new Quaternion(world.RotationMatrix);
|
||||
var rotationEnd = new Quaternion(newRotation);
|
||||
|
||||
Task.Run(() =>
|
||||
{
|
||||
// TODO: stop any spinning happening in the view
|
||||
double duration = .25;
|
||||
var timer = Stopwatch.StartNew();
|
||||
var time = timer.Elapsed.TotalSeconds;
|
||||
|
||||
while (time < duration)
|
||||
{
|
||||
var current = Quaternion.Slerp(rotationStart, rotationEnd, time / duration);
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
this.SetRotationWithDisplacement(current);
|
||||
});
|
||||
time = timer.Elapsed.TotalSeconds;
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
|
||||
this.world.RotationMatrix = newRotation;
|
||||
Invalidate();
|
||||
});
|
||||
}
|
||||
|
||||
internal class MotionQueue
|
||||
{
|
||||
private readonly List<TimeAndPosition> motionQueue = new List<TimeAndPosition>();
|
||||
|
|
|
|||
|
|
@ -387,30 +387,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
var look = Matrix4X4.LookAt(Vector3.Zero, normalAndUp.normal, normalAndUp.up);
|
||||
|
||||
var start = new Quaternion(object3DControlLayer.World.RotationMatrix);
|
||||
var end = new Quaternion(look);
|
||||
|
||||
Task.Run(() =>
|
||||
{
|
||||
// TODO: stop any spinning happening in the view
|
||||
double duration = .25;
|
||||
var timer = Stopwatch.StartNew();
|
||||
var time = timer.Elapsed.TotalSeconds;
|
||||
|
||||
while (time < duration)
|
||||
{
|
||||
var current = Quaternion.Slerp(start, end, time / duration);
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
trackballTumbleWidgetExtended.SetRotationWithDisplacement(current);
|
||||
});
|
||||
time = timer.Elapsed.TotalSeconds;
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
|
||||
trackballTumbleWidgetExtended.SetRotationWithDisplacement(end);
|
||||
Invalidate();
|
||||
});
|
||||
trackballTumbleWidgetExtended.AnimateTo(look);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -570,7 +570,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
// put in the view list buttons
|
||||
var modelViewStyleButton = new ViewStyleButton(sceneContext, theme)
|
||||
{
|
||||
ToolTipText = "Model View Style".Localize(),
|
||||
PopupMate = new MatePoint()
|
||||
{
|
||||
Mate = new MateOptions(MateEdge.Left, MateEdge.Top)
|
||||
|
|
@ -605,7 +604,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
// Add the grid snap button
|
||||
gridSnapButton = new GridOptionsPanel(Object3DControlLayer, theme)
|
||||
{
|
||||
ToolTipText = "Snap Grid".Localize(),
|
||||
PopupMate = new MatePoint()
|
||||
{
|
||||
Mate = new MateOptions(MateEdge.Right, MateEdge.Top)
|
||||
|
|
@ -1704,7 +1702,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
public void ResetView()
|
||||
{
|
||||
TrackballTumbleWidget.Reset(new Vector3(sceneContext.BedCenter));
|
||||
TrackballTumbleWidget.SetRotationCenter(new Vector3(sceneContext.BedCenter));
|
||||
|
||||
var world = sceneContext.World;
|
||||
|
||||
|
|
|
|||
|
|
@ -42,10 +42,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
public class ViewStyleButton : DropButton
|
||||
{
|
||||
private TextIconButton iconButton;
|
||||
private IconButton iconButton;
|
||||
private ISceneContext sceneContext;
|
||||
|
||||
private Dictionary<RenderTypes, ImageBuffer> viewIcons;
|
||||
private Dictionary<RenderTypes, (ImageBuffer image, string toolTip)> viewData;
|
||||
private PopupMenu popupMenu;
|
||||
|
||||
public ViewStyleButton(ISceneContext sceneContext, ThemeConfig theme)
|
||||
: base(theme)
|
||||
|
|
@ -55,21 +56,24 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
this.HAnchor = HAnchor.Fit;
|
||||
this.VAnchor = VAnchor.Fit;
|
||||
|
||||
viewIcons = new Dictionary<RenderTypes, ImageBuffer>()
|
||||
viewData = new Dictionary<RenderTypes, (ImageBuffer image, string toolTip)>
|
||||
{
|
||||
[RenderTypes.Shaded] = StaticData.Instance.LoadIcon("view_shaded.png", 16, 16),
|
||||
[RenderTypes.Outlines] = StaticData.Instance.LoadIcon("view_outlines.png", 16, 16),
|
||||
[RenderTypes.Polygons] = StaticData.Instance.LoadIcon("view_polygons.png", 16, 16),
|
||||
[RenderTypes.NonManifold] = StaticData.Instance.LoadIcon("view_polygons.png", 16, 16),
|
||||
[RenderTypes.Materials] = StaticData.Instance.LoadIcon("view_materials.png", 16, 16),
|
||||
[RenderTypes.Overhang] = StaticData.Instance.LoadIcon("view_overhang.png", 16, 16),
|
||||
[RenderTypes.Shaded] = (StaticData.Instance.LoadIcon("view_shaded.png", 16, 16), "View Mode = Shaded".Localize()),
|
||||
[RenderTypes.Outlines] = (StaticData.Instance.LoadIcon("view_outlines.png", 16, 16), "View Mode = Outlines".Localize()),
|
||||
[RenderTypes.Polygons] = (StaticData.Instance.LoadIcon("view_polygons.png", 16, 16), "View Mode = Polygons".Localize()),
|
||||
[RenderTypes.NonManifold] = (StaticData.Instance.LoadIcon("view_polygons.png", 16, 16), "View Mode = Non-Manifold".Localize()),
|
||||
[RenderTypes.Materials] = (StaticData.Instance.LoadIcon("view_materials.png", 16, 16), "View Mode = Materials".Localize()),
|
||||
[RenderTypes.Overhang] = (StaticData.Instance.LoadIcon("view_overhang.png", 16, 16), "View Mode = Overhangs".Localize()),
|
||||
};
|
||||
|
||||
this.AddChild(iconButton = new TextIconButton("View".Localize(), viewIcons[sceneContext.ViewState.RenderType], theme)
|
||||
var renderType = sceneContext.ViewState.RenderType;
|
||||
this.AddChild(iconButton = new IconButton(viewData[renderType].image, theme)
|
||||
{
|
||||
Selectable = false
|
||||
});
|
||||
|
||||
ToolTipText = viewData[renderType].toolTip;
|
||||
|
||||
UserSettings.Instance.SettingChanged += UserSettings_SettingChanged;
|
||||
}
|
||||
|
||||
|
|
@ -85,23 +89,28 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
if (e.Data == UserSettingsKey.defaultRenderSetting)
|
||||
{
|
||||
iconButton.SetIcon(viewIcons[sceneContext.ViewState.RenderType]);
|
||||
var renderType = sceneContext.ViewState.RenderType;
|
||||
iconButton.SetIcon(viewData[renderType].image);
|
||||
if (!this.MenuVisible)
|
||||
{
|
||||
iconButton.FlashBackground(theme.PrimaryAccentColor.WithContrast(theme.TextColor, 6).ToColor());
|
||||
this.FlashBackground(theme.PrimaryAccentColor.WithContrast(theme.TextColor, 6).ToColor());
|
||||
}
|
||||
ToolTipText = viewData[renderType].toolTip;
|
||||
|
||||
popupMenu?.Close();
|
||||
popupMenu = null;
|
||||
}
|
||||
}
|
||||
|
||||
private GuiWidget ShowViewOptions()
|
||||
{
|
||||
var popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);
|
||||
popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);
|
||||
|
||||
var siblingList = new List<GuiWidget>();
|
||||
|
||||
popupMenu.CreateBoolMenuItem(
|
||||
"Shaded".Localize(),
|
||||
viewIcons[RenderTypes.Shaded],
|
||||
viewData[RenderTypes.Shaded].image,
|
||||
() => sceneContext.ViewState.RenderType == RenderTypes.Shaded,
|
||||
(isChecked) =>
|
||||
{
|
||||
|
|
@ -112,7 +121,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
popupMenu.CreateBoolMenuItem(
|
||||
"Outlines (default)".Localize(),
|
||||
viewIcons[RenderTypes.Outlines],
|
||||
viewData[RenderTypes.Outlines].image,
|
||||
() => sceneContext.ViewState.RenderType == RenderTypes.Outlines,
|
||||
(isChecked) =>
|
||||
{
|
||||
|
|
@ -124,7 +133,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
#if DEBUG
|
||||
popupMenu.CreateBoolMenuItem(
|
||||
"Non-Manifold".Localize(),
|
||||
viewIcons[RenderTypes.Polygons],
|
||||
viewData[RenderTypes.Polygons].image,
|
||||
() => sceneContext.ViewState.RenderType == RenderTypes.NonManifold,
|
||||
(isChecked) =>
|
||||
{
|
||||
|
|
@ -136,7 +145,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
popupMenu.CreateBoolMenuItem(
|
||||
"Polygons".Localize(),
|
||||
viewIcons[RenderTypes.Polygons],
|
||||
viewData[RenderTypes.Polygons].image,
|
||||
() => sceneContext.ViewState.RenderType == RenderTypes.Polygons,
|
||||
(isChecked) =>
|
||||
{
|
||||
|
|
@ -147,7 +156,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
popupMenu.CreateBoolMenuItem(
|
||||
"Materials".Localize(),
|
||||
viewIcons[RenderTypes.Materials],
|
||||
viewData[RenderTypes.Materials].image,
|
||||
() => sceneContext.ViewState.RenderType == RenderTypes.Materials,
|
||||
(isChecked) =>
|
||||
{
|
||||
|
|
@ -158,7 +167,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
popupMenu.CreateBoolMenuItem(
|
||||
"Overhang".Localize(),
|
||||
viewIcons[RenderTypes.Overhang],
|
||||
viewData[RenderTypes.Overhang].image,
|
||||
() => sceneContext.ViewState.RenderType == RenderTypes.Overhang,
|
||||
(isChecked) =>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit ecf30ee57ee6d272291c7f7a3321179cf1f196fe
|
||||
Subproject commit 1313a4c9560a31fd8f507b97f68864c43708e9f1
|
||||
Loading…
Add table
Add a link
Reference in a new issue