【发布时间】:2020-06-12 21:35:39
【问题描述】:
我们如何为在查看器上绘制的标记添加侦听器 CMERA_CHANGE_EVENT?如果我们针对 dbid 创建一个标签,我们可以存储它的坐标并可以将 worldToClient 应用于坐标以获取新坐标。但这对 svg 标记有何作用?
在我的应用程序中,用户可以通过两种方式关联 rfi 信息。 1. 通过简单地单击模型对象/dbid,我将让用户通过文本框添加一些文本信息,并将其作为标签与所选对象/dbid 一起附加。 当相机旋转事件时,标签会随着所选对象一起移动。
从技术上讲,为了完成这项工作,我使用函数 getObjPosition 来获取 dbid 的坐标并将其存储在标签控件中,我在相机更改事件期间提取这些值并使用以下函数 getClientCoordinates 更新当前客户端坐标
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
}
- 在这个场景中,我让用户绘制云标记并为用户在选择标记时输入的 tetual 信息关联一个标签。
所以要使用下面的代码获取坐标
var pos = markup.markups[0].getClientPosition(); 并用这个创建的标记标记标签。有用。 对于相机更改事件,标记本身会丢失其位置,因此不确定我将如何附加到模型并为标签应用坐标。 另一个令人担忧的部分是,我应该如何在相机更改事件期间获取模型上的所有绘制标记
希望我的问题现在清楚了。
【问题讨论】:
标签: autodesk-forge autodesk-viewer autodesk-model-derivative autodesk-data-management autodesk-bim360