使用.NET6 Avalonia开发跨平台三维应用
本文介绍在Vistual Studio 2022中使用Avalonia和集成AnyCAD Rapid AvaloniaUI三维控件的过程。
0 初始化环境
安装Avalonia.Templates
dotnet new install Avalonia.Templates
若之前安装过可忽略此步骤。
1 创建项目
选择创建AvaloniaUI项目

选一下.NET6版本和Avalonia版本

2 配置项目
2.1 安装AnyCAD AvaloniaUI组件
从nuget.org上安装AnyCAD AvaloniaUI。

2.2 增加HDPI支持
修改app.manifest,在尾部增加 asmv3:application 相关配置
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"><!-- 新增加的内容,支持HDPI --><asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"><asmv3:windowsSettings><dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware><dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness></asmv3:windowsSettings></asmv3:application>
</assembly>
3 设计界面
在MainWindow.axaml里面集成AnyCAD Rapid控件:
- 首先引入程序集: AnyCAD.Avalonia.NET6:
xmlns:anycad="clr-namespace:AnyCAD.AvaloniaUI;assembly=AnyCAD.Avalonia.NET6"
- 设计布局
直接加个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.Avalonia.NET6"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>
4 初始化控件
在Program.cs修改初始化代码, Main函数做修改
[STAThread]public static void Main(string[] args){// 初始化AnyCAD.Foundation.GlobalInstance.Initialize();BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);// 释放资源AnyCAD.Foundation.GlobalInstance.Destroy();}
运行一下:

5 显示模型
- 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.Scene;scene.AddNode(node);mRenderView.ViewContext.RequestUpdate(EnumUpdateFlags.Scene);}}}
再运行一下,打开个模型

