是否可以通过从外部网页接收特定 ID 来实现 Forge Viewer 中的突出显示功能?

Posted

技术标签:

【中文标题】是否可以通过从外部网页接收特定 ID 来实现 Forge Viewer 中的突出显示功能?【英文标题】:Is it possible to implement the highlight function in Forge Viewer by receiving a specific ID from an external web page? 【发布时间】:2021-08-07 07:50:12 【问题描述】:

正在使用 Forge Viewer 查看 IFC 格式项目。 IFC 项目元素(顶板、楼板、右墙等)列在外部网页上,我想实现一个功能,在选择其中一个时在 Forge Viewer 中突出显示。

我应该使用“GLOBALID”来实现该功能吗? 我一直在寻找 Forge Viewer 的 API(v7),但我很好奇它是否提供与上述相同的功能。

【问题讨论】:

【参考方案1】:

是的,这是可能的。这是一个演示这个想法的示例:

https://github.com/yiskang/forge-viewer-iframe-interoperability

此示例支持两种定位对象的方法:

    通过将查询字符串传递给查看器页面的 URL(参见 public/extlink.html):

    urn:代表 Forge Viewer 加载哪个模型。 idType:代表IFC guid类型。如果 IFC 模型由旧 IFC 管道转换,则 idTypeGLOBALID。相反,如果您使用的是现代管道,则 idTypeIfcGuidguid:表示您要定位的对象的 IFC guid。

    使用这些参数,您可以在模型完全加载后立即通过将对象传递到 URL 来定位对象,如下所示:

http://localhost:3000/viewer/?urn=dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6ZXh0cmFjdC1hdXRvZGVzay1pby0yMDE3bGt3ZWo3eHBiZ3A2M3g0aGwzMzV5Nm0yNm9ha2dnb2YvcmFjX2Jhc2ljX3NhbXBsZV9wcm9qZWN0X2xlZ2FjeS5pZmM&type=GLOBALID&guid=2cgXCjpDT0ZxBvxMSr3pfm
    通过触发LOCATE_ELEMENT_EVENT(见public/index.html):
// Trigger event from iframe's parent page
const guid = event.target.getAttribute('data-guid');
const idType = event.target.getAttribute('data-idType');

if (!idType || !guid) return;

const iframeWind = viewerIframe.contentWindow;
iframeWind.NOP_VIEWER.fireEvent(
    type: iframeWind.Autodesk.ADN.ElementLocator.Event.LOCATE_ELEMENT_EVENT,
    idType,
    guid
);

【讨论】:

以上是关于是否可以通过从外部网页接收特定 ID 来实现 Forge Viewer 中的突出显示功能?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从接收器应用程序获取有关 Chromecast 设备的信息

测试是不是在任何外部表条目中使用特定 id 作为外键

我如何使用Sidekiq运行连续的后台作业?

是否有任何 linux 函数调用通过传递线程 ID 来获取特定线程的 CPU 使用率?

是否可以从 GDB 的外部文件中将命令注册到断点?

详谈外部浏览器如何实现复制公众号一键唤起微信添加关注