簡體   English   中英

在Autodesk Forge中圍繞模型旋轉相機

[英]Rotate camera around model in Autodesk Forge

我創建了一個擴展程序,該擴展程序可以使相機圍繞Revit模型旋轉,該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);
};

我認為您在這里需要使用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()
  };

根據您的代碼段和現場插圖,查看我的擴展庫回購以獲取完整代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM