2017-07-10 68 views
0

我期望能夠通過單擊按鈕旋轉2D查看。在查看器中旋轉2D可查看

我已經看到它可以用鼠標使用滾動工具,但我希望能夠一次旋轉90度的可視角度。

對此的任何幫助將是偉大的。乾杯

回答

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

希望這有助於你開始。 乾杯,