.NET 8 + WPF 打造的数控机床仿真平台

项目概述

一个基于.NET 8.0开发的数控机床仿真平台,作为早期项目 MachineSimulation.DX 的演进版本,专注于机床结构、工装(fixture)和刀具(tool)的编辑、加载与三维可视化。

项目采用WPF + MVVM 架构,3D 渲染基于HelixToolkit.Wpf.SharpDX,支持高保真材料移除仿真,并通过客户端-服务器架构实现数据的集中管理与多端同步,为数控系统开发、学习演示和虚拟调试提供完整解决方案。

核心升级与技术演进

1、从 .NET Framework 迁移至.NET Core 8.0,提升性能与现代化兼容性

2、支持从REST 服务器动态加载机器数据,替代本地硬编码配置

3、MVVM 框架由MVVMLightLib升级为CommunityToolkit.Mvvm,代码更简洁、维护性更强

4、3D 引擎从 HelixToolkit.Wpf 切换至HelixToolkit.Wpf.SharpDX,利用 DirectX 实现更高帧率渲染

5、视图模型(ViewModel)设计更轻量,减少冗余逻辑

6、重构材料移除算法库,显著提升计算效率

7、支持在材料移除仿真中管理多种类型刀具(如铣刀、钻头等)

8、模块间依赖大幅降低,实现高内聚、低耦合的架构

客户端应用模块

Client

加载机器元素的 STL 模型文件,并发布到数据服务器。

Client.Machine

加载由 MachineEditor 生成的机器结构文件(*.xml),可发布至服务器或导出为 JSON 格式。

Client.Tooling

加载 ToolingEditor 创建的工装文件(*.tooling),支持发布或保存为 jTooling(JSON)格式。

Client.Tools

加载 ToolEditor 生成的刀具文件(*.tools),可发布或导出为 JTools(JSON)格式。

示例资源(位于Examples文件夹)

  • Simple3AxesCnc.json:基础三轴机床结构定义

  • Models/:包含所有 STL 格式的机器部件模型

  • SimpleToolSet.jTools:示例刀具数据库

  • SimpleTooling.jTooling:标准工装配置

  • SimpleTooling2.jTooling:用于运行test news.msteps的专用工装

  • Simple3AxesCnc.jenv:完整工作环境(含结构、模型、刀具、工装)

  • Simple3AxesCnc(news).jenv:适配新测试用例的工作环境
    antina.msteps:经典加工路径示例

  • test news.msteps:新功能验证用加工指令文件

核心类库模块说明

1、数据层

Machine.Data:主数据模型库

Machine.Data.Base / Enums / Interfaces / Factories:支撑数据模型的基础组件

Machine.Data.Converters:JSON/XML 序列化转换器
Machine.Data.Extensions.ViewModels:数据模型与 ViewModel 的桥接扩展

Mesh.Data:机器元素网格(STL)的数据结构定义

2、数据源适配

Machine.DataSource.File.Json / Xml:本地 JSON/XML 文件读写

Machine.DataSource.Client.Rest:通过 REST API 与服务器交互

3、编辑与步骤解析

Machine.Editor:机床结构编辑器

Tools.Editor:刀具集编辑器

Tooling.Editor:工装配置编辑器

Machine.StepsSource.File.Iso / Msteps:解析 ISO G代码 或 自定义 .msteps 加工指令

4、视图与 ViewModel

Machine.Views / Converters:WPF 视图及绑定转换器

Machine.ViewModels及其子模块(Base、Interfaces、Messaging、UI 等):完整 MVVM 实现体系

Machine.ViewModels.Ioc:轻量级控制反转容器

5、3D 与几何

Machine.3D.Views:3D 场景渲染视图(基于 HelixToolkit)

Machine.3D.Geometry.Provider:解耦的模型加载服务

6、材料移除仿真

MaterialRemove.Interfaces / Geometry:核心算法与接口(基于 geometry3Sharp 优化)

MaterialRemove.ViewModels / ViewModels.3D:仿真逻辑与 3D 可视化分离

MaterialRemove.Machine.Bridge:连接材料移除模块与主系统 ViewModel

MaterialRemove.Test:专用测试与调试工具

7、服务端

Server:基于 REST 的数据服务器,使用 SQLite 存储机床结构、工装、刀具及模型元数据

项目代码

