0
A
回答
1
此代碼顯示如何,如果你要旋轉的完整模型旋轉一組fragIds圍繞特定的軸和中心,你需要旋轉的所有片段:
// Rotate selected fragments
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)
fragProxy.updateAnimTransform()
})
}
// get leaf node fragIds
static getLeafFragIds (model, leafId) {
const instanceTree = model.getData().instanceTree
const fragIds = []
instanceTree.enumNodeFragments(
leafId, (fragId) => {
fragIds.push(fragId)
})
return fragIds
}
0
所以我嘗試了一些接近你要做的事情,但也許你需要做一些研究在你身邊來檢查場景是否可以在點擊模型按鈕時得到更新在場景中,我認爲調用viewer.impl.sceneUpdated(true)
可以做到這一點,但我不確定,也請記住這個函數似乎沒有公開,所以沒有很好的文檔。
所以讓我解釋一下我以前試過的。我建立了一個樣本,你有一個二維地塊模型,在選擇多個多義線或艙口之一後,你可以添加代表房子的第二個模型。樣品在左下角有3個按鈕,並且有一個輸入框允許您輸入一個0-360度的數值,以便以您想要的旋轉加載第二個模型。
這裏是回購的鏈接,其中還包含演示的鏈接。 https://github.com/jaimerosales/viewer-dwgoffset
這是一個函數,可能會給你一個想法,我會嘗試加載模型,然後應用之前提到的場景更新之後的轉換。
applyTransform (model) {
var viewer = this._viewer
// This is use for Transformation on 3D models, for 2D only pass rotation
// value on Z axis
var euler = new THREE.Euler(
model.transform.rotation.x * Math.PI/180,
model.transform.rotation.y * Math.PI/180,
model.transform.rotation.z * Math.PI/180,
'XYZ')
var quaternion = new THREE.Quaternion()
quaternion.setFromEuler(euler)
function _transformFragProxy (fragId) {
var fragProxy = viewer.impl.getFragmentProxy(
model,
fragId)
fragProxy.getAnimTransform()
fragProxy.position = model.transform.translation
fragProxy.scale = model.transform.scale
//Not a standard three.js quaternion
fragProxy.quaternion._x = quaternion.x
fragProxy.quaternion._y = quaternion.y
fragProxy.quaternion._z = quaternion.z
fragProxy.quaternion._w = quaternion.w
fragProxy.updateAnimTransform()
}
var fragCount = model.getFragmentList().
fragments.fragId2dbId.length
//fragIds range from 0 to fragCount-1
for (var fragId = 0; fragId < fragCount; ++fragId) {
_transformFragProxy(fragId)
}
}
希望這有助於你開始。 乾杯,
相關問題
- 1. 在touchesMoved中查看旋轉
- 2. 在Forge查看器中查看Revit平面圖(2D視圖)
- 3. ObjC - 自動查看旋轉
- 4. 查看當前旋轉
- 5. 旋轉UI查看IB
- 6. 旋轉圖像查看時間可持續在機器人
- 7. Xcode Autolayout - 查看旋轉時未選中
- 8. 查看變換旋轉抵消iOS中
- 9. 如何在Windows手機中旋轉相機查看器?
- 10. Maya MFnRotateManip查看旋轉手柄
- 11. 隨機旋轉圖像查看
- 12. UIActivityIndicatorView的旋轉率查看
- 13. Swift:Collection查看旋轉後更改佈局
- 14. iPad Modal View旋轉parentViewController查看
- 15. 的iOS - 查看旋轉和調整
- 16. 旋轉圖像查看隨機
- 17. 棋盤GUI 2D查看
- 18. 查看轉換
- 19. 查看轉換
- 20. angular.js中的照片旋轉木馬查看器
- 21. SQL服務器 - 檢查,看看是否轉換是可能的
- 22. 自動旋轉:查看高度恢復到原來的旋轉
- 23. 在WPF中查看和查看模型
- 24. 旋轉立方體在OpenGL中從Python中'查看'鼠標
- 25. 在瀏覽器中查看
- 26. 查看查看HMVC代碼點火器
- 27. 在MVC的PDF查看器在查看中顯示pdf內容
- 28. SSI - 可以在Dreamweaver中查看,但不能在其他服務器上查看
- 29. NineOldAndroids,旋轉或移動後不可點擊查看
- 30. flashlog查看器