#autodesk-forge #autodesk-viewer
Вопрос:
Я пытаюсь найти координаты x,y,z объекта внутри модели nwc и использую приведенный ниже код.
Несмотря на то, что этот код работал для файлов rvt, он не работает для модели nwc.
Есть ли способ получить координаты x,y,z из модели nwc?
getFragmentWorldMatrixByNodeId(nodeId) { let result = { fragId: [], matrix: [], }; let viewer = this.viewer; this.tree.enumNodeFragments(nodeId, function (frag) { let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag); let matrix = new THREE.Matrix4(); fragProxy.getWorldMatrix(matrix); result.fragId.push(frag); result.matrix.push(matrix); }); return result; }
Ответ №1:
Вы упомянули,что ищете «координаты x,y, z объекта». Что именно вы имеете в виду под этим? Я собираюсь предположить, что вам нужны координаты центральной точки ограничивающего прямоугольника объекта, так как обычно люди просят именно об этом. Однако в вашем фрагменте кода вы извлекаете всю матрицу преобразования, а не позицию.
Если центральная точка ограничительной рамки подходит вам, вы можете получить ее следующим образом:
function getObjectBoundingBox(model, dbid) { const tree = model.getInstanceTree(); const frags = model.getFragmentList(); let totalBounds = new THREE.Box3(); tree.enumNodeFragments(dbid, function (fragid) { let fragBounds = new THREE.Box3(); frags.getWorldBounds(fragid, fragBounds); totalBounds.union(fragBounds); }, true); return totalBounds; } getObjectBoundingBox(viewer.model, 123).center();
Комментарии:
1. Спасибо, Петр, работает на меня