在 Forge 查看器中加载的某些模型不返回任何视口

问题描述 投票:0回答:2

我有一个 forge 查看器,从 BIM360 中的 Revit 项目加载具有多个可视项的文档。我可以看到所有可视内容都渲染得很好。我正在使用 Autodesk.AEC.ViewportsExtension 在查看器上的特定位置显示某些元素,例如标签。我通过关注 Petr 的博客文章成功地显示标签,但某些查看器模型无法返回任何视口。

    viewportExt = viewer.getExtension("Autodesk.AEC.ViewportsExtension");
    viewport = viewportExt.getViewports(viewer.model)[0]; // this returns null
    viewportXform = viewport.get3DTo2DMatrix(viewer.model.getUnitScale());

这适用于某些可视项,但有些不返回我需要的任何视口,以在 3D 和 2D 空间之间进行转换。我可以看到两种情况下都加载了 AEC 元数据。我不知道为什么只有某些视图无法返回视口。


我刚刚在 BIM360 中使用我自己的模型尝试了 Petr 的 sample。我的 Revit 项目中的可视项未返回任何视口。我怀疑这与 BIM 360 发布过程中发生的事情有关。

如有任何建议,我们将不胜感激。

autodesk-forge
2个回答
1
投票

根据我们的 BIM360 用户手册此处,需要启用裁剪视图复选框

  • 新发布的数据。它不适用于以前发布的模型。
  • 带有平面图、结构平面图或反射天花板平面图的二维图纸。目前不支持其他带有标注或区域平面图的工作表。
  • Revit 中启用了裁剪视图复选框的图纸。
  • 没有视图中断的视图。目前不支持包含视图中断或视图分割的视图。
  • 视图没有关联的规划区域。我们可以使用 Revit API 使用以下代码片段来检查这一点
var planRegion = new FilteredElementCollector(document).OfCategory(BuiltInCategory.OST_PlanRegion).ToList();

planRegion.Any(r => r.OwnerViewId.Value() == planView.Id.Value());

//Before 2024
//planRegion.Any(r => r.OwnerViewId.IntegerValue == planView.Id.IntegerValue);

0
投票

在这两种情况下,我都可以获得从 BIM 360 中的 Revit 项目发布的所有视口的列表,包括视口的指南。但是,即使使用 findViewportByGuid(),我仍然无法获得与视口扩展一起使用的视口对象。

在对 Forge 查看器中加载的模型数据进行一些研究和挖掘后,我注意到那些我无法从中获取视口对象的已发布视图没有 GeometryViewportRegion 属性,并且 isCropBoxActive 值设置为 false。

我猜这就是为什么 getViewports() 对这些视图返回 null 的原因。从我可以从 AEC 扩展源代码中读到的内容来看, get3Dto2DMatrix(vp,sheetUnitScale) 也需要视口边界,所以我想如果没有为 Revit 视图显式定义视口边界,我就无法从 3D 坐标转换为 2D 坐标。

我可以通过选中这些视图的 Revit 视图属性中的“裁剪视图”复选框来解决该问题,尽管我希望不选中它,这样我就可以在没有任何视图边界的情况下发布所有可见的视图。

© www.soinside.com 2019 - 2024. All rights reserved.