Hi.Wpf/Disp/RenderingWindow.cs
2025-04-06 19:55:34 +08:00

64 lines
2.1 KiB
C#

using Hi.Disp;
using Hi.Licenses;
using System;
using System.Windows;
using System.Windows.Media;
namespace Hi.Wpf.Disp
{
/// <summary>
/// Window for 3D rendering.
/// </summary>
public class RenderingWindow : Window, IGetDispEngine
{
public RenderingCanvas RenderingCanvas => Content as RenderingCanvas;
/// <summary>
/// Ctor.
/// </summary>
public RenderingWindow()
{
Title = nameof(RenderingWindow);
Height = 450;
Width = 800;
StateChanged += RenderingWind_StateChanged;
Content = new RenderingCanvas()
{
BorderThickness = new Thickness(1),
BorderBrush = Brushes.Black
};
}
private void RenderingWind_StateChanged(object sender, EventArgs e)
{
RenderingCanvas.DispEngine.IsVisible = WindowState != WindowState.Minimized;
}
/// <inheritdoc/>
public DispEngine GetDispEngine() => RenderingCanvas.DispEngine;
/// <summary>
/// Run a simple <see cref="RenderingWindow"/> application with given <paramref name="displayees"/>.
/// </summary>
/// <param name="title">Title</param>
/// <param name="displayees">displayees</param>
/// <returns>return value of <see cref="Application"/>.<see cref="Application.Run(Window)"/></returns>
public static int RunApplication(string title, params IDisplayee[] displayees)
{
License.LogInAll();
DispEngine.Init();
Application app = new Application
{
ShutdownMode = ShutdownMode.OnMainWindowClose
};
app.Exit += (o, e) =>
{
DispEngine.FinishDisp();
License.LogOutAll();
};
RenderingWindow window = new RenderingWindow() { Title = title };
window.RenderingCanvas.DispEngine.Displayee = new DispList(displayees);
window.RenderingCanvas.DispEngine.SetViewToHomeView();
return app.Run(window);
}
}
}