如何使用 Autodesk Forge 查看器在 3D 模型中查找位置(x、y、z 坐标)

Posted

技术标签:

【中文标题】如何使用 Autodesk Forge 查看器在 3D 模型中查找位置(x、y、z 坐标)【英文标题】:How to find the position(x,y,z coordinates) in the 3D model using autodesk forge viewer 【发布时间】:2020-10-04 21:28:30 【问题描述】:

我尝试使用repo 在 3D 模型中找到一个表面的位置(x、y、z 坐标)。我尝试在整个模型上单击,但每次单击都会获得相同的位置(x、y、z 值)。 Click here to see the position when i click on a surface 当我尝试在模型中单击 (somewhere else) 时,我也得到了相同的位置(x、y、z 值)。我已经尝试了在这个模型的 repo 链接中给出的完全相同的东西(urn:dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6YXBwdGVzdGJ1Y2tldG5pc2hhbnQyL2dhdGVob3VzZSUyMDEubndk)。如何在模型中找到位置(x,y,z 坐标)?提前致谢。

【问题讨论】:

【参考方案1】:

这通常是计算相对于托管 Forge 查看器的画布的光标坐标的问题,因此首先要确保这些坐标是正确的。例如,单击靠近画布左上角的位置应该会为您提供接近 (0,0) 的相对光标坐标。然后将这些相对坐标传递给 Viewer API 以进行光线投射和命中测试。

这是另一个 sample code 做同样的事情(点击画布后查找最近命中的世界坐标):

   $('#viewer').on('click', function(ev) 
        let intersections = [];
        const bounds = document.getElementById('viewer').getBoundingClientRect();
        mainViewer.impl.castRayViewport(mainViewer.impl.clientToViewport(ev.clientX - bounds.left, ev.clientY - bounds.top), false, null, null, intersections);
        if (intersections.length > 0) 
            const intersection = intersections[0];
            $('#issue-part').val(intersection.dbId);
            $('#issue-position-x').val(intersection.point.x.toFixed(2));
            $('#issue-position-y').val(intersection.point.y.toFixed(2));
            $('#issue-position-z').val(intersection.point.z.toFixed(2));
        
    );

【讨论】:

以上是关于如何使用 Autodesk Forge 查看器在 3D 模型中查找位置(x、y、z 坐标)的主要内容,如果未能解决你的问题,请参考以下文章

打开第二个查看器时 AutoDesk Forge 查看器 API 引发错误

如何使用 Autodesk Forge 查看器离线查看模型?

如何使用 BIM 360 Web 查看器 (Autodesk Forge)

如何将 Autodesk Forge 模型查看器嵌入网站?

Autodesk-forge 查看器:访问令牌

如何将 Autodesk Forge 查看器扩展添加到 React?