【问题标题】:Forge Viewer - getWorldCoordinates is giving different values on different occasionsForge Viewer - getWorldCoordinates 在不同的场合给出不同的值
【发布时间】:2020-06-10 04:14:52
【问题描述】:

我创建了下面的函数来获取世界坐标,但它在两次给出不同的值。

单击 dbId 时,我得到 dbid 坐标并将其传递给下面的函数,该函数为我提供世界坐标,但是当我将该 dbId 选择保存到 DB 并下次重新加载页面以查看它时,您可以看到,它给了我不同的坐标。 为什么会这样?

保存 dbid 阶段

dbid 坐标 x:-26.277027130126953 y: 18.102033615112305 z:-7.173819303512573

获取世界坐标 x: 256.76347287180107 y: 306.8180434914181 z: 0

重新加载页面阶段

dbid 坐标 x:-26.277027130126953 y: 18.102033615112305 z:-7.173819303512573

获取世界坐标 x: 422.50000131979897 是:249.49997927733767 z: 0

    function getWorldCoordinates(position){
        var screenpoint = viewer.worldToClient(
                    new THREE.Vector3(position.x,
                                      position.y,
                                      position.z,));
        return screenpoint
    }


function getObjPosition(dbId) {

function getObjPosition(dbId) {
    const model = viewer.model;
    const instanceTree = model.getData().instanceTree;
    const fragList = model.getFragmentList();

    let bounds = new THREE.Box3();

    instanceTree.enumNodeFragments( dbId, ( fragId ) => {
        let box = new THREE.Box3();
        fragList.getWorldBounds( fragId, box );
        bounds.union( box );
    }, true );

    const position = bounds.center();
    return position;
}

【问题讨论】:

    标签: autodesk-forge autodesk-viewer autodesk-model-derivative autodesk-data-management


    【解决方案1】:

    很遗憾,我无法重现该问题...

    尝试现场演示here - 刷新页面并查看模型完成加载时提示的世界坐标...

    确保在模型完成加载后转换坐标(例如,在 TEXTURES_LOADED_EVENT 之后),否则您可能会得到不稳定的结果:

    NOP_VIEWER.addEventListener(Autodesk.Viewing.TEXTURES_LOADED_EVENT,()=>{
     alert(JSON.stringify(NOP_VIEWER.worldToClient(
                        new THREE.Vector3(-26.277027130126953,
                                          18.102033615112305,
                                          -7.173819303512573,))))
    })
    

    【讨论】:

    • 即使我在 GEOMETRY_LOADED_EVENT 上尝试了 db fetch 调用,所以我用 TEXTURES_LOADED_EVENT 尝试了它,仍然没有机会。在我的 fetch 调用的成功处理程序中,它正在执行 worldToClient 转换。
    • 尽管我们采用了正确的方法,但我没有得到任何线索为什么它不起作用。
    • 抱歉搞错了,获取代码中的一个错误...它再次工作...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2019-06-21
    相关资源
    最近更新 更多