改变旋转轴

时间:2017-10-17 09:34:20

标签: autodesk-forge autodesk-viewer

我正在帮助Transform tutorial的示例代码进行轮换和位置更改。我面临着一些问题。

  1. 我想在门窗上进行旋转。目前旋转轴穿过中心。如何更改从通过其侧面的轴旋转对象。

  2. 位置变更>当我改变位置让我们说任何方向的窗户,它移动但它在墙上可见。当窗户与墙壁碰撞时,我希望它隐藏起来。

1 个答案:

答案 0 :(得分:1)

1 /这是一个代码片段,演示了如何旋转元素(片段),有关更完整的示例,请查看本文:Rotate Components Control for the Viewer

rotateFragments (model, fragIdsArray, axis, angle, center) {

  var quaternion = new THREE.Quaternion()

  quaternion.setFromAxisAngle(axis, angle)

  fragIdsArray.forEach((fragId, idx) => {

    var fragProxy = this.viewer.impl.getFragmentProxy(
      model, fragId)

    fragProxy.getAnimTransform()

    var position = new THREE.Vector3(
      fragProxy.position.x - center.x,
      fragProxy.position.y - center.y,
      fragProxy.position.z - center.z)

    position.applyQuaternion(quaternion)

    position.add(center)

    fragProxy.position = position

    fragProxy.quaternion.multiplyQuaternions(
      quaternion, fragProxy.quaternion)

    if (idx === 0) {

      var euler = new THREE.Euler()

      euler.setFromQuaternion(
        fragProxy.quaternion, 0)

      this.emit('rotate', {
        dbIds: this.selection.dbIdArray,
        fragIds: fragIdsArray,
        rotation: euler,
        model
      })
    }

    fragProxy.updateAnimTransform()
  })
}

2 /当您转换几何体时,您只是移动三角形,没有内置逻辑会隐藏组件,因为它们重叠,您需要自己实现。您应该能够找到Three.js代码,该代码计算两个网格是否相交(三角形 - 三角形交叉算法)并针对您正在移动的组件以及周围的所有墙运行。以下内容可以让您走上正轨:How to detect collision in three.js?

希望有所帮助