Autodesk Viewer RenderProxy vb получает NaN

#javascript #autodesk-forge #autodesk-viewer

#javascript #autodesk-forge #autodesk-viewer

Вопрос:

Я пытаюсь получить информацию о геометрии из массива vb в RenderProxy.Геометрия. Однако некоторые элементы в массиве возвращают 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);
}