Files
tunnel-cloud-web/src/components/content/tunnelScene/sceneClass/handleRLclick/handleRclick.js
2023-12-07 23:30:51 +08:00

57 lines
1.6 KiB
JavaScript

export function handleRClick(targetPoint) {
this.clearTagsObj();
// 全局临时标记该选中的模型;
this.targetPoint = targetPoint;
const worldPosition = new this.THREE.Vector3();
//获取附着点的世界坐标系
targetPoint.getWorldPosition(worldPosition);
this._checkAnimation(worldPosition);
// 显示左键属性栏
this.tag3CSS2DObj.element.style.display = "block";
// 设置标签位置
this.tag3CSS2DObj.position.set(
worldPosition.x,
worldPosition.y,
worldPosition.z
);
this.tag3CSS2DObj.translateY(-15);
this.tag3CSS2DObj.translateX(15);
this.scene.add(this.tag3CSS2DObj);
intoAnimation.call(this);
// 返回给组件的回调函数
this.displayDevInfo(targetPoint);
}
function intoAnimation() {
const worldP = this.targetPoint.getWorldPosition(new this.THREE.Vector3());
const positionOBj = this.camera.position;
const start = this.orbitControls.target;
this.intoPointAnimation = new this.TWEEN.Tween({
x: positionOBj.x,
y: positionOBj.y,
z: positionOBj.z,
xTarget: start.x,
yTarget: start.y,
zTarget: start.z,
});
this.intoPointAnimation.to(
{
x: worldP.x + 20,
y: worldP.y + 20,
z: worldP.z + 50,
xTarget: worldP.x,
yTarget: worldP.y,
zTarget: worldP.z,
},
600
);
this.intoPointAnimation.start();
this.intoPointAnimation.onUpdate((obj) => {
this.camera.position.set(obj.x, obj.y, obj.z);
this.camera.lookAt(obj.xTarget, obj.yTarget, obj.zTarget);
this.orbitControls.target.set(obj.xTarget, obj.yTarget, obj.zTarget);
});
}