.NET Core项目中Forge Viewer无法显示Revit房间问题求助
Forge Viewer 显示Revit房间元素解决方案
现有实现代码
你当前已在.NET Core的模型转换接口中开启了GenerateMasterViews参数,相关后端转换代码如下:
[Route("api/forge/modelderivative/jobs")] public async Task<dynamic> TranslateObject([FromBody]TranslateObjectModel objModel) { dynamic oauth = await OAuthController.GetInternalAsync(); // prepare the payload var advOutputPayload = new JobSvf2OutputPayloadAdvanced(); advOutputPayload.GenerateMasterViews = true; List<JobPayloadItem> outputs = new List<JobPayloadItem>() { new JobPayloadItem( JobPayloadItem.TypeEnum.Svf2, new List<JobPayloadItem.ViewsEnum>() { JobPayloadItem.ViewsEnum._2d, JobPayloadItem.ViewsEnum._3d }, advOutputPayload ) }; JobPayload job; job = new JobPayload(new JobPayloadInput(objModel.objectName), new JobPayloadOutput(outputs)); // start the translation DerivativesApi derivative = new DerivativesApi(); derivative.Configuration.AccessToken = oauth.access_token; dynamic jobPosted = await derivative.TranslateAsync(job); return jobPosted; }
当前前端加载代码如下:
Autodesk.Viewing.Initializer(options, () => { viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer')); viewer.start(); var documentId = 'urn:' + urn; Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure); }); } function onDocumentLoadSuccess(doc) { var viewables = doc.getRoot().getDefaultGeometry(); viewer.loadDocumentNode(doc, viewables).then(i => { // documented loaded, any action? }); }
修复步骤
1. 重新触发模型转换
原有已转换的模型会存在缓存,开启GenerateMasterViews参数后需要重新转换模型,转换时可指定强制刷新参数覆盖原有缓存,确保Master视图正常生成。
注意:Revit原文件中需要保证房间元素有效,存在闭合边界、未被设置为排除房间边界的状态。
2. 修改前端加载逻辑
原有代码使用getDefaultGeometry()获取的是默认3D视图,不会包含房间元素,需要主动筛选生成的Master视图加载,修改后的前端代码如下:
function onDocumentLoadSuccess(doc) { // 筛选Master 3D视图 const viewables = doc.getRoot().search({type:'geometry', role: '3d', name: 'Master View'}); if (viewables.length === 0) { console.error('未找到Master视图,请确认模型转换时已开启GenerateMasterViews参数'); return; } viewer.loadDocumentNode(doc, viewables[0]).then(() => { // 加载完成后主动开启房间类别可见性 viewer.search('房间', (ids) => { if(ids.length > 0) { viewer.show(ids); // 可选:调整房间填充透明度和颜色 viewer.setThemingColor(ids, new THREE.Vector4(0.5, 0.8, 0.5, 0.3)); } }, null, ['Category']) }); }
3. 验证效果
重新转换模型并加载后,即可在Viewer中看到房间元素,可通过属性面板直接查看房间的面积、编号等原生Revit属性。
内容的提问来源于stack exchange,提问作者user17356139
相关产品推荐
相关产品推荐

