Я борюсь с чем-то прямо сейчас.У меня есть страница, реализующая средство просмотра с расширением, использующим ToolInterface
, чтобы я мог захватывать события мыши.Я успешно получаю события мыши и могу получить координаты x, y, которые были возвращены.
Я хотел бы получить координаты мира (x, y, z) для этой точки.Я пытался использовать функцию Viewer3D.clientToWorld
, но она всегда возвращает null
независимо от того, находится ли точка над геометрией или нет.
Я также пытался использовать функцию ViewingUtilites.getHitPoint
, чтобы получить мир (x, y, z), но также всегда возвращает null
.Я попытался использовать (x, y) как возвращено событием и также нормализовал.
Поэтому мой вопрос, как мне получить координаты мира (x, y, z) от клиента (x, y)) координаты в программе просмотра Forge?
Спасибо!
**** РЕДАКТИРОВАТЬ: Код добавлен ниже
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).
//