Проблема с созданием наложения датчика на основе идентификаторов 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;

Дайте мне знать, если это поможет. Ура Майкл

Другие вопросы по тегам