/*
* 선택된 개체의 id가 주어진 id와 다른지 여부
* @param pPick
* @param pId
*/
function isNotExist(pPick, pId) {
if (Cesium['defined'](pPick['id'])) {
const id = pPick['id'];
if (id['_noMousePosition'])
return false;
if (pId && id == pId)
return false;
}
if (Cesium['defined'](pPick['primitive'])) {
const primitive = pPick['primitive'];
if (primitive['_noMousePosition'])
return false;
if (pId && primitive == pId)
return false;
}
return true;
}
/*
* 마우스의 위치가 주어진 id와 다르다면 마우스의 좌표를 반환
* @param pScene
* @param pPosition
* @param pId
*/
function getCurrentMousePosition(pScene, pPosition, pId) {
let position, pick = pScene['pick'](pPosition);
//개체가 선택되었고 주어진 id를 가지는 경우
if (pScene['pickPositionSupported'] && Cesium['defined'](pick) && isNotExist(pick, pId)) {
position = pScene['pickPosition'](pPosition);
if (Cesium['defined'](position)) {
const cartesian = Cesium['Cartographic']['fromCartesian'](position),
height = cartesian['height'];
if (height >= 0)
return position;
if (!Cesium['defined'](pick['id']) && (height >= -500))
return position;
}
}
//현재 장면이 3D(지구)인 경우
if (pScene['mode'] === Cesium['SceneMode']['SCENE3D']) {
const pickRay = pScene['camera']['getPickRay'](pPosition);
position = pScene['globe']['pick'](pickRay, pScene);
}
//현재 장면이 콜럼버스뷰 or 평면지도인 경우
else {
position = pScene['camera']['pickEllipsoid'](pPosition, pScene['globe']['ellipsoid']);
}
return position;
}