如何在 Forge Viewer 中获得正确的模型坐标
How can i get correct coordinates on model in forge viewer
我想用点云实现 autodesk forge 的图钉扩展,但要用自定义坐标。我想在模型点击事件中获取自定义坐标。我无法标准化这些点,以便它们出现在我单击的位置。
我尝试用这段代码标准化点,但它不起作用。
viewer.canvas.addEventListener( 'click', (event) => {
var screenPoint = {
x: event.clientX,
y: event.clientY
};
var n = normalize(screenPoint);
var dbId = /*_viewer.utilities.getHitPoint*/ getHitDbId(n.x, n.y);
if (dbId == null) return;
})
function getHitDbId(x, y) {
x = x * 2.0 - 1.0;
y = y * 2.0 - 1.0;
var vpVec = new THREE.Vector3(x, y, 0.5);
var result = viewer.impl.hitTestViewport(vpVec, false);
result.distance = 1;
if(result){
dummyData.push({
icon: Math.round(Math.random()*3),
x: result.point.x,
y: result.point.y,
z: result.point.z,
});
window.dispatchEvent(new CustomEvent('newData', {
'detail': dummyData
}))
} else {
return
}
};
function normalize(screenPoint) {
var viewport = viewer.navigation.getScreenViewport();
var n = {
x: (screenPoint.x - viewport.left) / viewport.width,
y: (screenPoint.y - viewport.top) / viewport.height
};
console.log(n);
return n;
}
已编辑答案。
现在我在标准化偏移量之后遇到了另一个问题。某些图钉显示不正确。你可以在图片中看到问题。
我该如何解决?
Forge Digital Twin代码中找到对应世界坐标的示例代码:https://github.com/petrbroz/forge-digital-twin/blob/master/public/scripts/extensions/issues.js.
现场演示:http://forge-digital-twin.autodesk.io/(试试工具栏中的旗帜图标)。
我想用点云实现 autodesk forge 的图钉扩展,但要用自定义坐标。我想在模型点击事件中获取自定义坐标。我无法标准化这些点,以便它们出现在我单击的位置。
我尝试用这段代码标准化点,但它不起作用。
viewer.canvas.addEventListener( 'click', (event) => {
var screenPoint = {
x: event.clientX,
y: event.clientY
};
var n = normalize(screenPoint);
var dbId = /*_viewer.utilities.getHitPoint*/ getHitDbId(n.x, n.y);
if (dbId == null) return;
})
function getHitDbId(x, y) {
x = x * 2.0 - 1.0;
y = y * 2.0 - 1.0;
var vpVec = new THREE.Vector3(x, y, 0.5);
var result = viewer.impl.hitTestViewport(vpVec, false);
result.distance = 1;
if(result){
dummyData.push({
icon: Math.round(Math.random()*3),
x: result.point.x,
y: result.point.y,
z: result.point.z,
});
window.dispatchEvent(new CustomEvent('newData', {
'detail': dummyData
}))
} else {
return
}
};
function normalize(screenPoint) {
var viewport = viewer.navigation.getScreenViewport();
var n = {
x: (screenPoint.x - viewport.left) / viewport.width,
y: (screenPoint.y - viewport.top) / viewport.height
};
console.log(n);
return n;
}
已编辑答案。 现在我在标准化偏移量之后遇到了另一个问题。某些图钉显示不正确。你可以在图片中看到问题。
我该如何解决?
Forge Digital Twin代码中找到对应世界坐标的示例代码:https://github.com/petrbroz/forge-digital-twin/blob/master/public/scripts/extensions/issues.js.
现场演示:http://forge-digital-twin.autodesk.io/(试试工具栏中的旗帜图标)。