要運作本文中的示例,請先安裝Vistual Studio 2022,社群版就可以了。
1 建立項目
選擇建立WPF應用
給程式起一個酷酷的名字,選一個酷酷的位置:
選一下.NET6
2 配置項目
從nuget.org上安裝AnyCAD Rapid SDK 2022。
3 設計界面
- 首先引入程式集:
xmlns:anycad="clr-namespace:AnyCAD.WPF;assembly=AnyCAD.WPF.NET6"
- 設計布局
給三維界面留個位置,采用經典的左右視窗。右邊用來顯示三維内容。完整的xaml如下:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
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:local="clr-namespace:WpfApp1"
xmlns:anycad="clr-namespace:AnyCAD.WPF;assembly=AnyCAD.WPF.NET6"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="100" Width="0.3*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<anycad:RenderControl Grid.Column="1" x:Name="mRenderCtrl"/>
</Grid>
</Window>
運作一下:
5 顯示模型
- 增加一個ViewerReady事件
<anycad:RenderControl Grid.Column="1" x:Name="mRenderCtrl" ViewerReady="mRenderCtrl_ViewerReady"/>
- 在mRenderCtrl_ViewerReady中建立一個球
private void mRenderCtrl_ViewerReady()
{
var shape = ShapeBuilder.MakeSphere(new GPnt(0, 0, 0), 100);
mRenderCtrl.ShowShape(shape, ColorTable.AliceBlue);
}
在三維控件初始化完成之前是不能進行對控件進行操作的
再運作一下:
6 資源釋放
在調試模式下,程式退出的時候在輸出視窗中,你可能會發現這樣的錯誤:
程式“[57196] WpfApp1.exe”已退出,傳回值為 3221225477 (0xc0000005) 'Access violation'。
這是因為AnyCAD Rapid SDK沒有正确的釋放資源。為保證三維控件資源能夠正确釋放,程式能夠得到正常的傳回值,隻需要這樣加一下Startup和Exit消息:
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml" Exit="Application_Exit" Startup="Application_Startup">
<Application.Resources>
</Application.Resources>
</Application>
代碼修改:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
AnyCAD.Foundation.GlobalInstance.Initialize();
}
private void Application_Exit(object sender, ExitEventArgs e)
{
AnyCAD.Foundation.GlobalInstance.Destroy();
}
}
7 總結
相比WinForms程式,WPF程式需要經常在XAML和代碼之間切換,使用門檻稍高,但熟悉就好了。
.NET6為開發者帶來了高效的開發體驗,而AnyCAD Rapid SDK也一樣,通過簡單幾步即可為應用添加三維能力,讓程式顯得高大上!