Есть ли способ получить информацию о положении элемента из проекта Revit, просматриваемого в Forge Viewer? Мы будем перемещать элементы в Forge Viewer (в основном семейные экземпляры), и мне нужно выяснить новое положение элементов после их перемещения. Он должен совпадать с данными LocationPoint Revit API.
Когда файл проекта (Revit или любой другой поддерживаемый формат файла) обрабатывается службой производной модели и преобразуется в формат средства просмотра (SVF или SVF2), каждый элемент превращается в «фрагмент» с собственной матрицей преобразования. Вы можете прочитать (и даже изменить) информацию о фрагменте с помощью Viewer API:
const frags = viewer.model.getFragmentList();
function listFragmentProperties(fragId) {
console.info('Fragment ID:', fragId);
const objectIds = frags.getDbIds(fragId); // Get IDs of all objects linked to this fragment
console.info('Linked object IDs:', objectIds);
let matrix = new THREE.Matrix4();
frags.getWorldMatrix(fragId, matrix); // Get the fragment's world matrix
console.info('World matrix:', matrix);
let bbox = new THREE.Box3();
frags.getWorldBounds(fragId, bbox); // Get the fragment's world bounds
console.info('World bounds:', bbox);
}
И чтобы изменить преобразование фрагмента, попробуйте следующее:
const frags = viewer.model.getFragmentList();
function modifyFragmentTransform(fragId) {
let scale = new THREE.Vector3();
let rotation = new THREE.Quaternion();
let translation = new THREE.Vector3();
frags.getAnimTransform(fragId, scale, rotation, translation);
translation.z += 10.0;
scale.x = scale.y = scale.z = 1.0;
frags.updateAnimTransform(fragId, scale, rotation, translation);
}