是否可以通过编程方式移动头像或在 Autodesk.AEC.Minimap3DExtension 中指定位置
Is It possible to move the avatar programmatically or specify position in Autodesk.AEC.Minimap3DExtension
Autodesk.AEC.Minimap3DExtension 提供了一个 3d 和 2d 同步 forge 查看器,用户可以在其中使用 2d 查看器并移动头像进行导航。为了导航,用户必须在 2d 查看器中移动头像或点图标才能在 3d 模型中导航。
我的问题是哪里有可能发送我随身携带的一组坐标,我能否以编程方式移动头像,这样用户就不必这样做了。
这是我为什么要问的任何例子,
我的 forge 查看器上有一个 2D 几何图形,我希望以第一人称视角查看该几何图形。
所以如果我有所有的几何点,我想让它与 Autodesk.AEC.Minimap3DExtension 一起使用,这样我就可以将第一人称移动到不同的视图
这是我要引用的示例 link
我一直在关注这个精彩的博客 link
在这个的帮助下,我知道一点点知道如何使用 2dto3d
在上面 link
const worldPos = sheetToWorld(intersection.intersectPoint, viewer2D.model,
viewer3D.model);
上面的代码行给了我一个几何点的worldPos
尽管创建了几何图形,但还是在 3d 查看器中创建了我该如何使用
显示该特定地点的视图
基本上在下面这行代码中,它将相机从一个位置转移到另一个位置
viewer.navigation.setRequestTransition(true, newPos, newTarget,
viewer.navigation.getHorizontalFov());
很高兴你喜欢这个博客 post :)
看完问题感觉你已经自己回答了。如果您有某种几何图形,比方说多段线,覆盖在二维绘图之上,您可以使用博客 post 中解释的相同逻辑,但是在调用 viewer.hitTest
时,而不是通过在某些鼠标坐标中,您只需提供多段线的一个点。
而不是:
viewer2D.container.addEventListener('click', function (ev) {
const intersection = viewer2D.hitTest(ev.clientX, ev.clientY);
viewer3D.isolate([]);
if (intersection) {
viewer3D.isolate(intersection.dbId);
const worldPos = sheetToWorld(intersection.intersectPoint, viewer2D.model, viewer3D.model);
if (worldPos) {
let mesh = new THREE.Mesh(geometry, material);
mesh.position.set(worldPos.x, worldPos.y, worldPos.z);
viewer3D.overlays.addMesh(mesh, 'indicator-scene');
}
}
});
它可能看起来像这样:
function moveCameraToPointOnSheet(x, y) {
const intersection = viewer2D.hitTest(x, y);
if (intersection) {
const worldPos = sheetToWorld(intersection.intersectPoint, viewer2D.model, viewer3D.model);
if (worldPos) {
const eyeVec = viewer3D.navigation.getEyeVector();
const newPos = worldPos;
const newTarget = newPos.clone().add(eyeVec);
const fov = viewer3D.navigation.getHorizontalFov();
viewer3D.navigation.setRequestTransition(true, newPos, newTarget, fov);
}
}
});
Autodesk.AEC.Minimap3DExtension 提供了一个 3d 和 2d 同步 forge 查看器,用户可以在其中使用 2d 查看器并移动头像进行导航。为了导航,用户必须在 2d 查看器中移动头像或点图标才能在 3d 模型中导航。
我的问题是哪里有可能发送我随身携带的一组坐标,我能否以编程方式移动头像,这样用户就不必这样做了。
这是我为什么要问的任何例子, 我的 forge 查看器上有一个 2D 几何图形,我希望以第一人称视角查看该几何图形。 所以如果我有所有的几何点,我想让它与 Autodesk.AEC.Minimap3DExtension 一起使用,这样我就可以将第一人称移动到不同的视图
这是我要引用的示例 link
我一直在关注这个精彩的博客 link 在这个的帮助下,我知道一点点知道如何使用 2dto3d 在上面 link
const worldPos = sheetToWorld(intersection.intersectPoint, viewer2D.model,
viewer3D.model);
上面的代码行给了我一个几何点的worldPos 尽管创建了几何图形,但还是在 3d 查看器中创建了我该如何使用 显示该特定地点的视图
基本上在下面这行代码中,它将相机从一个位置转移到另一个位置
viewer.navigation.setRequestTransition(true, newPos, newTarget,
viewer.navigation.getHorizontalFov());
很高兴你喜欢这个博客 post :)
看完问题感觉你已经自己回答了。如果您有某种几何图形,比方说多段线,覆盖在二维绘图之上,您可以使用博客 post 中解释的相同逻辑,但是在调用 viewer.hitTest
时,而不是通过在某些鼠标坐标中,您只需提供多段线的一个点。
而不是:
viewer2D.container.addEventListener('click', function (ev) {
const intersection = viewer2D.hitTest(ev.clientX, ev.clientY);
viewer3D.isolate([]);
if (intersection) {
viewer3D.isolate(intersection.dbId);
const worldPos = sheetToWorld(intersection.intersectPoint, viewer2D.model, viewer3D.model);
if (worldPos) {
let mesh = new THREE.Mesh(geometry, material);
mesh.position.set(worldPos.x, worldPos.y, worldPos.z);
viewer3D.overlays.addMesh(mesh, 'indicator-scene');
}
}
});
它可能看起来像这样:
function moveCameraToPointOnSheet(x, y) {
const intersection = viewer2D.hitTest(x, y);
if (intersection) {
const worldPos = sheetToWorld(intersection.intersectPoint, viewer2D.model, viewer3D.model);
if (worldPos) {
const eyeVec = viewer3D.navigation.getEyeVector();
const newPos = worldPos;
const newTarget = newPos.clone().add(eyeVec);
const fov = viewer3D.navigation.getHorizontalFov();
viewer3D.navigation.setRequestTransition(true, newPos, newTarget, fov);
}
}
});