【发布时间】:2019-04-29 21:03:44
【问题描述】:
我现在正在努力解决一些问题。我有一个使用ToolInterface 的扩展实现查看器的页面,以便我可以捕获鼠标事件。我成功获取了鼠标事件,并且可以检索返回的 x、y 坐标。
我想做的是获取该点的世界 (x, y, z) 坐标。我尝试使用Viewer3D.clientToWorld 函数,但无论该点是否超过几何形状,它总是返回null。
我也尝试使用ViewingUtilites.getHitPoint 函数来获取世界(x、y、z)坐标,但它也总是返回null。我尝试使用事件返回的 (x, y) 并进行标准化。
所以我的问题是,如何从 Forge 查看器中的客户端 (x, y) 坐标获取世界 (x, y, z) 坐标?
谢谢!
**** 编辑:下面添加的代码
MyViewerTool = function (viewer, options) {
Autodesk.Viewing.Extension.call(this, viewer, options);
var _self = this;
var _viewer = viewer;
// ....
_self.tool = null;
function MyViewerTool(viewer, toolName) {
function normalizePoint(screenPoint) {
const viewport = _viewer.navigation.getScreenViewport();
var n = {
x: (screenPoint.x - viewport.left) / viewport.width,
y: (screenPoint.y - viewport.height) / viewport.height
}
return n;
}
this.handleSingleClick = function(event, button) {
console.log(event);
const normalizedPoint = normalizePoint({ x: event.clientX, y: event.clientY });
const worldPoint = _viewer.utilities.getHitPoint(normalizedPoint.x, normalizedPoint.y);
console.log(worldPoint);
return false;
};
// ...
}
// other code that just does the register/load/etc
// this does load in the viewer as I am able to
// set a breakpoint above and I see what looks like
// valid point data.
// my first try used the clientToWorld(...)
// using the same event data passed in handleSingleClick (above).
//
【问题讨论】:
-
您可以粘贴您的代码以便我们查看吗?调用 clientToWorld 时是否使用了画布坐标?
this.viewer.clientToWorld(event.canvasX, event.canvasY, true)
标签: autodesk-forge autodesk-viewer