3

通常,基于Forge Viewer 开发的的朋友需要获取到模型的层次结构以及构件的DbId,用于在自己的流程中构造相关对象和处理。尤其DbId,大部分Forge Viewer对象的操作,参数是输入的DbId,而用来唯一确定构件的信息是一些其它的Id,例如ExternalId。所以,有时要做ID的映射,方便前端流程中,可以更快速的找到对应的构件。

一些朋友喜欢在Forge Viewer加载模型( 譬如在这个事件中Autodesk.Viewing.GEOMETRY_LOADED_EVENT)来遍历Viewer.InstanceTree (instanceTree.enumNodeChildren)获取DbId。对于简单模型,这个方法可用,而对于复杂模型,将造成较长时间才能完成遍历过程,影响流程的其它工作。

另外一篇文章中,介绍了如何通过Viewer.InstanceTree 直接拿到DbId的数组,而在本文中,我们看看如何在模型转换后,无需前端加载模型就能得到模型的层次结构以及构件的DbId。

大家知道,模型要能在Forge Viewer中显示,首先要通过Forge的【【模型数据提取和格式转换服务】来转换 ,英文叫做Model Derivative API。 通常,大家已经很熟悉这两个服务:

发起转换的服务:POST https://developer.api.autodes...
查询转换状态GET https://developer.api.autodes...

而实际上,在转换程SVF数据包以后,该服务还有另外几个API,用于获取模型层次结构以及对象的属性。只需要:

  1. 发起服务获取metadata GET https://developer.api.autodes...
    此服务用来得到文件中所有model (3D,2D)的view id。这是一个guid。例如本例中,只有一个3D内容:

图片描述

  1. 发起服务请求得到模型层次结构
    GET https://developer.api.autodes...

此服务输入#1中得到的guid,请求得到对应内容的模型层次结构。注意:请求后,首先返回的是202,表明Forge接受了任务,即将开始操作。所以这里需要澄清一个误解,转换后的SVF数据包含有模型层次结构,对象属性等,但考虑到数据量较大,默认并没有现成的Json形式的模型层次对象,属性的数据放在Forge云端。只有当开发者请求的时候,Forge才会从云端转换后的数据库提取出来,因此需要点时间操作完成。
等待片刻,继续发起请求,将返回200成功,这时就可以拿到Json形式的层次结构了,而这个信息就包括了DbId

图片描述

如果是获取对象属性,只需要用这个过程也是类似的,只是请求端口是:
GET https://developer.api.autodes...

这也是为何把Model Derivative API叫做 【模型数据提取和格式转换服务】。


梁晓冬
527 声望301 粉丝

现就职于Autodesk软件中国有限公司,主要负责Autodesk产品API和APS云服务的推广和传播工作。