如何使用 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 查看器离线查看模型?