6 总结
AvaloniaUI一款优秀的跨平台.NET UI库,结合AnyCAD Rapid .NET for AvaloniaUI,就可以快速开发跨平台的三维应用。
本文完整代码:anycad.rapid.net.sample
相关文章:
使用.NET6 Avalonia开发跨平台三维应用
本文介绍在Vistual Studio 2022中使用Avalonia和集成AnyCAD Rapid AvaloniaUI三维控件的过程。 0 初始化环境 安装Avalonia.Templates dotnet new install Avalonia.Templates若之前安装过可忽略此步骤。 1 创建项目 选择创建AvaloniaUI项目 选一下.NET6版本和Avalonia版…...
linux(ubuntu)中crontab定时器命令详解 以及windows中定时器
文章目录 linux(ubuntu)中crontab定时器命令详解基本语法crontab 文件格式通配符示例在Ubuntu中,定时任务cron服务默认被安装。可以通过以下命令操作该服务:其他注意事项windows中定时器任务的创建步骤:常规触发器操作…...
植物病害检测YOLOV8,OPENCV调用
【免费】植物病害检测,10种类型,YOLOV8训练,转换成ONNX,OPENCV调用资源-CSDN文库 植物病害检测,YOLOV8NANO,训练得到PT模型,然后转换成ONNX,OPENCV的DNN调用,支持C,PYTH…...
C++初阶:入门泛型编程(函数模板和类模板)
大致介绍了一下C/C内存管理、new与delete后:C初阶:C/C内存管理、new与delete详解 我们接下来终于进入了模版的学习了,今天就先来入门泛型编程 文章目录 1.泛型编程2.函数模版2.1概念2.2格式2.3函数模版的原理2.4函数模版的实例化2.4.1隐式实例…...
【RT-DETR有效改进】CARAFE提高精度的上采样方法(助力细节长点)
👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的CARAFE(Content-Aware ReAssembly of FEatures)是一种用于增强卷积神经网络特征图的上采样方法。其主要旨在改进传统的上采样方法(就是我们的Upsample)的性能。CARAFE的核心思想是:使用输…...
leetcode 27.移除元素(python版)
需求 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度…...
分布式场景怎么Join
背景 最近在阅读查询优化器的论文,发现System R中对于Join操作的定义一般分为了两种,即嵌套循环、排序-合并联接。 考虑到我的领域是在处理分库分表或者其他的分区模式,这让我开始不由得联想我们怎么在分布式场景应用这个Join逻辑ÿ…...
springboot2.7继承swagger knif4j
maven pom依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>4.4.0</version></dependency> yml配置 knife4j:enable: trueopenapi:title: …...
C++ 实现单例模式
单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问点。 创建单一实例 怎么让某个类只能创建一个实例? 思路:将类的构造函数私有,然后提供一个静态方法访问对象。调用类内成员函数需要对象,但我们又无法…...
Java多线程--线程安全问题练习题
文章目录 (1)练习题1(2)练习题2(3)练习题3 现在咱们线程一共说了这么几件事情,如下: 具体文章见专栏。 接下来看几个练习题吧。 (1)练习题1 🌋题…...
PHY6252低成本Mesh组网蓝牙芯片
超低成本MESH组网蓝牙芯片PHY6252蓝牙Mesh组网简介 蓝⽛Mesh⽹络使⽤,依赖于低功耗蓝⽛(BLE)。低功耗蓝⽛技术是蓝⽛Mesh使用的无线通信协议栈,蓝牙BR/EDR能够与实现一台设备到另一台设备的连接和通信,建立“一对一”的关系,大多数…...
红外图像中两点校正的增益系数与偏置系数的计算公式推导
增益系数(K) 根据两个温度下的响应值,可求得各响应单元的响应曲线(即斜率),累加所有曲线的斜率求平均斜率值。 平均斜率值与各响应单元的斜率的比值即为该单元的K增益系数。结论:某单元的增益系…...
C++/MFC:在窗体Form(Dialog)中多个编辑框时,在输入时将回车解释为TAB键,将输入焦点移到下一个编辑框的方法
很多时候,为了输入方便,常用的做法,就是将回车键解释为将输入焦点移动到下一个编辑框中。就像是我的VxTerm中的快速连接输入一样: VxTerm是一个国产化替代的SSH工具,可以从本站的资源中免费下载并且免费使用ÿ…...
鸿蒙南向开发——GN快速入门指南
运行GN(Generate Ninja) 运行gn,你只需从命令行运行gn,对于大型项目,GN是与源码一起的。 对于Chromium和基于Chromium的项目,有一个在depot_tools中的脚本,它需要加入到你的PATH环境变量中。该脚本将在包含当前目录的…...
PyCharm常用快捷键和设置
Ctrl Space 基本的代码完成(类、方法、属性) Ctrl Alt Space 快速导入任意类 Ctrl Shift Enter 语句完成 Ctrl P 参数信息(在方法中调用参数) Ctrl Q 快速查看文档 F1 外部文档 Shift F1 外部文档…...
Unity - 调节camera物理相机参数(HDRP)
在 “Hierarchy” 右键 -> Volume -> Global Volume new 一个 profile, 设置Mode为Pysical Camera 再点击camera组件,这时候设置 ISO、Shutter Speed、Aperture等参数值还会有效。...
@JsonIgnore的使用及相关问题的解决
目录 1 前言 2 对比及其使用方法 3 遇到的相关问题及解决方法 1 前言 在我们编写的后端项目中,有时候可能需要将某个实体类以JSON格式传送给前端,但是其中可能有部分内容我们并不想传送,这时候我们选择将这部分内容变成Null,这…...
万户 ezOFFICE SendFileCheckTemplateEdit.jsp SQL注入漏洞
0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…...
自建DNS劫持服务器,纯内网劫持PS5,屏蔽更新,自动hen
背景:目前PS5首次折腾必须要连外网,还要改DNS,除非使用ESP8266/32, 本文的方法是完全不改DNS,不使用ESP8266,不连接外网的情况下自动折腾 能实现什么: 1.折腾全程不连接外网 2.完全自建hen服务器ÿ…...
C语言王道第八周一题
Description 初始化顺序表(顺序表中元素为整型),里边的元素是 1,2,3,然后通过 scanf 读取一个元素(假如插入的是 6),插入到第 2 个位置,打印输出顺序表,每个 元素占 3 个…...
Von Neumann内存映射检测与MON51调试实践
1. 理解Von Neumann内存映射的基础概念在嵌入式系统开发中,内存架构的选择直接影响着程序的执行效率和硬件设计。Von Neumann架构与哈佛架构是两种最基本的内存组织方式,而MON51调试器需要明确识别目标硬件的内存映射方式才能正常工作。Von Neumann架构的…...
Paper2Poster多智能体架构深度解析:从学术论文到专业海报的自动化生成技术
Paper2Poster多智能体架构深度解析:从学术论文到专业海报的自动化生成技术 【免费下载链接】Paper2Poster [NeurIPS 2025] Open-source Multi-agent Poster Generation from Papers 项目地址: https://gitcode.com/gh_mirrors/pa/Paper2Poster 在学术传播领域…...
别再只认ldd了!盘点5种查看Linux程序动态库依赖的方法(含静态/交叉编译场景)
超越ldd:Linux二进制依赖分析的5种专业方法解析在Linux系统管理和开发中,遇到"不是动态可执行文件"的错误提示时,很多工程师的第一反应是困惑——明明是可执行文件,为什么ldd无法识别?这个问题背后隐藏着Lin…...
Agent Harness 系列:为什么你的 Agent 演示很顺、上线就崩?
导读: 同样的模型,换一套外围基础设施,排名从第 30 开外直接冲到第 5——没有改动任何模型权重,没有换更贵的 API。这不是玄学,这是 Agent Harness 的威力。本文是三篇系列的第一篇,从"为什么需要 Har…...
为什么91%的DeepSeek部署在第7轮后开始“失忆”?揭秘KV Cache碎片率超阈值的实时熔断策略
更多请点击: https://codechina.net 第一章:DeepSeek多轮对话优化 DeepSeek系列大模型在多轮对话场景中面临上下文衰减、指代歧义与意图漂移等典型挑战。为提升长程一致性与角色连贯性,需从提示工程、状态管理与响应重校准三个维度协同优化。…...
卖电子元器件怎么找客户?下游工厂在哪里
卖电子元器件找客户,本质是找用这些元器件的下游工厂——即需要采购连接器、继电器、电容、电阻、变压器等被动及结构件的整机或 PCBA 生产企业。核心难点不是"不知道哪些行业用",而是无法把这些下游工厂的名单、规模和采购联系人系统地整理出…...
uniAPP 所有章节知识体系概述和网站播放器落地一体方案
uniAPP 前十章知识体系 由于 uni-app 并没有官方统一的"前十章"教程划分,不同教材的章节结构有所不同。以下基于多本主流教材内容,整合出一套通用的 uni-app 学习路线,涵盖从入门基础到后端通信的核心知识。 第1章 初识 uni-app 本章是学习的起点,帮助建立对 …...
昇腾CANN ops-transformer FlashAttention 反向传播:不存 Attention 矩阵怎么求梯度
FlashAttention 前向传播的精髓:不存 NN 的 attention 矩阵,只存 O(N) 的输出和 softmax 归一化因子。反向传播时,需要 attention 矩阵来计算梯度——但矩阵没存。解法:重新算一遍。用额外的计算换显存——这是典型的 compute-for…...
ODM终极指南:5步快速上手免费开源无人机影像处理,生成专业三维模型与正射影像
ODM终极指南:5步快速上手免费开源无人机影像处理,生成专业三维模型与正射影像 【免费下载链接】ODM A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. 📷 项目地址: https…...
忘记压缩包密码不用慌:3步自动化找回加密文件的终极方案
忘记压缩包密码不用慌:3步自动化找回加密文件的终极方案 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经面对一个加密…...
