转换后伪造查看器模型的位置

时间:2018-06-23 14:31:35

标签: javascript three.js autodesk-forge autodesk-viewer

我已经使用Model transformation extension将模型从一个点移动到另一个点。现在,如何获取转换后的模型或其边界框的新位置/坐标/位置,就像查询边界框的最小和最大点时,它们始终是相同的。有任何想法吗?? 我的目标是根据翻译后的原点获得模型的新位置。

1 个答案:

答案 0 :(得分:0)

我隔离了该扩展的核心部分,并在转换前后检查了位置和边界框。为简单起见,仅翻译。看起来这些值在转换后会更新。您能检查一下是否可以帮助您诊断问题吗?

要对其进行测试,请选择一个对象并运行该功能。

 $('#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 ); 

    });