是否可以通过编程方式移动头像或在 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);
        }
    }
});