Поворот камеры вокруг модели в Autodesk Forge - PullRequest
0 голосов
/ 14 ноября 2018

Я создал расширение, которое вращает камеру вокруг модели Revit, которая была загружена в изготовленном ведре, но как сделать так, чтобы камера постоянно вращалась вокруг модели после нажатия кнопки на панели инструментов. Кроме того, как мне снова нажать эту же кнопку, чтобы остановить вращение? Приведенный ниже код используется для поворота камеры после нажатия кнопки.

var _this = this;
var _viewer = _this.viewer;
var turnTableToolbarButton = new Autodesk.Viewing.UI.Button('turnTableButton');
turnTableToolbarButton.onClick = function (e) { 

    const nav = _viewer.navigation;
    const up = nav.getCameraUpVector();
    var pos = nav.getPosition();
    const axis = new THREE.Vector3(0, 0, 1);
    const speed = 10.0 * Math.PI / 180;

    const matrix = new THREE.Matrix4().makeRotationAxis(axis, speed * 0.1);

    pos.applyMatrix4(matrix);
    up.applyMatrix4(matrix);

    nav.setView(pos, new THREE.Vector3(0, 0, 0));
    nav.setCameraUpVector(up);
    var viewState = _viewer.getState();
    _viewer.restoreState(viewState);
};

1 Ответ

0 голосов
/ 14 ноября 2018

Я думаю, что вам здесь понадобится использование requestAnimation с остановкой вашей кнопки или запуском запроса на новый кадр:

  let started = false;

  let rotateCamera = () => {
      if (started) {
          requestAnimationFrame(rotateCamera);
      }

      const nav = viewer.navigation;
      const up = nav.getCameraUpVector();
      const axis = new THREE.Vector3(0, 0, 1);
      const speed = 10.0 * Math.PI / 180;
      const matrix = new THREE.Matrix4().makeRotationAxis(axis, speed * 0.1);

      let pos = nav.getPosition();
      pos.applyMatrix4(matrix);
      up.applyMatrix4(matrix);
      nav.setView(pos, new THREE.Vector3(0, 0, 0));
      nav.setCameraUpVector(up);
      var viewState = viewer.getState();
      // viewer.restoreState(viewState);

  };

  turnTableToolbarButton.onClick = function (e) {
      started = !started;
      if (started) rotateCamera()
  };

Проверьте мой репо расширений для полного кода на основе вашего фрагмента и живой иллюстрации.

...