123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- import { ComVal } from "../common/ComVal.js";
- import { QingXiCheAndQvCarEventClick } from "../js/QingXiCheAndQvCarEventClick.js";
- import { QingXiCheAndQvComHighlightLayer } from "../js/QingXiCheAndQvComHighlightLayer.js";
- /**
- * 操作 3d场景 相关事件
- */
- export class QingXiCheAndQvThreeWorldEvent {
-
- // 每次 new 出对象则会调用这个构造函数
- constructor() {
- // 已经封装好的,编辑器的类对象,内置可以直接调用的代码
- this.objIframeEdit = null;
- // iframe对象
- this.objIframe = null;
- // 3d世界的场景,后续要操作3d世界常用的对象
- this.objScene = null;
- // babylon 对象,懂babylon,就可以使用babylon的api去操作
- this.BABYLON = null;
- // 操作 Cesium 的类
- this.objCesiumMain = null;
- // 当前鼠标是否按住
- this.clickPressBool = false;
- // 记录鼠标最后一次点击的时间戳
- this.clickTime = 0;
-
- }
- /**
- * 初始化方法
- * objIframeEdit 已经封装好的,编辑器的类对象,内置可以直接调用的代码
- * objIframe iframe对象
- * objScene 场景对象
- * BABYLON babylon.js对象,用于后续调用babylon的代码去创建更新等操作
- * objCesiumMain 操作 Cesium 的类
- */
- initObj = function (objIframeEdit, objIframe, objScene, BABYLON, objCesiumMain) {
-
- if (this.objIframe != null && this.objIframe != undefined) {
- return this;
- }
- this.objIframeEdit = objIframeEdit;
- this.objIframe = objIframe;
- this.objScene = objScene;
- this.BABYLON = BABYLON;
-
- this.pointerEvent();
- this.renderEvent();
-
- return this;
- }
-
- /**
- * 鼠标事件
- */
- pointerEvent = function() {
- var thisClass = this;
- var BABYLON = this.BABYLON;
- var objScene = this.objScene;
-
- objScene.onPointerObservable.add(
- (pointerInfo) => {
-
-
- if (
- // 鼠标按住
- thisClass.clickPressBool == true
- ) {
- // 获取选择的对象, 通过测试 scene.pick() 方法是非常消耗性能的
- let pickResultMove = objScene.pick(
- objScene.pointerX,
- objScene.pointerY
- );
- if (pickResultMove.hit) {
- // console.log(
- // "鼠标按住移动触发逻辑",
- // "pickResultMove", pickResultMove
- // );
- thisClass.clickMoveEvent(pickResultMove);
-
- }
-
- }
-
- // 如果点击到3d世界里的物体的时候
- if (pointerInfo.pickInfo.hit) {
-
- var pickResult = pointerInfo.pickInfo;
- switch (pointerInfo.type) {
- case BABYLON.PointerEventTypes.POINTERDOWN:
- // console.log("clickType 鼠标按下");
- thisClass.clickEvent(pickResult);
- break;
- case BABYLON.PointerEventTypes.POINTERUP:
- // console.log("clickType 鼠标弹起");
- thisClass.clickUpEvent(pickResult);
- break;
- case BABYLON.PointerEventTypes.POINTERMOVE:
- // console.log("clickType 鼠标移动中");
-
- break;
- case BABYLON.PointerEventTypes.POINTERWHEEL:
- // console.log("clickType 鼠标滚轮滚动中");
- break;
- case BABYLON.PointerEventTypes.POINTERPICK:
- // console.log("clickType 鼠标指针选中事件");
- break;
- case BABYLON.PointerEventTypes.POINTERTAP:
- // console.log("clickType 当对象被触摸并在没有拖动的情况下释放时,触发指针触发事件。");
- break;
- case BABYLON.PointerEventTypes.POINTERDOUBLETAP:
- // console.log("clickType 鼠标双击");
- break;
- }
- }
-
- }
- );
-
- }
-
- /**
- * 点击事件
- * pickResult 返回的鼠标参数
- */
- clickEvent = function(pickResult) {
-
- var thisClass = this;
- var BABYLON = this.BABYLON;
- var objScene = this.objScene;
- this.clickPressBool = true;
- this.clickTime = new Date().getTime();
-
- var objMesh = pickResult.pickedMesh;
- var objPosition = pickResult.pickedPoint;
- // 获取点击对象的方向【 一定要加上 true,否则载入的获取模型的方向,会有问题 】
- // eslint-disable-next-line no-unused-vars
- var getNormal = pickResult.getNormal(true);
- // console.log(
- // "鼠标点击事件",
- // // pickResult
- // objMesh, objPosition, getNormal
- // );
- QingXiCheAndQvCarEventClick.find().clickMeshEvent(pickResult);
- }
-
- /**
- * 鼠标弹起事件
- * pickResult 返回的鼠标参数
- */
- clickUpEvent = function(pickResult) {
-
- var thisClass = this;
- var objScene = this.objScene;
- var objIframe = this.objIframe;
- var BABYLON = this.BABYLON;
- this.clickPressBool = false;
- var thisTime = new Date().getTime();
- // 与点击相差时间
- var upTime = thisTime - this.clickTime;
-
- var objMesh = pickResult.pickedMesh;
- var objPosition = pickResult.pickedPoint;
- // 获取点击对象的方向【 一定要加上 true,否则载入的获取模型的方向,会有问题 】
- // eslint-disable-next-line no-unused-vars
- var getNormal = pickResult.getNormal(true);
- // console.log(
- // "鼠标弹起事件", upTime,
- // // pickResult
- // objMesh, objPosition, getNormal
- // );
-
- QingXiCheAndQvCarEventClick.find().main(pickResult);
-
- }
- /**
- * 鼠标按住并且拖拽事件
- * pickResult 返回的鼠标参数
- */
- clickMoveEvent = function(pickResult) {
- // 不存在要拖拽移动的物体,则不触发后面逻辑,要不然一直触后面逻辑,会影响性能
- if (QingXiCheAndQvCarEventClick.find().moveMeshList.length <= 0) {
- return;
- }
-
- var thisClass = this;
- var objScene = this.objScene;
- var objIframe = this.objIframe;
- var BABYLON = this.BABYLON;
- var objMesh = pickResult.pickedMesh;
- var objPosition = pickResult.pickedPoint;
- // 获取点击对象的方向【 一定要加上 true,否则载入的获取模型的方向,会有问题 】
- // eslint-disable-next-line no-unused-vars
- var getNormal = pickResult.getNormal(true);
- // console.log(
- // "鼠标按住拖拽事件",
- // // pickResult
- // objMesh, objPosition, getNormal
- // );
- QingXiCheAndQvCarEventClick.find().clickMoveMeshEvent(pickResult);
-
-
- }
- /**
- * 帧事件
- */
- renderEvent = function() {
-
- var thisClass = this;
- var objScene = this.objScene;
- var objIframe = this.objIframe;
- var BABYLON = this.BABYLON;
-
- // 添加帧事件
- objScene.onBeforeRenderObservable.add(function() {
-
- // console.log("帧事件触发");
- ComVal.find().fpsEventMain();
- QingXiCheAndQvComHighlightLayer.find().flickerBoolEvent();
- QingXiCheAndQvCarEventClick.find().renderEvent();
- if (
- QingXiCheAndQvCarEventClick.find().moveCameraRadius != null && QingXiCheAndQvCarEventClick.find().moveCameraRadius != undefined
- && QingXiCheAndQvCarEventClick.find().moveCameraAlpha != null && QingXiCheAndQvCarEventClick.find().moveCameraAlpha != undefined
- && QingXiCheAndQvCarEventClick.find().moveCameraBeta != null && QingXiCheAndQvCarEventClick.find().moveCameraBeta != undefined
- ) {
- let ChengGuangYuanJing = objIframe.ChengGuangYuanJing;
- let objSceneActiveCamera = ChengGuangYuanJing.CommonVal.find().objSceneActiveCamera;
- objSceneActiveCamera.radius = QingXiCheAndQvCarEventClick.find().moveCameraRadius;
- objSceneActiveCamera.alpha = QingXiCheAndQvCarEventClick.find().moveCameraAlpha;
- objSceneActiveCamera.beta = QingXiCheAndQvCarEventClick.find().moveCameraBeta;
-
- }
-
- });
-
- }
-
-
- }
|