前言
1. 核心思路
本方案旨在 WPF 桌面应用程序中,以低开发成本实现复杂 3D 模型的交互式查看功能。其核心思想是**"利用而非再造"**:我们利用 SolidWorks 成熟的 Web 发布功能,将繁重的 3D 渲染和交互逻辑交由浏览器内核处理,而 WPF 应用则作为一个功能强大的"容器"或"框架",负责模型加载、数据集成和用户界面管理。
实现流程如下:
- 模型导出:使用 SolidWorks 将设计好的 3D 装配体或零件导出为 HTML 格式。此 HTML 文件是一个独立的、包含所有交互逻辑(缩放、旋转、剖切、爆炸视图等)和模型数据的网页包。
- 嵌入控件 :在 WPF 项目中集成
Microsoft.Web.WebView2控件。WebView2基于 Microsoft Edge (Chromium) 内核,能够完美支持现代 Web 技术和复杂的 JavaScript 库,这是实现本方案的关键技术前提。 - 加载模型 :WPF 应用启动一个本地微型 Web 服务器,并将
WebView2控件的Source指向该服务器上的 HTML 文件地址(如http://localhost:port/model.html)。这种加载方式可以有效绕过浏览器对本地文件(file://协议)的安全限制,确保所有资源(JS、CSS、模型数据)被正确加载和执行。 - 双向通信 (可选):通过
WebView2提供的 API,实现 C# 后端与网页中 JavaScript 的双向通信。- C# -> JS:从 WPF 界面调用网页函数,例如"重置视图"、"切换爆炸状态"等。
- JS -> C#:当用户在模型上执行操作(如点击某个零件),网页可将零件信息传递给 WPF,以触发相应的业务逻辑(如显示零件详情、物料清单等)。
2. 优点
- 开发效率极高:无需从零开始研究复杂的 3D 渲染引擎(如 OpenGL 或 DirectX),也无需处理模型文件解析、光照计算、碰撞检测等底层细节,开发周期大幅缩短。
- 功能强大且成熟:直接复用 SolidWorks 官方的查看器,功能稳定、全面且经过充分测试,支持所有主流的 3D 查看操作,用户体验与 SolidWorks 内置查看器高度一致。
- 技术栈简单 :对于 WPF 开发者而言,主要工作集中在
WebView2的使用和本地服务器的搭建上,技术门槛相对较低,易于维护。 - 出色的跨模型兼容性:理论上,任何能被 SolidWorks 导出为 HTML 格式的 3D 模型(无论原始来源是 SolidWorks 还是通过转换导入的其他格式),都可以被此方案无缝支持。
- UI/UX 分离:3D 查看器作为独立的 Web 组件,与 WPF 的主界面解耦,便于独立更新和维护,同时也为将来替换为其他 Web 查看器技术保留了可能性。
3. 缺点
- 依赖外部运行时 :目标计算机必须安装 Microsoft Edge WebView2 Runtime。虽然现代 Windows 系统已普遍自带,但仍需在部署策略中加以考虑(如引导用户安装或打包进安装程序)。
- 性能开销:相较于原生渲染引擎,嵌入一个完整的浏览器内核会带来额外的内存和 CPU 开销。对于配置极低的设备,可能会有轻微的性能影响。
- 功能边界受限:所有 3D 交互功能均受限于 SolidWorks 导出 HTML 时的能力。如果 SolidWorks 的 Web 查看器不支持某项特定功能(如高级材质编辑、自定义着色器),则 WPF 应用也无法实现。
- 启动延迟 :
WebView2控件初始化和加载大型 3D 模型需要一定时间,应用首次打开模型时可能会有短暂的加载延迟。 - 交互复杂性:虽然双向通信功能强大,但实现起来比直接调用原生 API 更为复杂,需要处理异步操作和数据类型转换,增加了调试难度。
4. 最佳实践建议
- 强制使用
WebView2:切勿 使用 WPF 旧版的WebBrowser控件,其 IE 内核无法解析现代 JavaScript,会导致模型加载失败或功能异常。 - 采用本地服务器加载 :强烈推荐 通过本地 HTTP 服务器加载 HTML 文件,而不是直接使用
file://路径。这是确保模型所有资源正确加载和脚本正常运行的最可靠方法。 - 封装通信逻辑 :将 C# 与 JavaScript 的双向通信逻辑封装成独立的服务或类,提供清晰的接口(如
SelectPart(string partId)),避免在 UI 代码中混杂复杂的交互细节。 - 优雅地处理加载状态 :在模型加载期间,在
WebView2控件上层显示一个加载指示器(如进度环),提升用户体验。加载完成后隐藏指示器。 - 部署时包含 WebView2 Runtime:为了提供最佳的用户体验,建议将 WebView2 Evergreen Bootstrapper 集成到应用的安装包中,实现一键安装,避免用户因缺少运行时而无法使用。
Soldiworks操作
一、导出Solidworks文件
1、打开solidworks的3D建模文件点击【文件】,再次点击【出版到eDrawings】

2、跟着默认点即可

3、稍等一会儿即可跳转到新界面

4、新界面将文件另存为

5、选择Html文件即可

6、设置好名字选择保存即可

WPF操作
一、添加WPF依赖
1、添加依赖,进入Nuget管理器里添加管理

2、搜索"Microsoft.Web.WebView2",弹出的列表里选择"MicroSoft"的,点击安装到当前工程即可

二、添加代码
1、添加代码
cs
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"

2、最后添加控件,写入URL地址为solidworks导出的HTML文件即可
cs
<Grid>
<wv2:WebView2 Name="myWebView" Source="b:\vs\test3ddemo\3d_test_demo\file\3D模型.html"/>
<!--<wv2:WebView2 Name="myWebView" Source="https://www.baidu.com"/>-->
</Grid>
预览效果:
