惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
博客园 - Franky
罗磊的独立博客
G
Google Developers Blog
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
Recent Announcements
Recent Announcements
V
V2EX
F
Fortinet All Blogs
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
U
Unit 42
GbyAI
GbyAI
A
About on SuperTechFans
WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
D
DataBreaches.Net
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MongoDB | Blog
MongoDB | Blog

博客园 - AnyCAD

ACIS SAT 文件格式详解及其解析 基于.NET开发STEP三维模型浏览器 【源码】蚁群算法TSP问题可视化 Python下的三维建模和可视化 .NET8:快速集成Rapid.NET三维控件 AnyCAD程序无法启动的问题解决方法 基于AvaloniaUI开发跨平台.NET三维应用:环境搭建 基于.NET三维控件的个性化管道软件开发 .NET6: 开发基于WPF的摩登三维工业软件 (10) - 机器人 .NET6: 开发基于WPF的摩登三维工业软件 (8) - MVVM .NET6: 开发基于WPF的摩登三维工业软件 (7) .NET6: 开发基于WPF的摩登三维工业软件 (2) .NET6: 开发基于WPF的摩登三维工业软件 十行代码搭建基于.NET6三维应用程序 基于.NET的机械运动模拟应用开发 Linux下基于.NET5开发CAX应用 .NET5下的三维应用程序开发 本地Nuget包管理 基于.NET实现Matlab备用方案
.NET6: 三分钟搭建WPF三维应用
AnyCAD · 2022-01-02 · via 博客园 - AnyCAD

要运行本文中的示例,请先安装Vistual Studio 2022,社区版就可以了。

1 创建项目

选择创建WPF应用
image

给程序起一个酷酷的名字,选一个酷酷的位置:
image

选一下.NET6
image

2 配置项目

从nuget.org上安装AnyCAD Rapid SDK 2022。
image

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>

运行一下:
image

5 显示模型

  • 增加一个ViewerReady事件
    image
 <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);
        }

在三维控件初始化完成之前是不能进行对控件进行操作的

再运行一下:
image

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也一样,通过简单几步即可为应用添加三维能力,让程序显得高大上!

AnyCAD Rapid SDK的包括三维显示、造型、STEP/IGES读取等场景的三维功能,能够满足大部分的三维工业软件应用场景,比如CAD设计、CAE仿真、CAM加工,机器人模拟等,可以应用在建筑、机械、电力、化工、自动化等多个领域。