在场景中获取查看器 3D 对象

Getting Viewer 3DObjects in Scene

我正在尝试从改编 threejs-pdf-renderer 库的查看器生成 pdf。 此 PDFRenderer 在其渲染方法中需要一个场景和一个相机 object。 根据库示例,我应该创建或传递一个包含 children 的场景,但是当我尝试使用我的 autodesk-Viewer 示例应用程序时,观众的场景 children 数组(viewer.impl.sceneviewer.impl.sceneAfter) 总是空的,我总是得到一个空白的 PDF。

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

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

提前致谢。

您得到的空场景符合预期,Forge 查看器基于 three.js,但它没有像 three.js 中那样组织场景和 3D 网格。在 Forge 查看器中,它有 dbid 和 fragid。一个 dbId 表示在模型结构(父或子)中可以看到或在查看器中可以看到 select 的单个组件的 id,一个 dbId 可以映射到 0 个或多个 fragId。 FragId其实就是保存geometry和material信息的,你可以通过API分别获取geometry和material,如下:

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

有关更多信息,您可以查看 的 post。

也就是说,不是直接用viewer.impl.scene那么简单,需要遍历所有的fragment,根据每个fragment创建Mesh,填充geometry和material信息。