123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 |
- import * as THREE from 'three';
- import UseThree from '../../../../utils/threejs/useThree';
- import Fm1 from './gate.threejs.yy';
- import Fm3 from './gate.threejs.qd';
- import FmXR from './gate.threejs.xr';
- import Fm2 from './gate.threejs.three';
- import FmTwoSs from './gate.threejs.two.ss';
- import { animateCamera } from '/@/utils/threejs/util';
- import useEvent from '../../../../utils/threejs/useEvent';
- import { useGlobSetting } from '/@/hooks/setting';
- // 模型对象、 文字对象
- let model,
- fm1, //液压风门
- fm2, //三道风门
- fm3, //气动风门
- fmXr: FmXR, //行人风门
- fmTwoSs, //
- group: THREE.Object3D,
- fmType = '';
- const { mouseDownFn } = useEvent();
- // 初始化左右摇摆动画
- const startAnimation = () => {
- // 定义鼠标点击事件
- model.canvasContainer?.addEventListener('mousedown', mouseEvent.bind(null));
- model.canvasContainer?.addEventListener('pointerup', (event) => {
- event.stopPropagation();
- // 单道、 双道
- if (fmType === 'fm1') {
- fm1?.mouseUpModel.call(fm1);
- } else if (fmType === 'fm2') {
- fm2?.mouseUpModel.call(fm2);
- } else if (fmType === 'fm3') {
- fm3?.mouseUpModel.call(fm3);
- } else if (fmType === 'fmXr') {
- fmXr?.mouseUpModel.call(fmXr);
- } else if (fmType === 'fmTwoSs') {
- fmTwoSs?.mouseUpModel.call(fmTwoSs);
- }
- });
- };
- // 鼠标点击、松开事件
- const mouseEvent = (event) => {
- if (event.button == 0) {
- mouseDownFn(model, group, event, (intersects) => {
- if (fmType === 'fm1' && fm1) {
- fm1?.mousedownModel.call(fm1, intersects);
- } else if (fmType === 'fm2' && fm2) {
- fm2?.mousedownModel.call(fm2, intersects);
- } else if (fmType === 'fm3' && fm3) {
- fm3?.mousedownModel.call(fm3, intersects);
- } else if (fmType === 'fmXr' && fmXr) {
- fmXr?.mousedownModel.call(fmXr, intersects);
- } else if (fmType === 'fmTwoSs' && fmTwoSs) {
- fmTwoSs?.mousedownModel.call(fmTwoSs, intersects);
- }
- });
- // console.log('摄像头控制信息', model.orbitControls, model.camera);
- }
- };
- export const addMonitorText = (selectData) => {
- if (fmType === 'fm1' && fm1) {
- return fm1?.addMonitorText.call(fm1, selectData);
- } else if (fmType === 'fm2' && fm2) {
- return fm2?.addMonitorText.call(fm2, selectData);
- } else if (fmType === 'fm3' && fm3) {
- return fm3?.addMonitorText.call(fm3, selectData);
- } else if (fmType === 'fmXr' && fmXr) {
- return fmXr?.addMonitorText.call(fmXr, selectData);
- } else if (fmType === 'fmTwoSs' && fmTwoSs) {
- return fmTwoSs?.addMonitorText.call(fmTwoSs, selectData);
- }
- };
- export const deviceDetailCard = () => {
- if (fmType === 'fm1') {
- return fm1?.deviceDetailCard.call(fm1);
- } else if (fmType === 'fm3') {
- return fm3?.deviceDetailCard.call(fm3);
- } else if (fmType === 'fmXr') {
- return fmXr?.deviceDetailCard.call(fmXr);
- } else {
- // return fm2.addMonitorText.call(fm2);
- }
- };
- export const play = (handlerState, flag?) => {
- if (fmType === 'fm1' && fm1) {
- return fm1.play.call(fm1, handlerState, flag);
- } else if (fmType === 'fm2' && fm2) {
- return fm2.play.call(fm2, handlerState, flag);
- } else if (fmType === 'fm3' && fm3) {
- return fm3.play.call(fm3, handlerState, flag);
- } else if (fmType === 'fmXr' && fmXr) {
- return fmXr.play.call(fmXr, handlerState, flag);
- } else if (fmType === 'fmTwoSs' && fmTwoSs) {
- return fmTwoSs.play.call(fmTwoSs, handlerState, flag);
- }
- };
- // 切换风门类型
- export const setModelType = (type) => {
- fmType = type;
- return new Promise((resolve) => {
- // 暂停风门1动画
- if (fmType === 'fm1' && fm1 && fm1.group) {
- if (fm1.clipActionArr.frontDoor && fm1.clipActionArr.backDoor) {
- fm1.clipActionArr.frontDoor.reset();
- fm1.clipActionArr.frontDoor.time = 0.5;
- fm1.clipActionArr.backDoor.reset();
- fm1.clipActionArr.backDoor.time = 0.5;
- fm1.clipActionArr.frontDoor.stop();
- fm1.clipActionArr.backDoor.stop();
- }
- if (fm1.frontDamperOpenMesh) fm1.frontDamperOpenMesh.visible = false;
- if (fm1.frontDamperClosedMesh) fm1.frontDamperClosedMesh.visible = true;
- if (fm1.backDamperOpenMesh) fm1.backDamperOpenMesh.visible = false;
- if (fm1.backDamperClosedMesh) fm1.backDamperClosedMesh.visible = true;
- model.scene.remove(group);
- model.startAnimation = fm1.render.bind(fm1);
- group = fm1.group;
- group.rotation.y = 0;
- const oldCameraPosition = { x: -1000, y: 100, z: 500 };
- setTimeout(async () => {
- resolve(null);
- model.scene.add(fm1.group);
- await animateCamera(
- oldCameraPosition,
- { x: 0, y: 0, z: 0 },
- { x: 50.99, y: 69.32, z: 93.61 },
- { x: -10.04, y: -14.38, z: -31.4 },
- model,
- 0.8
- );
- }, 300);
- } else if (fmType === 'fm2' && fm2 && fm2.group) {
- if (fm2.clipActionArr.frontDoor && fm2.clipActionArr.backDoor) {
- fm2.clipActionArr.frontDoor.reset();
- fm2.clipActionArr.frontDoor.time = 0.5;
- fm2.clipActionArr.backDoor.reset();
- fm2.clipActionArr.backDoor.time = 0.5;
- fm2.clipActionArr.centerDoor.reset();
- fm2.clipActionArr.centerDoor.time = 0.5;
- fm2.clipActionArr.frontDoor.stop();
- fm2.clipActionArr.backDoor.stop();
- fm2.clipActionArr.centerDoor.stop();
- }
- // 显示单道风窗
- model.startAnimation = fm2.render.bind(fm2);
- model.scene.remove(group);
- group = fm2.group;
- const oldCameraPosition = { x: -761, y: 569, z: 871 };
- setTimeout(async () => {
- resolve(null);
- model.scene.add(fm2.group);
- const position = { x: -2.28, y: -0.91, z: -5.68 };
- await animateCamera(
- oldCameraPosition,
- { x: -2.27, y: -0.91, z: -5.67 },
- { x: 66.257, y: 57.539, z: 94.313 },
- { x: position.x, y: position.y, z: position.z },
- model,
- 0.6
- );
- }, 300);
- } else if (fmType === 'fm3' && fm3 && fm3.group) {
- if (fm3.clipActionArr.frontDoor && fm3.clipActionArr.backDoor) {
- fm3.clipActionArr.frontDoor.reset();
- fm3.clipActionArr.frontDoor.time = 0.5;
- fm3.clipActionArr.backDoor.reset();
- fm3.clipActionArr.backDoor.time = 0.5;
- fm3.clipActionArr.frontDoor.stop();
- fm3.clipActionArr.backDoor.stop();
- }
- if (fm3.frontDamperOpenMesh) fm3.frontDamperOpenMesh.visible = false;
- if (fm3.frontDamperClosedMesh) fm3.frontDamperClosedMesh.visible = true;
- if (fm3.backDamperOpenMesh) fm3.backDamperOpenMesh.visible = false;
- if (fm3.backDamperClosedMesh) fm3.backDamperClosedMesh.visible = true;
- model.scene.remove(group);
- model.startAnimation = fm3.render.bind(fm3);
- group = fm3.group;
- group.rotation.y = 0;
- const oldCameraPosition = { x: -1000, y: 100, z: 500 };
- setTimeout(async () => {
- resolve(null);
- model.scene.add(fm3.group);
- await animateCamera(
- oldCameraPosition,
- { x: 0, y: 0, z: 0 },
- { x: 50.99, y: 69.32, z: 93.61 },
- { x: -10.04, y: -14.38, z: -31.4 },
- model,
- 0.8
- );
- }, 300);
- } else if (fmType === 'fmXr' && fmXr && fmXr.group) {
- if (fmXr.clipActionArr.frontDoor && fmXr.clipActionArr.backDoor) {
- fmXr.clipActionArr.frontDoor.reset();
- fmXr.clipActionArr.frontDoor.time = 0.5;
- fmXr.clipActionArr.backDoor.reset();
- fmXr.clipActionArr.backDoor.time = 0.5;
- fmXr.clipActionArr.frontDoor.stop();
- fmXr.clipActionArr.backDoor.stop();
- }
- if (fmXr.frontDamperOpenMesh) fmXr.frontDamperOpenMesh.visible = false;
- if (fmXr.frontDamperClosedMesh) fmXr.frontDamperClosedMesh.visible = true;
- if (fmXr.backDamperOpenMesh) fmXr.backDamperOpenMesh.visible = false;
- if (fmXr.backDamperClosedMesh) fmXr.backDamperClosedMesh.visible = true;
- model.startAnimation = fmXr.render.bind(fmXr);
- model.scene.remove(group);
- group = fmXr.group;
- group.rotation.y = 0;
- const oldCameraPosition = { x: -1000, y: 100, z: 500 };
- setTimeout(async () => {
- resolve(null);
- model.scene.add(fmXr.group);
- await animateCamera(
- oldCameraPosition,
- { x: 0, y: 0, z: 0 },
- { x: 50.99, y: 69.32, z: 93.61 },
- { x: -10.04, y: -14.38, z: -31.4 },
- model,
- 0.8
- );
- }, 300);
- } else if (fmType === 'fmTwoSs' && fmTwoSs && fmTwoSs.group) {
- if (fmTwoSs.clipActionArr.frontDoor && fmTwoSs.clipActionArr.backDoor) {
- fmTwoSs.clipActionArr.frontDoor.reset();
- fmTwoSs.clipActionArr.frontDoor.time = 0.5;
- fmTwoSs.clipActionArr.backDoor.reset();
- fmTwoSs.clipActionArr.backDoor.time = 0.5;
- fmTwoSs.clipActionArr.frontDoor.stop();
- fmTwoSs.clipActionArr.backDoor.stop();
- }
- if (fmTwoSs.frontDamperOpenMesh) fmTwoSs.frontDamperOpenMesh.visible = false;
- if (fmTwoSs.frontDamperClosedMesh) fmTwoSs.frontDamperClosedMesh.visible = true;
- if (fmTwoSs.backDamperOpenMesh) fmTwoSs.backDamperOpenMesh.visible = false;
- if (fmTwoSs.backDamperClosedMesh) fmTwoSs.backDamperClosedMesh.visible = true;
- model.startAnimation = fmTwoSs.render.bind(fmTwoSs);
- model.scene.remove(group);
- group = fmTwoSs.group;
- group.rotation.y = 0;
- const oldCameraPosition = { x: -1000, y: 100, z: 500 };
- setTimeout(async () => {
- resolve(null);
- model.scene.add(fmTwoSs.group);
- await animateCamera(
- oldCameraPosition,
- { x: 0, y: 0, z: 0 },
- { x: 50.99, y: 69.32, z: 93.61 },
- { x: -10.04, y: -14.38, z: -31.4 },
- model,
- 0.8
- );
- }, 300);
- }
- });
- };
- export const initCameraCanvas = async (playerVal1) => {
- if (fmType === 'fm1' && fm1) {
- return await fm1.initCamera.call(fm1, playerVal1);
- } else if (fmType === 'fm2' && fm2) {
- return fm2.initCamera.call(fm2, playerVal1);
- } else if (fmType === 'fm3' && fm3) {
- return fm3.initCamera.call(fm3, playerVal1);
- } else if (fmType === 'fmXr' && fmXr) {
- return fmXr.initCamera.call(fmXr, playerVal1);
- }
- };
- export const mountedThree = (playerDom) => {
- const { sysOrgCode } = useGlobSetting();
- // sysOrgCode = 'yjmdsankuang';
- return new Promise(async (resolve) => {
- model = new UseThree('#damper3D', '', '#deviceDetail');
- model.setEnvMap('test1');
- model.renderer.toneMappingExposure = 1.0;
- model.camera.position.set(100, 0, 1000);
- switch (sysOrgCode) {
- case 'yjmdsankuang': //窑街三矿
- case 'yjmdhswmk': //窑街海石湾
- case 'yjmdjhmk': //窑街金河矿
- const FmYj = await import('./gate.threejs.yj');
- if (FmYj) fm3 = new FmYj.default(model);
- if (fm3) fm3.mountedThree(playerDom);
- const FmTwoYj = await import('./gate.threejs.two.yj');
- if (FmTwoYj) fmTwoSs = new FmTwoYj.default(model);
- fmTwoSs.mountedThree(playerDom);
- // if (FmTwoYj) fm2 = new FmTwoYj.default(model);
- // fm2.mountedThree(playerDom);
- break;
- default:
- fm3 = new Fm3(model);
- fm3.mountedThree(playerDom);
- fmTwoSs = new FmTwoSs(model);
- fmTwoSs.mountedThree(playerDom);
- fm2 = new Fm2(model);
- fm2.mountedThree(playerDom);
- break;
- }
- fmXr = new FmXR(model);
- fmXr.mountedThree(playerDom);
- fm1 = new Fm1(model);
- fm1.mountedThree(playerDom);
- resolve(null);
- model.animate();
- startAnimation();
- });
- };
- export const destroy = () => {
- if (model) {
- model.isRender = false;
- if (fm1) fm1.destroy();
- if (fm2) fm2.destroy();
- if (fm3) fm3.destroy();
- if (fmXr) fmXr.destroy();
- if (fmTwoSs) fmTwoSs.destroy();
- fm1 = null;
- fm2 = null;
- fm3 = null;
- fmXr = null;
- fmTwoSs = null;
- group = null;
- model.mixers = [];
- model.destroy();
- }
- model = null;
- };
|