首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >伪造查看器--我们如何为svg标记添加CAMERA_CHANGE_EVENT?

伪造查看器--我们如何为svg标记添加CAMERA_CHANGE_EVENT?
EN

Stack Overflow用户
提问于 2020-02-28 18:41:07
回答 1查看 361关注 0票数 0

如何为在查看器上绘制的标记添加侦听器CMERA_CHANGE_EVENT?如果我们针对dbid创建一个标签,我们可以存储它的坐标,并可以在坐标上应用worldToClient来获得新的坐标。但是这对于svg的标记是如何工作的呢?

在我的应用程序中,用户可以通过两种方式关联rfi信息。1.只需单击一个模型obkject/dbid,我就可以让用户通过textbox添加一些文本信息,并将其作为带有所选对象/dbid的标签。这是随着标签移动与选定的对象,而摄像机旋转事件。

从技术上讲,我使用函数getObjPosition获取dbid的坐标,并将其存储在标签控件中,并在摄像机更改事件期间提取这些值,并使用下面的函数getClientCoordinates更新当前的客户端坐标。

代码语言:javascript
运行
复制
function getObjPosition(dbId) {
    const model = viewer.model;
    const instanceTree = model.getData().instanceTree;
    const fragList = model.getFragmentList();

    let bounds = new THREE.Box3();

    instanceTree.enumNodeFragments( dbId, ( fragId ) => {
        let box = new THREE.Box3();
        fragList.getWorldBounds( fragId, box );
        bounds.union( box );
    }, true );

    const position = bounds.center();
    return position;
}

function getClientCoordinates(positionCoordinates){
    var screenpoint = viewer.worldToClient(
                    new THREE.Vector3(positionCoordinates.x,
                                      positionCoordinates.y,
                                      positionCoordinates.z,));
    return screenpoint
}

在本场景中,

  1. 给用户绘制云标记,并为用户在选择标记时输入相关信息关联标签。因此,要获得坐标,请使用下面的代码

var pos = markup.markups.getClientPosition();并使用此创建的标记标记标签。它起作用了。对于相机改变事件,标记本身失去了它的位置,所以不确定我将如何附加到模型和应用坐标的标签。这里另一个令人担心的部分是,我应该如何在相机更改事件中获得模型上的所有标记。

希望我的问题现在清楚了。

EN

回答 1

Stack Overflow用户

发布于 2020-03-02 07:14:57

CAMERA_CHANGE_EVENT适用于整个场景,每当导航发生时,就无法将其绑定到任何特定的对象,这样做也没有什么意义。

如果您试图将SVG标记移动到它们的新的对应坐标-- post导航--只需在导航之前存储它们原来的世界位置(使用clientToWorld),然后使用worldToClient获得它们的新的坐标后导航。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60457516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档