在场景中获取Viewer 3DObjects

时间:2017-11-21 17:11:06

标签: autodesk-forge autodesk-viewer

我正在尝试从适应threejs-pdf-renderer库的查看器生成pdf。 此PDFRenderer在其render方法中需要Scene和Camera对象。 根据库示例,我应该创建或传递包含子项的场景,但是当我尝试使用我的autodesk-Viewer示例应用程序时,查看器的场景子数组(viewer.impl.sceneviewer.impl.sceneAfter)始终为空,我总是得到一个空白的PDF。

观众的场景中的孩子是否按预期排空?如果是这样,我如何获取所有绘制的元素以将其添加到新场景中,以便我可以将此参数传递给PDfRenderer的渲染方法?

我一直尝试不同的解决方案但没有成功,甚至尝试添加 viewer.model.getConsolidation().meshes数组到一个场景,但我认为这不是正确的方法。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你得到的空场景符合预期,Forge查看器基于three.js,但它没有像three.js那样组织场景和3D网格。在Forge查看器中,它具有dbid和fragid。 dbId表示您可以在模型结构中看到的单个组件的id(父级或子级),或者可以在查看器中以可视方式选择,并且一个dbId可以映射到0或多个fragId。 FragId实际上是保存几何和材料信息的,您可以通过API分别获得几何和材料:

 var renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId)
 var fragmentproxy = viewer.impl.getFragmentProxy(viewer.model, fragId)

有关详情,请查看Get THREE.Mesh elements in Autodesk Forge Viewer的帖子。

所以这意味着,它并不像使用viewer.impl.scene那么简单,你需要迭代所有片段,根据每个片段创建Mesh,并填充几何和材料信息。