import * as THREE from 'three'; import UseThree from '../../../../utils/threejs/useThree'; import ChamberBase from './grout.threejs.base'; import BertaiBase from './bertai.threejs.base'; //lxh import { animateCamera } from '/@/utils/threejs/util'; import useEvent from '../../../../utils/threejs/useEvent'; // 模型对象、 文字对象 let model: UseThree | undefined, groutBaseObj: ChamberBase | undefined, BertaiObj: BertaiBase | undefined, //lxh group: THREE.Object3D | undefined, // groutType = 'groutBase'; // workerFaceFiber groutType = 'bertaiBase'; // workerFaceFiber const { mouseDownFn } = useEvent(); // 鼠标点击事件 const mouseEvent = (event) => { if (event.button == 0) { mouseDownFn(model, group, event, (intersects) => { if (groutType === 'groutBase') { // groutBaseObj.mousedownModel.call(groutBaseObj, model.rayCaster); } else if (groutType === 'bertaiBase') { //lxh // BertaiObj.mousedownModel.call(BertaiObj, model.rayCaster); } }); console.log('摄像头控制信息', model?.orbitControls, model?.camera); } }; const addMouseEvent = () => { // 定义鼠标点击事件 model?.canvasContainer?.addEventListener('mousedown', mouseEvent); }; // const render = () => { // if (model && model.isRender) { // model.animationId = requestAnimationFrame(render); // model.css3dRender?.render(model.scene as THREE.Scene, model.camera as THREE.PerspectiveCamera); // model.stats?.update(); // } // }; export const addChamberText = (selectData) => { if (groutType === 'groutBase') { return groutBaseObj?.addChamberText.call(groutBaseObj, selectData); } else if (groutType == 'bertaiBase') { //lxh return BertaiObj?.addChamberText.call(BertaiObj, selectData); } }; // 切换模型类型 export const setModelType = (type) => { groutType = type; return new Promise((resolve) => { if (groutType === 'groutBase' && groutBaseObj && groutBaseObj.group) { group = groutBaseObj.group; const oldCameraPosition = { x: -114.7969, y: 104.0741, z: 303.516 }; model?.scene?.add(groutBaseObj.group); setTimeout(async () => { await animateCamera( oldCameraPosition, { x: 0, y: 0, z: 0 }, { x: -36.224455845316, y: 21.749986776845592, z: -0.10614789855468158 }, { x: 0, y: 0, z: 0 }, model, 0.6 ); }, 300); resolve(null); } else if (groutType === 'bertaiBase' && BertaiObj && BertaiObj.group) { //lxh group = BertaiObj.group; const oldCameraPosition = { x: -114.7969, y: 104.0741, z: 303.516 }; model?.scene?.add(BertaiObj.group); setTimeout(async () => { await animateCamera( oldCameraPosition, { x: 0, y: 0, z: 0 }, { x: 0.06216, y: 17.7679, z: 20.28977 }, { x: 0.12544, y: 2.18736, z: -1.30608 }, model, 0.6 ); }, 300); resolve(null); } }); }; export const mountedThree = () => { return new Promise(async (resolve) => { model = new UseThree('#grout3D'); model.setEnvMap('test1.hdr'); model.renderer.toneMappingExposure = 1.0; model?.camera?.position.set(100, 0, 600); groutBaseObj = new ChamberBase(model); await groutBaseObj.mountedThree(); BertaiObj = new BertaiBase(model); //lxh await BertaiObj.mountedThree(); //lxh addMouseEvent(); model.animate(); resolve(null); }); }; export const destroy = () => { if (model) { model.isRender = false; console.log('场景销毁前信息----------->', model.renderer?.info); groutBaseObj?.destroy(); groutBaseObj = undefined; BertaiObj?.destroy(); BertaiObj = undefined; group = undefined; model.destroy(); model = undefined; } };