如何在WPF C#应用中集成Revit 2021 Viewer?求示例参考
在WPF C#应用中集成Revit Viewer的方案与示例
方案1:基于Revit API嵌入原生Revit Viewer
这种方式依赖本地安装的Revit,适合和Revit深度绑定的应用场景,比如Revit插件衍生工具。
实现步骤与代码示例
- 引用Revit API程序集:找到Revit安装目录下的
RevitAPI.dll和RevitAPIUI.dll,添加到项目引用中。 - 通过WPF的
WindowsFormsHost嵌入Revit的Viewer控件:
using Autodesk.Revit.ApplicationServices; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using System.Windows.Forms.Integration; // 初始化Revit应用实例 Application revitApp = new Application(); // 加载本地Revit模型 Document revitDoc = revitApp.OpenDocumentFile(@"C:\YourRevitModel.rvt"); // 获取模型中的默认3D视图 View3D targetView = revitDoc.GetElement(revitDoc.ActiveView.Id) as View3D; // 创建Revit原生Viewer控件 ViewerPane viewerControl = new ViewerPane(); viewerControl.SetView(targetView); // 将WinForms控件嵌入WPF容器 WindowsFormsHost hostContainer = new WindowsFormsHost(); hostContainer.Child = viewerControl; // 添加到WPF窗口的Grid布局中 yourWpfGrid.Children.Add(hostContainer);
注意:应用必须以管理员权限运行,且要保证项目引用的Revit API版本和本地安装的Revit版本完全一致,运行时会启动Revit进程。
方案2:嵌入Autodesk Forge Viewer(无需本地Revit)
如果不想依赖本地Revit环境,可以用基于WebGL的Forge Viewer,通过WPF的WebView2控件嵌入网页版Viewer,适合跨场景的轻量化模型查看需求。
实现步骤与代码示例
- WPF界面添加WebView2控件(XAML):
<Window x:Class="RevitViewerWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" Title="Revit模型查看器" Height="600" Width="800"> <Grid> <wv2:WebView2 x:Name="forgeWebView" Source="pack://application:,,,/ForgeViewerPage.html"/> </Grid> </Window>
- 本地网页(ForgeViewerPage.html)加载Forge Viewer:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Forge Revit Viewer</title> <link rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/style.min.css"> <script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/viewer3D.min.js"></script> </head> <body style="margin:0; padding:0"> <div id="viewerContainer" style="width:100%; height:100%;"></div> <script> // 初始化Viewer并加载模型 function loadRevitModel(modelUrn) { const viewerOptions = { env: 'AutodeskProduction', accessToken: '你的Forge访问令牌' // 需从Forge开发者平台获取 }; Autodesk.Viewing.Initializer(viewerOptions, () => { const viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('viewerContainer')); viewer.start(); const docId = `urn:${modelUrn}`; Autodesk.Viewing.Document.load(docId, (doc) => viewer.loadDocumentNode(doc, doc.getRoot().getDefaultGeometry()), (err) => console.error('模型加载失败:', err) ); }); } // 接收WPF传递的模型URN window.addEventListener('message', (event) => { if(event.data.type === 'loadModel') { loadRevitModel(event.data.urn); } }); </script> </body> </html>
- WPF后台代码传递模型信息:
using Microsoft.Web.WebView2.Core; using System.Windows; namespace RevitViewerWPF { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); InitWebView(); } private async void InitWebView() { await forgeWebView.EnsureCoreWebView2Async(); // 传递已上传到Forge的模型URN(需先完成模型上传与格式转换) forgeWebView.CoreWebView2.PostWebMessageAsString(@"{""type"":""loadModel"", ""urn"":""你的模型URN""}"); } } }
注意:需要先注册Autodesk Forge开发者账号,创建应用获取访问令牌,再将Revit模型上传到Forge平台并转换为可查看的格式。
关键注意事项
- 原生Revit Viewer方案:强依赖本地Revit版本,权限要求高,但支持完整的Revit视图操作功能。
- Forge Viewer方案:无需本地Revit,轻量化,但依赖网络和Forge服务,需处理模型上传、转换和令牌管理流程。
内容的提问来源于stack exchange,提问作者user16918900
相关产品推荐
相关产品推荐

