Проблема с созданием наложения датчика на основе идентификаторов dbID
Я пытаюсь создать что-то похожее на демонстрацию IoT от autodesk ( https://forge-rcdb.autodesk.io/configurator?id=58adee163e6f342cf1e92dae) Однако вместо того, чтобы знать координаты каждого датчика, я пытаюсь использовать dbId активов для определения позиция. Несмотря на то, что с использованием разных примеров я не могу правильно выровнять оверлей. Дело не похоже на сделанный мной выбор. Красная точка - это оверлей, и актив, из которого я получил позицию, выбран.
public createPoint() {
const viewer = this.viewer;
viewer.model.getData().instanceTree.enumNodeFragments(4295, (frag) => {
const renderProxy = viewer.impl.getRenderProxy(viewer.model, frag);
const position = new THREE.Vector3();
position.setFromMatrixPosition( renderProxy.matrixWorld );
const worldToClient = viewer.worldToClient(position);
const element = <HTMLElement>document.getElementsByClassName('bimSensorNode-1')[0];
element.style.top = worldToClient.y + 'px';
element.style.left = worldToClient.x + 'px';
});
}
1 ответ
Вы можете следить за этим сообщением в блоге о том, как добавить "3d-markup-icons-and-info-card":
https://forge.autodesk.com/blog/3d-markup-icons-and-info-card
он имеет исходный код на GitHub и вспомогательный метод для дешевой идентификации точных точек x,y,z:
https://github.com/wallabyway/markupExt/issues/2
Скажем, вы хотите получить точки x,y,z на краю таблицы. Используя вашу мышь, нажмите ALT на краю стола... это установит зеленую точку вращения. Теперь используйте этот код для получения точек x,y,z...
NOP_VIEWER.getCamera().pivot;
Дайте мне знать, если это поможет. Ура Майкл