You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WPF C#应用中集成Revit 2021 Viewer?求示例参考

在WPF C#应用中集成Revit Viewer的方案与示例

方案1:基于Revit API嵌入原生Revit Viewer

这种方式依赖本地安装的Revit,适合和Revit深度绑定的应用场景,比如Revit插件衍生工具。

实现步骤与代码示例

  1. 引用Revit API程序集:找到Revit安装目录下的RevitAPI.dll和RevitAPIUI.dll,添加到项目引用中。
  2. 通过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,适合跨场景的轻量化模型查看需求。

实现步骤与代码示例

  1. 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>
  1. 本地网页(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>
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:42:24