请问如何在 Forge Viewer 里获取2D构件的包围匡(bounding box)?

发布于 2022-09-06 10:15:20 字数 481 浏览 21 评论 0

您好,我在获取2D图纸构件的包围框遇到的困难,我试了通过 GetNodeBox()API来获取包围框,但它回传的值都是 0,但这个方法在 3D 模型是没有问题的。下面是我们使用的部份代码:

var model = this.viewer.model;    
var it = model.getData().instanceTree;
var tmpBox = new Float32Array(6);

it.enumNodeChildren(it.getRootId(), function (dbId) {                
    console.log("Node ID" + dbId);
    it.getNodeBox(dbId, tmpBox);
}, true);

console.log( tmpBox ); //!<< 这里输出是 0,0,0,0,0,0

请问有没有其他方法可以做到我们想要的结果呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╰◇生如夏花灿烂 2022-09-13 10:15:20

获取 2D 图纸构件包围框的方法跟 3D 模型的不太一样,下面是样例(从 Viewer3D.js 里头截取来的):

function find2DBounds( fragList, fragId, dbId, bc ) {
    const mesh = fragList.getVizmesh( fragId );
    const vbr = new Autodesk.Viewing.Private.VertexBufferReader( mesh.geometry );
    vbr.enumGeomsForObject( dbId, bc );
}

function get2DBounds( dbId, model ) {
    const it = model.getData().instanceTree;
    const fragList = model.getFragmentList();

    let bounds = new THREE.Box3();
    let bc = new Autodesk.Viewing.Private.BoundsCallback( bounds );
    const dbId2fragId = model.getData().fragments.dbId2fragId;
    const fragIds = dbId2fragId[dbId];

    if( Array.isArray( fragIds ) ) {
        for( let i = 0; i < fragIds.length; i++ ) {
            find2DBounds( fragList, fragIds[i], dbId, bc );
        }
    } else if( typeof fragIds === 'number' ) {
        find2DBounds( fragList, fragIds, dbId, bc );
    }

    return bc.bounds;
}

// 包围匡
cosnt bondingBox = get2DBounds( dbId, viewer.model );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文