ADN Club > Forge: Data Management API
BIM360 Issue pushpin - в каких координатах?
Александр Пекшев aka Modis:
--- Цитата: Александр Игнатович от 27-09-2021, 15:21:25 ---Где ты ищешь элемент? В Navisworks или Forge Viewer?
--- Конец цитаты ---
В Navisworks
--- Цитата: Александр Игнатович от 27-09-2021, 15:21:25 ---можно получить обратную viewer-to-model
--- Конец цитаты ---
Как? Я не понимаю
В модели вот примерно такие координаты (центры BB):
--- Цитировать ---Element 802034 bb center: (9952,5384326613802841, 70816,2968044955487130, 522,9658793952521592)
Element 802423 bb center: (10204,6086616059928929, 70569,3836395785911009, 523,2939633847535106)
Element 1340572 bb center: (9834,1697264512931724, 70497,0170252555108164, 520,3412074942601748)
--- Конец цитаты ---
Булавки вот с такими координатами:
--- Цитировать ---Issue 495 pushpin: -168,621583508413, -100,020605428304, 7,31800306525327
Issue 494 pushpin: 201,793944775753, -27,6070030396659, 9,06755644286818
Issue 493 pushpin: -50,2509445499618, 220,224071918055, 15,971968234686
--- Конец цитаты ---
Видно, что координаты не особо коррелируют, что указывает на правдивость высказывания
--- Цитировать ---pushpin имеет координаты в системе координат Viewer-а (логично, вроде)
--- Конец цитаты ---
Но что и как преобразовывать - я не понимаю
Александр Игнатович:
Набросал чуток кода:
--- Код - Javascript [Выбрать] ---function getLeafFragIds (model, leafId) { const instanceTree = model.getInstanceTree(); const fragIds = []; instanceTree.enumNodeFragments(leafId, (fragId) => {fragIds.push(fragId)}); return fragIds;} function getBoundingBox(fragIds, fragList) { const fragbBox = new THREE.Box3(); const nodebBox = new THREE.Box3(); fragIds.forEach(function(fragId) { fragList.getWorldBounds(fragId, fragbBox); nodebBox.union(fragbBox); }); return nodebBox;} const box = getBoundingBox(getLeafFragIds(NOP_VIEWER.model, NOP_VIEWER.getSelection()[0]), NOP_VIEWER.model.getFragmentList()) const offset = NOP_VIEWER.model.getGlobalOffset();console.log(new THREE.Vector3().copy(box.min).add(offset))console.log(new THREE.Vector3().copy(box.max).add(offset))
Revit:
Forge:
Александр Пекшев aka Modis:
А как код для форджа поможет мне решить проблему в нэвисе? При том, что с форждом я вообще не работаю
Александр Игнатович:
--- Цитата: Александр Пекшев aka Modis от 27-09-2021, 18:01:40 ---При том, что с форждом я вообще не работаю
--- Конец цитаты ---
Ну сорри, не понял, что Forge viewer не при делах.
Смотри, global offset - это центр bounding box-а всей модели, вот ссылка на дискуссию, где это обсуждается: https://stackoverflow.com/questions/42148538/aligning-coordinate-systems-in-autodesk-forge-viewer
--- Цитировать ---What is this offset? the difference between (0,0,0) and where the model was placed originally?
--- Конец цитаты ---
--- Цитировать ---Correct. The viewer will load the model by placing the center of its bounding box at the origin, so depending on the original file, this may add an offset which is returned by the property discussed above.
--- Конец цитаты ---
Philippe доверять можно :-)
А дальше по аналогии переходить от координат во вьювере к модельными координатам
Александр Пекшев aka Modis:
Ну нет в нэвисе Viewer'а! И нет там свойства GlobalOffset...
Навигация
Перейти к полной версии