【问题标题】:x, y, z coordinates of an object for a nwc file in forge viewerforge 查看器中 nwc 文件的对象的 x、y、z 坐标
【发布时间】:2021-12-24 23:03:29
【问题描述】:

我正在尝试在 nwc 模型中查找对象的 x、y、z 坐标,并且我正在使用以下代码。

尽管此代码适用于 rvt 文件,但不适用于 nwc 模型。

有没有办法从 nwc 模型中获取 x,y,z 坐标?

getFragmentWorldMatrixByNodeId(nodeId) {
        let result = {
            fragId: [],
            matrix: [],
        };
        let viewer = this.viewer;
        this.tree.enumNodeFragments(nodeId, function (frag) {

            let fragProxy = viewer.impl.getFragmentProxy(viewer.model, frag);
            let matrix = new THREE.Matrix4();

            fragProxy.getWorldMatrix(matrix);

            result.fragId.push(frag);
            result.matrix.push(matrix);
        });
        return result;
    }

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

    您提到您正在寻找“对象的 x,y,z 坐标”。你到底是什么意思?我将假设您想要对象边界框的中心点 的坐标,因为这是人们通常要求的。然而,在您的代码 sn-p 中,您检索的是整个变换矩阵,而不是位置。

    如果边界框的中心点适合您,您可以像这样获得它:

    function getObjectBoundingBox(model, dbid) {
        const tree = model.getInstanceTree();
        const frags = model.getFragmentList();
        let totalBounds = new THREE.Box3();
        tree.enumNodeFragments(dbid, function (fragid) {
            let fragBounds = new THREE.Box3();
            frags.getWorldBounds(fragid, fragBounds);
            totalBounds.union(fragBounds);
        }, true);
        return totalBounds;
    }
    
    getObjectBoundingBox(viewer.model, 123).center();
    

    【讨论】:

    • 谢谢彼得,为我工作
    猜你喜欢
    • 2019-02-17
    • 2020-09-19
    • 2020-10-04
    • 2020-06-07
    • 2018-06-16
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多