共计 1666 个字符,预计需要花费 5 分钟才能阅读完成。
获取鼠标经过地点的元素
// 获取鼠标经过地点的元素
intersectObjects(pointer,camera,obj) {
var domElement = viewer.impl.canvas;
var pointerVector = new THREE.Vector3();
var pointerDir = new THREE.Vector3();
var ray = new THREE.Raycaster();
var rect = domElement.getBoundingClientRect();
var x = (( pointer.clientX - rect.left) / rect.width ) * 2 - 1;
var y = - (( pointer.clientY - rect.top) / rect.height ) * 2 + 1;
if (camera.isPerspective) {pointerVector.set(x, y, 0.5);
pointerVector.unproject(camera);
ray.set(camera.position, pointerVector.sub(camera.position).normalize());
} else {pointerVector.set(x, y, -1);
pointerVector.unproject(camera);
pointerDir.set(0, 0, -1);
ray.set(pointerVector, pointerDir.transformDirection(camera.matrixWorld));
}
var intersections = ray.intersectObjects(obj, true);
return intersections[0] ? intersections[0] : false;
}
// 鼠标滑过小球市时触发的事件
hoverIntersectObjects(event){
var flag =true;
var pointer = event.pointers ? event.pointers[0] : event;
var camera = viewer.getCamera();
var objects = viewer.impl.overlayScenes.lable.scene.children;
var obj = viewer.vmethods.intersectObjects(pointer,camera,objects).object;
if(obj){
// 隐藏不可选
if(!obj.visible)return;
if(this.oldObj) this.oldObj.material.color.setHex(this.oldObj.currentHex);
this.oldObj=obj;
this.oldObj.currentHex = obj.material.color.getHex();
this.oldObj.material.color.setHex(0x660000);
viewer.impl.invalidate(false, false, true);
var pos=viewer.worldToClient(this.oldObj.position);
var posX=pos.x-$(".k-tooltip").width()/2;
var posY=pos.y-$(".k-tooltip").height()-20;
$(".k-tooltip").css({"left":posX,"top":posY});
$(".k-tooltip").show();
$(".k-tooltip .name").text(this.oldObj.name);
}else{if(this.oldObj) {this.oldObj.material.color.setHex( this.oldObj.currentHex);
viewer.impl.invalidate(false, false, true)
$(".k-tooltip").hide();}
}
}
正文完
发表至: javascript
2019-04-29