Autodesk Viewer RenderProxy vb 获取 NaN

Posted

技术标签:

【中文标题】Autodesk Viewer RenderProxy vb 获取 NaN【英文标题】:Autodesk Viewer RenderProxy vb getting NaN 【发布时间】:2021-03-01 14:52:44 【问题描述】:

我正在尝试从 RenderProxy.Geometry 中的 vb 数组中获取几何信息。但是,数组中的某些元素返回 NaN。我应该如何处理? 该模型是从 Revit .rvt 文件转换而来的,我尝试获取几何图形的网格是 Revit 中的曲面。 下面是我说的 vb 数组的截图。 非常感谢你们的帮助

【问题讨论】:

【参考方案1】:

“渲染代理”网格中的几何数据可在mesh.geometry 下获得。要解析它,您需要了解更多关于 THREE.BufferGeometry 类的信息,但简而言之,三角形的位置可以这样解析:

function enumerateTriangles(model, dbid) 
    const tree = model.getInstanceTree();
    const frags = model.getFragmentList();
    tree.enumNodeFragments(dbid, function (fragid) 
        const mesh = frags.getVizmesh(fragid); // Obtain the THREE.Mesh object
        const indexBuffer = mesh.geometry.ib; // Typically Uint16Array in Forge
        const vertexBuffer = mesh.geometry.vb; // Typically Float32Array in Forge
        const positionItemOffset = mesh.geometry.attributes['position'].itemOffset; // The vertex buffer may contain other data in vertex buffer, not just positions
        for (let i = 0; i < indexBuffer.length; i += 3) 
            const i1 = indexBuffer[i];
            const i2 = indexBuffer[i + 1];
            const i3 = indexBuffer[i + 2];
            const p1 = new THREE.Vector3(vertexBuffer[i1 + positionItemOffset], vertexBuffer[i1 + positionItemOffset + 1], vertexBuffer[i1 + positionItemOffset + 2]);
            const p2 = new THREE.Vector3(vertexBuffer[i2 + positionItemOffset], vertexBuffer[i2 + positionItemOffset + 1], vertexBuffer[i2 + positionItemOffset + 2]);
            const p3 = new THREE.Vector3(vertexBuffer[i3 + positionItemOffset], vertexBuffer[i3 + positionItemOffset + 1], vertexBuffer[i3 + positionItemOffset + 2]);
            console.log('Triangle has vertices', p1, p2, p3);
        
    , true);

【讨论】:

以上是关于Autodesk Viewer RenderProxy vb 获取 NaN的主要内容,如果未能解决你的问题,请参考以下文章

在 Autodesk Forge Viewer 中显示尺寸

默认情况下如何使 Autodesk Viewer 正交

Autodesk Forge Viewer 适合查看纵向/横向

如何在 Forge Viewer 中激活“Autodesk.MemoryLimited”扩展?

Autodesk Forge 查看器 - 从“viewer.model.search”和“viewer.getSelection()”获取不同的值 dbId

Autodesk Forge Viewer getScreenshot 方法