Как я могу получить правильные координаты на модели в программе просмотра Forge - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу реализовать расширение кнопки для Autodesk Forge с облаком точек, но с пользовательскими координатами. Я хочу получить пользовательские координаты для события клика модели. Я не могу нормализовать точки так, чтобы они появлялись там, где я нажал.

Pushpins appeared like this

Я пытаюсь нормализовать точки с помощью этого кода, но он не работает.

viewer.canvas.addEventListener( 'click', (event) => {
      var screenPoint = {
          x: event.clientX,
          y: event.clientY
      };
      var n = normalize(screenPoint);
      var dbId = /*_viewer.utilities.getHitPoint*/ getHitDbId(n.x, n.y);
      if (dbId == null) return;
  })

  function getHitDbId(x, y) {
      x = x * 2.0 - 1.0;
      y = y * 2.0 - 1.0;

      var vpVec = new THREE.Vector3(x, y, 0.5);

      var result = viewer.impl.hitTestViewport(vpVec, false);
      result.distance = 1;

      if(result){
          dummyData.push({
              icon: Math.round(Math.random()*3),
              x: result.point.x,
              y: result.point.y,
              z: result.point.z,
          });
          window.dispatchEvent(new CustomEvent('newData', {
            'detail': dummyData
        }))
      } else {
          return
      }
  };

  function normalize(screenPoint) {
      var viewport = viewer.navigation.getScreenViewport();
      var n = {
          x: (screenPoint.x - viewport.left) / viewport.width,
          y: (screenPoint.y - viewport.top) / viewport.height
      };
      console.log(n);

      return n;
  }

Отредактированный ответ. Теперь у меня возникла другая проблема после нормализации смещения. Некоторые кнопки отображаются неправильно. Вы можете увидеть проблему на картинке.

incorrect pushpin

Как я могу это исправить?

1 Ответ

1 голос
/ 06 апреля 2020

Пример кода для поиска соответствующих мировых координат можно найти в коде Forge Digital Twin: https://github.com/petrbroz/forge-digital-twin/blob/master/public/scripts/extensions/issues.js.

Демонстрационная версия: http://forge-digital-twin.autodesk.io/ (попробуйте значок флага на панели инструментов).

...