簡體   English   中英

變形后偽造查看器模型位置

[英]Forge viewer model position after transformation

我已經使用模型轉換擴展將模型從一個點移動到另一個點。 現在如何獲取轉換模型或其邊界框的新位置/坐標/位置,因為當我查詢邊界框最小和最大點時,它們始終相同。 有任何想法嗎?? 我的目標是在翻譯后根據原點得到模型的新位置。

我隔離了該擴展的核心部分,並檢查了轉換前后的位置和邊界框。 簡單來說,只翻譯。 看起來這些值在轉換后更新。 你能檢查一下它是否有助於診斷你的問題嗎?

要對其進行測試,請選擇一個對象並運行該函數。

getModifiedWorldBoundingBox (fragIds, fragList) {

   const fragbBox = new THREE.Box3()
   const nodebBox = new THREE.Box3()

  fragIds.forEach(function(fragId) {

     fragList.getWorldBounds(fragId, fragbBox)

     nodebBox.union(fragbBox)
  })

  return nodebBox
}

 $('#test').click(function(rt){

        var dbids = NOP_VIEWER.getSelection();
        var it = NOP_VIEWER.model.getData().instanceTree;
        var fragList = NOP_VIEWER.model.getFragmentList();  

        fragIds = [];

        it.enumNodeFragments(dbids[0], function(fragId) {
            fragIds.push(fragId); 
        }, false);

        var bb = getModifiedWorldBoundingBox(fragIds,fragList);
        console.log('boundingbox before transform: [max,min]: ' + 
        bb.max.x + ' ' + bb.max.y + ' ' + bb.max.z + '\n'+ 
        bb.min.x + ' ' + bb.min.y + ' ' + bb.min.z ); 

        fragIds.forEach(function(fragId){ 

            var fragProxy = NOP_VIEWER.impl.getFragmentProxy(
            NOP_VIEWER.model,
            fragId)

            fragProxy.getAnimTransform()

            console.log('frag position in LCS before transform:' + 
                            fragProxy.position.x + ','+
                            fragProxy.position.y + ','+ 
                            fragProxy.position.z);

            var wcsMatrix = new THREE.Matrix4(); 
            fragProxy.getWorldMatrix(wcsMatrix);
            var wcsPos = wcsMatrix.getPosition();
            console.log('frag position in wcs matrix  before transform: ' + 
            wcsPos.x + ' ' + wcsPos.y + ' ' + wcsPos.z);


            fragProxy.position.x += 10; 
            fragProxy.position.y += 10; 
            fragProxy.position.z += 10;   

            fragProxy.updateAnimTransform()  
        }); 
        NOP_VIEWER.impl.sceneUpdated(true) 


        fragIds.forEach(function(fragId){ 

            var fragProxy = NOP_VIEWER.impl.getFragmentProxy(
            NOP_VIEWER.model,
            fragId)

            fragProxy.getAnimTransform()

            console.log('frag position in LCS after transform:' + 
                            fragProxy.position.x + ','+
                            fragProxy.position.y + ','+ 
                            fragProxy.position.z); 

            var wcsMatrix = new THREE.Matrix4(); 
            fragProxy.getWorldMatrix(wcsMatrix);
            var wcsPos = wcsMatrix.getPosition();
            console.log('frag position in wcs matrix  after transform: ' + 
            wcsPos.x + ' ' + wcsPos.y + ' ' + wcsPos.z);
        }); 

        bb = getModifiedWorldBoundingBox(fragIds,fragList);
        console.log('boundingbox after transform: [max,min]: ' + 
        bb.max.x + ' ' + bb.max.y + ' ' + bb.max.z + '\n'+ 
        bb.min.x + ' ' + bb.min.y + ' ' + bb.min.z ); 

    });

暫無
暫無

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

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