首页 > 解决方案 > Forge 查看器:如何隔离自定义对象?

问题描述

我们使用自定义对象来可视化 ifc 空间数据(主要是房间)。作为指导,我们使用了这个非常有用的博客。绘制对象后,我们还想从外部选择自定义对象并将它们隔离在查看器中。正如教程建议的那样,我们更改模型构建器的changeFragmentsDbId函数以设置尚不存在的 DbId,因此不会与现有的 DbId 重叠。一种方法是为我们的自定义对象 DbId 使用负空间 [-1, -2, -3...],如下所示:

const roomFragId = this.modelBuilder.addFragment(roomGeometryId, materialName, transform);
this.modelBuilder.changeFragmentsDbId(roomFragId, -roomFragId);

另一种方法是找到最大 DbId(例如 4905)并为我们的自定义对象 DbId(例如 [4906, 4907, 4908...])使用高于此最大 DbId 的数字:

const roomFragId = this.modelBuilder.addFragment(roomGeometryId, materialName, transform);
this.modelBuilder.changeFragmentsDbId(roomFragId, maxDbId + roomFragId);

但是,当我们尝试隔离自定义绘制的对象(viewer.isolate(-1)viewer.isolate(4906))时,查看器会自行刷新,但没有对象被隔离...因此,我们想知道如何隔离自定义对象?

另一种方式,当我们在查看器中选择对象时,适用于负空间方法 => 我们在聚合选择事件中获得 DbId(例如 -1)。

感谢您提供任何帮助!

标签: autodesk-forgeautodesk-viewer

解决方案


要隔离或选择由SceneBuilderext 创建的自定义对象,您需要将model对象传递给Viewer3D#isolate/Viewer3D#select如下所示。否则,viewer将使用viewer.model代替。

viewer.isolate( [4906, 4907, 4908...], this.modelBuilder.model )

viewer.select( [4906, 4907, 4908...], this.modelBuilder.model )

推荐阅读