.NET 跨平台三维应用界面方案:AvaloniaUI

前言

AvaloniaUI是一个优秀的XAML的跨平台UI框架,支持Windows、Linux、MacOS。Avalonia 已经成熟并且可以投入生产。

本文介绍在Vistual Studio 2022中使用Avalonia并与AnyCAD Rapid SDK三维控件集成的环境搭建过程。

初始化环境.

安装Avalonia.Templates

dotnet new install Avalonia.Templates

这样在VS2022中就可以看到创建Avalonia应用的模板。若之前安装过可忽略此步骤。

创建项目

启动VS,选择创建AvaloniaUI项目

.NET 跨平台三维应用界面方案:AvaloniaUI

选一下.NET 6 版本和Avalonia版本

.NET 跨平台三维应用界面方案:AvaloniaUI

配置项目

从nuget.org上安装AnyCAD AvaloniaUI。

.NET 跨平台三维应用界面方案:AvaloniaUI

设计界面

在MainWindow.axaml里面集成AnyCAD Rapid控件:

首先引入程序集: xmlns:anycad="clr-namespace:AnyCAD.AvaloniaUI;assembly=AnyCAD.AvaloniaUI"

设计布局

直接加个Button和三维控件。

完整的xaml如下:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:anycad="clr-namespace:AnyCAD.AvaloniaUI;assembly=AnyCAD.AvaloniaUI"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="AnyCAD.AvaloniaApp.MainWindow"
        Title="AnyCAD.AvaloniaApp">
    <StackPanel>
        <Button Content="打开" Width="160"/>
        <anycad:RenderControl x:Name="mRenderView" Width="800" Height="600"></anycad:RenderControl>
    </StackPanel>
</Window>

初始化控件

在Program.cs修改初始化代码, Main函数做修改

[STAThread]
public static void Main(string[] args)
{
    // 初始化
    AnyCAD.Foundation.GlobalInstance.Initialize();

    BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);

    // 释放资源
    AnyCAD.Foundation.GlobalInstance.Destroy();
}

运行一下:

.NET 跨平台三维应用界面方案:AvaloniaUI

显示模型

MainWindow函数中响应一下Buttond的Click事件

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();           
    }

    public void OnOpen(object sender, RoutedEventArgs e)
    {
        var dlg = new OpenFileDialog();
        dlg.Filters.Add(new FileDialogFilter() { Name = "Model Files", Extensions = { "step", "stp", "iges", "igs" } });

        var result = dlg.ShowAsync(this);
        if (result == null)
            return;

        string fileName = result.Result[0];

        var shape = ShapeIO.Open(fileName);
        if(shape != null)
        {
            var node = BrepSceneNode.Create(shape, null, null);
            var scene = mRenderView.ViewContext.GetScene();
            scene.AddNode(node);

            mRenderView.ViewContext.RequestUpdate(EnumUpdateFlags.Scene);
        }
    }
}

再运行一下,打开个模型

.NET 跨平台三维应用界面方案:AvaloniaUI

总结

AvaloniaUI一款优秀的跨平台.NET UI库,结合AnyCAD Rapid SDK for AvaloniaUI,就可以快速开发跨平台的三维应用。

AnyCAD Rapid SDK的更多功能请参考anycad.rapid.net.sample。

本文完整代码:https://gitee.com/anycad/anycad.rapid.net.sample/tree/master/AnyCAD.AvaloniaApp

注:AnyCAD Rapid SDK for AvaloniaUI后续推出支持跨平台的版本,敬请期待。