public static Geometry3D Convert(AxisAlignedBox3d bb) { var builder = new MeshBuilder(); builder.AddBox(new SharpDX.Vector3((float)bb.Min.x, (float)bb.Min.y, (float)bb.Min.z), (float)(bb.Max.x - bb.Min.x), (float)(bb.Max.y - bb.Min.y), (float)(bb.Max.z - bb.Min.z)); return builder.ToMesh(); } public static Geometry3D Convert(DMesh3 mesh) { var builder = new MeshBuilder(); // 将 DMesh3 的顶点转换为 Vector3Collection var vertices = new Vector3Collection(); foreach (var v in mesh.Vertices()) { vertices.Add(new Vector3((float)v.x, (float)v.y, (float)v.z)); } // 将 DMesh3 的三角形转换为 IntCollection var triangles = new IntCollection(); foreach (var t in mesh.Triangles()) { triangles.Add(t.a); triangles.Add(t.b); triangles.Add(t.c); } builder.Append(vertices, triangles); return builder.ToMesh(); } public static Geometry3D Convert(MaterialRemove.Interfaces.Geometry g) { var builder = new MeshBuilder(); var vc = new Vector3Collection(g.Vertexes.Select(v => new Vector3((float)v.x, (float)v.y, (float)v.z))); var tc = new IntCollection((IEnumerable<int>)g.Triangles); builder.Append(vc, tc); return builder.ToMesh(); }

项目效果

工具编辑器界面

工装编辑器界面

加工仿真运行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1156042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从阅文招聘JD看网文平台算法化-网文平台拥抱科技·卓伊凡

从阅文招聘JD看网文平台算法化-网文平台拥抱科技卓伊凡 “智能搜索”岗位往往比“推荐算法”更能暴露一家内容平台的真实技术路线——因为搜索是内容分发的“入口层基础设施”&#xff0c;一旦它智能化&#xff0c;后面推荐、增长、风控、审核&#xff0c;都会被同一套数据与模…

Figma中文界面插件:让专业设计工具说中文

Figma中文界面插件&#xff1a;让专业设计工具说中文 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在被Figma满屏的英文菜单搞得头晕眼花&#xff1f;想要快速上手这款专业设计工具…

剖析大数据领域Spark的任务调度算法

剖析大数据领域Spark的任务调度算法 关键词:Spark、任务调度、DAG调度器、任务集调度器、资源分配、调度策略、性能优化 摘要:本文深入剖析Apache Spark的任务调度机制,从架构设计到实现细节进行全面解析。文章首先介绍Spark调度系统的整体架构,然后详细分析DAG调度器和任务…

【PyTorch】2024保姆级安装教程-Python-(CPU+GPU详细完整版)-

PyTorch 安装指南&#xff08;CPU/GPU 版本&#xff09;环境准备确保已安装 Python&#xff08;推荐 3.8-3.10 版本&#xff09;和 pip 包管理工具。可通过以下命令验证&#xff1a;python --version pip --version对于 GPU 版本&#xff0c;需提前安装 CUDA 工具包&#xff08…

资深Android开发工程师职位深度解析:基于广州极飞科技股份有限公司的职位需求

广州极飞科技股份有限公司 资深Android开发工程师(J11083) 职位信息 工作职责: 1.参与 Android 端的核心产品研发,包含需求分析、方案设计、开发实现、性能优化完整流程; 2.开发及维护基础服务组件,调研 Android 平台的***并推广使用; 3.与硬件、算法、设计团队紧密合作,…

CCS20高可用性架构构建:实际案例分享

从理论到实战&#xff1a;CCS20如何实现毫秒级无感切换&#xff1f;在轨道交通信号控制室里&#xff0c;一次控制器重启可能意味着列车延误&#xff1b;在变电站中&#xff0c;哪怕一秒的通信中断都可能导致保护误动。面对这些“零容忍”停机的关键系统&#xff0c;高可用性&am…

Anthropic 重磅发布 Cowork:让普通人都能用上Claude Code!

你是否也有这样的困扰&#xff1a;下载文件夹乱成一锅粥&#xff0c;找不到需要的文件&#xff1b;一堆消费截图散落在手机相册里&#xff0c;整理成表格要花半天时间&#xff1b;零零散散的工作笔记堆积如山&#xff0c;却迟迟理不出头绪……过去&#xff0c;这些问题只能靠人…

全网最全9个一键生成论文工具,本科生毕业论文必备!

全网最全9个一键生成论文工具&#xff0c;本科生毕业论文必备&#xff01; AI 工具如何助力论文写作&#xff1f; 在当前的学术环境中&#xff0c;越来越多的本科生开始借助 AI 工具来提升论文写作效率。无论是查找资料、撰写大纲&#xff0c;还是进行内容改写和降重&#xff0…

Flink:窗口同组联结(Window CoGroup)

本文重点 在前面的课程中,无论是窗口联结还是间隔联结,都会将两条流中的元素进行两两匹配,然后分别以第一个元素和第二个元素的方式输入到处理函数中,如果我们不想这样匹配该如何操作? API apply()传入一个CoGroupFunction,它的定义如下: public interface CoGroupFu…

意料之内的回调,倒车接人?

一&#xff0c;别追高&#xff01;科技股可持有别加仓&#xff0c;红利股耐住等切换市场上新的热门标的火得一塌糊涂&#xff0c;但大家都没注意到&#xff0c;之前的热门 “老龙头” 今年反而一直在跌。尐程序&#xff1a;期权汇道理很简单&#xff1a;再好的公司&#xff0c;…

Figma中文界面终极指南:3步解锁专业设计无障碍体验

Figma中文界面终极指南&#xff1a;3步解锁专业设计无障碍体验 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma英文界面而困扰&#xff1f;想要快速上手这款专业设计工具却受…

【顶级EI复现】基于主从博弈的售电商多元零售套餐设计与多级市场购电策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

人工智能之数学基础:正态分布在机器学习领域中的体现

本文重点 中心极限定理保证了某些概率分布以正态分布为极限分布,这在机器学习中也是成立的,所以在机器学习中我们假设随机变量服从正态分布。在机器学习中有很多地方体现了正态分布的思想。 中心极限定理的支撑 中心极限定理是统计学中的核心理论,它指出在适当条件下,大量…

STM32CubeMX安装兼容性问题解决:全面讲解方案

STM32CubeMX安装踩坑实录&#xff1a;从报错到秒启动的全链路排障指南 你有没有经历过这样的场景&#xff1f; 刚下载好 SetupSTM32CubeMX.exe &#xff0c;双击运行——结果弹窗一闪而过&#xff1b; 或者卡在“Initializing JVM”界面纹丝不动&#xff1b; 再不然就是提…

USB-Blaster驱动手动安装步骤:系统学习与实践

USB-Blaster驱动装不上&#xff1f;一文讲透手动安装全流程与底层机制你有没有遇到过这样的场景&#xff1a;刚把FPGA开发板接上电脑&#xff0c;打开Quartus Programmer准备下载程序&#xff0c;结果“Hardware Setup”里空空如也——USB-Blaster压根没被识别。设备管理器里多…

软件测试面试(内附答案)

前言 转眼2026年招聘季已将到来&#xff0c;没点真本事真技术&#xff0c;没点面试经验&#xff0c;不了解点职场套路&#xff0c;如何过五关斩六将&#xff1f;如何打败面试官&#xff1f;如何拿下那梦寐以求的offer&#xff1f; 如果你的跳槽意向已经很确定&#xff0c;那么…

厦门大学突破:多模态模型进入“推理进化”时代,7B小模型的大逆袭

Datawhale干货 作者&#xff1a;厦门大学MAC团队在多模态大模型&#xff08;MLLM&#xff09;的研究浪潮中&#xff0c;我们似乎习惯了一种固定的“暴力美学”&#xff1a;想要模型掌握新技能&#xff0c;就必须投入昂贵的算力进行全量微调&#xff08;SFT&#xff09;或强化学…

【复现】MFAC无模型自适应控制CFDL+PFDL+FFDL三个非线性系统动态线性研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Java 提供了丰富的数据结构来处理和组织数据【1】

Java 的 java.util 包中提供了许多这些数据结构的实现&#xff0c;可以根据需要选择合适的类。 以下是一些常见的 Java 数据结构&#xff1a; 数组&#xff08;Arrays&#xff09; 数组&#xff08;Arrays&#xff09;是一种基本的数据结构&#xff0c;可以存储固定大小的相…

Keil uVision5嵌入式C开发:新手教程(从零配置环境)

从零开始搭建 Keil uVision5 嵌入式开发环境&#xff1a;新手也能看懂的实战指南 你是不是也曾经面对一块 STM32 开发板&#xff0c;手握资料却无从下手&#xff1f;打开 Keil 看着一堆弹窗和选项&#xff0c;心里直打鼓&#xff1a;“这玩意儿到底怎么用&#xff1f;”别急—…