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

Как я могу добавить событие нажатия на кнопки в autodesk forge? В существующем расширении он открывает содержимое для кнопки, используя фокусировку камеры. Я хочу открыть его, нажав на кнопку.

Но я добавляю pushpini к модели вручную и переводю координаты с помощью следующего кода

var setData = function (event) {      
      var screenPoint = {
        x: event.clientX,
        y: event.clientY
      };
      if (screenPoint) {
        var n = normalize(screenPoint);
        var dbId = /*_viewer.utilities.getHitPoint*/ getHitDbId(n.x, n.y);
        if (dbId == null) return;
      }
    }

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

      var vpVec = new THREE.Vector3(x, y, 1);
      var result = viewer.impl.hitTestViewport(vpVec, false);
      console.log(result);

      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
      }
      return result ? result.dbId : null;
    };

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

Возможно ли это?

1 Ответ

0 голосов
/ 13 апреля 2020

Об этом уже позаботились в исходном плагине - просто добавьте свой собственный обработчик в обратные вызовы кликов ниже, где выполняется проверка попадания в разметке:

    this.onMouseMove = function(event) {
      if(this.line3d){
        this.update_DivLabel('onMarkupMove');
        this.updateHitTest(event);
      }
    }

    this.onClick = function(event) {
        this.updateHitTest(event);
        if (!this.hovered) return;
        this.selected = this.hovered; //
        //your own callback goes here
    }

И отрегулируйте здесь для точной настройки попадания Точность теста:

function markup3d(viewer, options) {
    this.raycaster.params.PointCloud.threshold = 5; // hit-test markup size.  Change this if markup 'hover' doesn't work
    this.size = 150.0; // markup size.  Change this if markup size is too big or small

Оригинальный живой образец также обрабатывает щелчок, отображая метку зависания:

...