Autodesk forge 改变旋转轴

Autodesk forge 改变旋转轴,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我正在采取的旋转和位置变化的样本代码的帮助。我面临两个问题 我想在门和窗上执行旋转。当前旋转轴通过中心。如何更改以从穿过其侧面的轴旋转对象 对于位置更改>,当我更改位置时,比如说,对于任何方向的窗口,它都会移动,但在墙上是可见的。我想在窗户和墙相撞时把它藏起来 1/下面是一段代码片段,演示了如何旋转元素(片段),有关更完整的示例,请参阅本文: 2/当您变换几何体时,您只是在移动三角形,没有内置逻辑会隐藏组件,因为它们重叠,您需要自己实现。您应该能够找到计算两个网格是否相交(三角形相交算法)的Th

我正在采取的旋转和位置变化的样本代码的帮助。我面临两个问题

  • 我想在门和窗上执行旋转。当前旋转轴通过中心。如何更改以从穿过其侧面的轴旋转对象

  • 对于位置更改>,当我更改位置时,比如说,对于任何方向的窗口,它都会移动,但在墙上是可见的。我想在窗户和墙相撞时把它藏起来


  • 1/下面是一段代码片段,演示了如何旋转元素(片段),有关更完整的示例,请参阅本文:

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

    希望有帮助

    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()
      })
    }