#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);
}