Forge Viewer - getWorldCoordinates 在不同场合给出不同的值
Forge Viewer - getWorldCoordinates is giving different values on different occasions
我创建了下面的函数来取回世界坐标,但它在两个场合给出了不同的值。
当我点击一个 dbId 时,我得到了 dbid 坐标并将它传递给下面的函数,它给我世界坐标,但是你可以看到当我将 dbId 选择保存到 DB 并在下次重新加载页面时看到它,它给我不同的坐标。
为什么会这样?
节省 dbid 阶段
投标坐标
x: -26.277027130126953
是:18.102033615112305
z: -7.173819303512573
获取世界坐标
x: 256.76347287180107
是:306.8180434914181
z: 0
relaoding页面阶段
投标坐标
x: -26.277027130126953
是:18.102033615112305
z: -7.173819303512573
获取世界坐标
x: 422.50000131979897
是:249.49997927733767
z: 0
function getWorldCoordinates(position){
var screenpoint = viewer.worldToClient(
new THREE.Vector3(position.x,
position.y,
position.z,));
return screenpoint
}
function getObjPosition(dbId) {
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;
}
很遗憾,我无法重现该问题...
尝试现场演示here - 刷新页面并查看模型完成加载时提示的世界坐标...
一定要在模型完成加载后转换坐标(例如在 TEXTURES_LOADED_EVENT 之后),否则您可能会得到不稳定的结果:
NOP_VIEWER.addEventListener(Autodesk.Viewing.TEXTURES_LOADED_EVENT,()=>{
alert(JSON.stringify(NOP_VIEWER.worldToClient(
new THREE.Vector3(-26.277027130126953,
18.102033615112305,
-7.173819303512573,))))
})
我创建了下面的函数来取回世界坐标,但它在两个场合给出了不同的值。
当我点击一个 dbId 时,我得到了 dbid 坐标并将它传递给下面的函数,它给我世界坐标,但是你可以看到当我将 dbId 选择保存到 DB 并在下次重新加载页面时看到它,它给我不同的坐标。 为什么会这样?
节省 dbid 阶段
投标坐标 x: -26.277027130126953 是:18.102033615112305 z: -7.173819303512573
获取世界坐标 x: 256.76347287180107 是:306.8180434914181 z: 0
relaoding页面阶段
投标坐标 x: -26.277027130126953 是:18.102033615112305 z: -7.173819303512573
获取世界坐标 x: 422.50000131979897 是:249.49997927733767 z: 0
function getWorldCoordinates(position){
var screenpoint = viewer.worldToClient(
new THREE.Vector3(position.x,
position.y,
position.z,));
return screenpoint
}
function getObjPosition(dbId) {
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;
}
很遗憾,我无法重现该问题...
尝试现场演示here - 刷新页面并查看模型完成加载时提示的世界坐标...
一定要在模型完成加载后转换坐标(例如在 TEXTURES_LOADED_EVENT 之后),否则您可能会得到不稳定的结果:
NOP_VIEWER.addEventListener(Autodesk.Viewing.TEXTURES_LOADED_EVENT,()=>{
alert(JSON.stringify(NOP_VIEWER.worldToClient(
new THREE.Vector3(-26.277027130126953,
18.102033615112305,
-7.173819303512573,))))
})