@anov/3d 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/anov3d.js +2 -5
- package/dist/anov3d.js.map +1 -1
- package/dist/factory/unit/circle.js +1 -1
- package/dist/factory/unit/circle.js.map +1 -1
- package/dist/factory/unit/cylinder.js +1 -1
- package/dist/factory/unit/cylinder.js.map +1 -1
- package/dist/factory/unit/wall.js +7 -8
- package/dist/factory/unit/wall.js.map +1 -1
- package/dist/module/camera/index.js +2 -0
- package/dist/module/camera/index.js.map +1 -1
- package/package.json +1 -1
package/dist/anov3d.js
CHANGED
|
@@ -16,7 +16,7 @@ import { defaultCameraParams } from "./index";
|
|
|
16
16
|
var RoomEnvironment = lib.RoomEnvironment;
|
|
17
17
|
var Anov3D = /*#__PURE__*/function () {
|
|
18
18
|
function Anov3D(opts) {
|
|
19
|
-
var _camera$fov, _camera$near, _camera$far, _opts$size$width, _opts$size, _opts$size$height, _opts$size2, _opts$size$width2, _opts$size3, _opts$size$height2, _opts$size4, _scene$controls,
|
|
19
|
+
var _camera$fov, _camera$near, _camera$far, _opts$size$width, _opts$size, _opts$size$height, _opts$size2, _opts$size$width2, _opts$size3, _opts$size$height2, _opts$size4, _scene$controls, _opts$camera;
|
|
20
20
|
_classCallCheck(this, Anov3D);
|
|
21
21
|
_defineProperty(this, "opts", void 0);
|
|
22
22
|
_defineProperty(this, "sceneControl", void 0);
|
|
@@ -54,10 +54,7 @@ var Anov3D = /*#__PURE__*/function () {
|
|
|
54
54
|
ambientLight: true
|
|
55
55
|
});
|
|
56
56
|
scene.render(opts.container);
|
|
57
|
-
(_scene$controls = scene.controls) === null || _scene$controls === void 0 ? void 0 : _scene$controls.
|
|
58
|
-
return scene.renderer.render(scene.scene, scene.camera);
|
|
59
|
-
});
|
|
60
|
-
(_scene$controls2 = scene.controls) === null || _scene$controls2 === void 0 ? void 0 : _scene$controls2.target.copy((_opts$camera = opts.camera) !== null && _opts$camera !== void 0 && _opts$camera.target ? new Vector3().fromArray(opts.camera.target) : object2Vector3(defaultCameraParams.lookAt));
|
|
57
|
+
(_scene$controls = scene.controls) === null || _scene$controls === void 0 ? void 0 : _scene$controls.target.copy((_opts$camera = opts.camera) !== null && _opts$camera !== void 0 && _opts$camera.target ? new Vector3().fromArray(opts.camera.target) : object2Vector3(defaultCameraParams.lookAt));
|
|
61
58
|
utils.emitter.emit('scene-completed', scene);
|
|
62
59
|
|
|
63
60
|
// 不考虑 tree-shaking
|
package/dist/anov3d.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PMREMGenerator","SceneControl","Vector3","lib","use","utils","EventBus","EWeatherType","object2Vector3","Model","defaultCameraParams","RoomEnvironment","Anov3D","opts","camera","cameraParams","fov","near","far","position","fromArray","scene","orbitControls","controls","defCameraOps","aspect","size","width","container","clientWidth","height","clientHeight","rendererOps","shadowMap","reset","css2DRenderer","ambientLight","render","
|
|
1
|
+
{"version":3,"names":["PMREMGenerator","SceneControl","Vector3","lib","use","utils","EventBus","EWeatherType","object2Vector3","Model","defaultCameraParams","RoomEnvironment","Anov3D","opts","camera","cameraParams","fov","near","far","position","fromArray","scene","orbitControls","controls","defCameraOps","aspect","size","width","container","clientWidth","height","clientHeight","rendererOps","shadowMap","reset","css2DRenderer","ambientLight","render","target","copy","lookAt","emitter","emit","sceneControl","eventBus","model","load","changeSceneEnvironment","storeManagement","set","openFlag","useScene","renderer","pmremGenerator","compileEquirectangularShader","roomEnvironment","environment","fromScene","texture"],"sources":["../src/anov3d.ts"],"sourcesContent":["import { PMREMGenerator, SceneControl, Vector3, lib, use, utils } from '@anov/3d-core'\nimport EventBus from './module/eventBus'\nimport { EWeatherType } from './module/environment/weather/type'\nimport type { InitOptions } from './applicationApi'\nimport { object2Vector3 } from './utils/index'\nimport Model from './module/model'\nimport { defaultCameraParams } from './index'\n\ntype Anov3DOptions = {\n container: HTMLElement\n size?: {\n width: number\n height: number\n }\n camera?: InitOptions['camera']\n environment?: InitOptions['environment']\n model?: InitOptions['model']\n controls?: InitOptions['controls']\n}\n\nconst { RoomEnvironment } = lib\n\nclass Anov3D {\n opts: Anov3DOptions\n sceneControl: SceneControl\n eventBus: EventBus\n EWeatherType: typeof EWeatherType = EWeatherType\n model: Model\n\n constructor(opts: Anov3DOptions) {\n this.opts = opts\n const { camera = {} } = opts || {}\n\n const cameraParams = {\n fov: camera.fov ?? defaultCameraParams.fov,\n near: camera.near ?? defaultCameraParams.near,\n far: camera.far ?? defaultCameraParams.far,\n position: camera.position ? new Vector3().fromArray(camera.position) : object2Vector3(defaultCameraParams.position),\n }\n\n const scene = new SceneControl({\n orbitControls: opts.controls || { use: true },\n defCameraOps: {\n aspect: (opts?.size?.width ?? opts.container.clientWidth) / (opts?.size?.height ?? opts.container.clientHeight),\n ...cameraParams,\n fov: 60,\n },\n rendererOps: {\n shadowMap: true,\n size: {\n width: opts?.size?.width ?? opts.container.clientWidth,\n height: opts?.size?.height ?? opts.container.clientHeight,\n },\n },\n reset: true,\n css2DRenderer: true,\n ambientLight: true,\n })\n\n scene.render(opts.container)\n\n scene.controls?.target.copy(opts.camera?.target ? new Vector3().fromArray(opts.camera.target) : object2Vector3(defaultCameraParams.lookAt))\n\n utils.emitter.emit('scene-completed', scene)\n\n // 不考虑 tree-shaking\n this.sceneControl = scene\n\n this.eventBus = new EventBus()\n this.model = new Model()\n this.opts.model && (this.model.load(this.opts.model))\n this.changeSceneEnvironment()\n utils.storeManagement.set('event-bus', this.eventBus)\n\n utils.emitter.emit('instantiation-completed', this)\n }\n\n changeSceneEnvironment(openFlag = true) {\n const { renderer, scene } = use.useScene()\n const pmremGenerator = new PMREMGenerator(renderer!)\n pmremGenerator.compileEquirectangularShader()\n const roomEnvironment = new (RoomEnvironment as any)()\n\n if (openFlag)\n scene!.environment = pmremGenerator.fromScene(roomEnvironment, 0.04).texture\n\n else\n scene!.environment = null\n }\n}\n\nexport default Anov3D"],"mappings":"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"}
|
|
@@ -65,7 +65,7 @@ var CircleManage = /*#__PURE__*/function () {
|
|
|
65
65
|
value: function bindEvent(mesh, data) {
|
|
66
66
|
var _this2 = this;
|
|
67
67
|
this.interactionManager.add(mesh);
|
|
68
|
-
var skewing = new Vector3(0,
|
|
68
|
+
var skewing = new Vector3(0, 7.5, 0); // 偏移量
|
|
69
69
|
|
|
70
70
|
var showPeoplePoi = function showPeoplePoi(data) {
|
|
71
71
|
if (_this2.peoplePoi) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Mesh","MeshPhysicalMaterial","SphereGeometry","Vector3","utils","EPoiType","Poi","regionMap","emitter","CircleManage","gobal","Map","scene","interactionManager","storeManagement","get","belongTo","geometry","material","color","metalness","roughness","circle","data","getData","forEach","people","mesh","clone","name","id","position","fromArray","add","bindEvent","circleMesh","set","removeFromParent","clear","peoplePoi","visible","poi","skewing","showPeoplePoi","Base","create","copy","addEventListener","cameraUtil","target","then","emit","regionKey","Object","keys","find","key"],"sources":["../../../src/factory/unit/circle.ts"],"sourcesContent":["import { DoubleSide, Mesh, MeshBasicMaterial, MeshPhongMaterial, MeshPhysicalMaterial, SphereGeometry, Vector3, utils } from '@anov/3d-core'\nimport type { InteractionManager, Object3D, Scene } from '@anov/3d-core'\nimport { EPoiType, Poi } from '@anov/3d-ability'\nimport type Factory3D from '../3d'\nimport { regionMap } from '../regionData'\nimport { MessageType, sendToMessage } from '../../utils/messageFn'\nimport { EMessageStatus } from '../../messageStatus'\n\nconst { emitter } = utils\n\nclass CircleManage {\n private gobal: Factory3D\n private scene: Scene\n readonly circleMesh: Map<string, Object3D> = new Map()\n private interactionManager\n private peoplePoi!: Object3D | null\n\n constructor(gobal: Factory3D) {\n this.gobal = gobal\n this.scene = gobal.scene.scene\n this.interactionManager = utils.storeManagement.get<InteractionManager>('interactionManager')\n }\n\n generateCircle(belongTo: string) {\n const geometry = new SphereGeometry(2, 32, 16)\n const material = new MeshPhysicalMaterial({ color: 0xFED602, metalness: 0.1, roughness: 0.5 })\n const circle = new Mesh(geometry, material)\n\n const data = this.getData(belongTo)\n data.forEach((people) => {\n const mesh = circle.clone()\n mesh.name = people.id\n mesh.position.fromArray(people.position)\n this.scene.add(mesh)\n this.bindEvent(mesh, people)\n this.circleMesh.set(people.id, mesh)\n })\n }\n\n remove() {\n this.circleMesh.forEach((mesh) => {\n mesh.removeFromParent()\n })\n this.circleMesh.clear()\n this.peoplePoi && this.peoplePoi.removeFromParent()\n }\n\n setVisible(visible = true) {\n // 控制CYCLE的隐藏、显示\n this.circleMesh.forEach((poi) => {\n poi.visible = visible\n })\n }\n\n private bindEvent(mesh: Mesh, data) {\n this.interactionManager.add(mesh)\n const skewing = new Vector3(0,
|
|
1
|
+
{"version":3,"names":["Mesh","MeshPhysicalMaterial","SphereGeometry","Vector3","utils","EPoiType","Poi","regionMap","emitter","CircleManage","gobal","Map","scene","interactionManager","storeManagement","get","belongTo","geometry","material","color","metalness","roughness","circle","data","getData","forEach","people","mesh","clone","name","id","position","fromArray","add","bindEvent","circleMesh","set","removeFromParent","clear","peoplePoi","visible","poi","skewing","showPeoplePoi","Base","create","copy","addEventListener","cameraUtil","target","then","emit","regionKey","Object","keys","find","key"],"sources":["../../../src/factory/unit/circle.ts"],"sourcesContent":["import { DoubleSide, Mesh, MeshBasicMaterial, MeshPhongMaterial, MeshPhysicalMaterial, SphereGeometry, Vector3, utils } from '@anov/3d-core'\nimport type { InteractionManager, Object3D, Scene } from '@anov/3d-core'\nimport { EPoiType, Poi } from '@anov/3d-ability'\nimport type Factory3D from '../3d'\nimport { regionMap } from '../regionData'\nimport { MessageType, sendToMessage } from '../../utils/messageFn'\nimport { EMessageStatus } from '../../messageStatus'\n\nconst { emitter } = utils\n\nclass CircleManage {\n private gobal: Factory3D\n private scene: Scene\n readonly circleMesh: Map<string, Object3D> = new Map()\n private interactionManager\n private peoplePoi!: Object3D | null\n\n constructor(gobal: Factory3D) {\n this.gobal = gobal\n this.scene = gobal.scene.scene\n this.interactionManager = utils.storeManagement.get<InteractionManager>('interactionManager')\n }\n\n generateCircle(belongTo: string) {\n const geometry = new SphereGeometry(2, 32, 16)\n const material = new MeshPhysicalMaterial({ color: 0xFED602, metalness: 0.1, roughness: 0.5 })\n const circle = new Mesh(geometry, material)\n\n const data = this.getData(belongTo)\n data.forEach((people) => {\n const mesh = circle.clone()\n mesh.name = people.id\n mesh.position.fromArray(people.position)\n this.scene.add(mesh)\n this.bindEvent(mesh, people)\n this.circleMesh.set(people.id, mesh)\n })\n }\n\n remove() {\n this.circleMesh.forEach((mesh) => {\n mesh.removeFromParent()\n })\n this.circleMesh.clear()\n this.peoplePoi && this.peoplePoi.removeFromParent()\n }\n\n setVisible(visible = true) {\n // 控制CYCLE的隐藏、显示\n this.circleMesh.forEach((poi) => {\n poi.visible = visible\n })\n }\n\n private bindEvent(mesh: Mesh, data) {\n this.interactionManager.add(mesh)\n const skewing = new Vector3(0, 7.5, 0) // 偏移量\n\n const showPeoplePoi = (data: any) => {\n if (this.peoplePoi) {\n if (this.peoplePoi.name !== data.id)\n this.peoplePoi.removeFromParent()\n else\n return\n }\n const poi = new Poi(EPoiType.Base)\n this.peoplePoi = poi.create(data.name)\n this.peoplePoi.name = data.id\n\n this.peoplePoi.position.copy(mesh.position.clone().add(skewing))\n this.scene.add(this.peoplePoi)\n }\n\n mesh.addEventListener('click', () => {\n this.gobal.cameraUtil.set({\n position: [data.position[0], data.position[1] + 10, data.position[2] + 30],\n target: [data.position[0], data.position[1], data.position[2]],\n }).then(() => {\n })\n showPeoplePoi(data)\n })\n mesh.addEventListener('mouseover', () => {\n showPeoplePoi(data)\n emitter.emit('peoplemanagement-person-click', data)\n })\n mesh.addEventListener('mouseout', () => {\n if (this.peoplePoi) {\n this.peoplePoi.removeFromParent()\n this.peoplePoi = null\n }\n })\n }\n\n private getData(belongTo) {\n const regionKey = Object.keys(regionMap).find((key: any) => {\n return regionMap[key].id === belongTo\n })\n\n return regionMap[regionKey] && regionMap[regionKey].people\n }\n}\n\nexport default CircleManage"],"mappings":"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"}
|
|
@@ -117,7 +117,7 @@ var CylinderManage = /*#__PURE__*/function () {
|
|
|
117
117
|
});
|
|
118
118
|
var cylinder = new Mesh(geometry, material);
|
|
119
119
|
var group = new Group();
|
|
120
|
-
|
|
120
|
+
group.name = item.title;
|
|
121
121
|
group.visible = (_this2$option$visible = (_this2$option = _this2.option) === null || _this2$option === void 0 ? void 0 : _this2$option.visible) !== null && _this2$option$visible !== void 0 ? _this2$option$visible : true;
|
|
122
122
|
cylinder.position.copy(new Vector3().fromArray([item.points[0], item.points[1] + item.height / 2, item.points[2]]));
|
|
123
123
|
var interactionManager = utils.storeManagement.get('interactionManager');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BoxGeometry","Color","Group","Mesh","ShaderMaterial","Vector3","globalObjectManage","use","utils","createFontMesh","SceneStyle","regionMap","collisionDetection","lookAtOnYAxis","emitter","cylinderData","label","id","title","reform","belongTo","color","getHex","points","poi","position","height","reduction","crudeOil","catalyticCracking","hydrocrackingUnit","cokingUnit","administrative","CylinderManage","gobal","options","Map","currentCameraPosition","control","object","box","areaBoundingBox","boundingBoxMap","get","currentoperate","iscollision","emit","cameraRemoveListener","scene","option","forEach","item","geometry","material","transparent","depthWrite","depthTest","uniforms","uHeight","value","uColor","vertexShader","fragmentShader","cylinder","group","name","visible","copy","fromArray","interactionManager","storeManagement","add","addEventListener","style","real","cameraUtil","set","target","then","currentGroup","cylinderMesh","cameraAddListener","font","mesh","center","useframe","camera","controlAddListener","cameraListenerHandle","maxDistance","controls","getDistance","removeEventListener"],"sources":["../../../src/factory/unit/cylinder.ts"],"sourcesContent":["import type { InteractionManager, Object3D, Scene } from '@anov/3d-core'\nimport { BoxGeometry, Color, Group, Mesh, ShaderMaterial, Vector3, globalObjectManage, use, utils } from '@anov/3d-core'\nimport createFontMesh from '../utils/fontMesh'\nimport type Factory3D from '../3d'\nimport { SceneStyle } from '../utils/constant'\nimport regionMap from '../regionData'\nimport { collisionDetection } from '../utils/areaBoundingBox'\n\nimport { lookAtOnYAxis } from '../utils'\n\nconst { emitter } = utils\n\nconst cylinderData = [\n {\n label: '8人',\n id: '1',\n title: regionMap.reform.title,\n belongTo: regionMap.reform.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.reform.poi.position,\n height: 80,\n },\n {\n label: '7人',\n id: '2',\n title: regionMap.reduction.title,\n belongTo: regionMap.reduction.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.reduction.poi.position,\n height: 70,\n },\n {\n label: '4人',\n id: '3',\n title: regionMap.crudeOil.title,\n belongTo: regionMap.crudeOil.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.crudeOil.poi.position,\n height: 40,\n },\n {\n label: '10人',\n id: '4',\n title: regionMap.catalyticCracking.title,\n belongTo: regionMap.catalyticCracking.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.catalyticCracking.poi.position,\n height: 100,\n },\n {\n label: '3人',\n id: '5',\n title: regionMap.hydrocrackingUnit.title,\n belongTo: regionMap.hydrocrackingUnit.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.hydrocrackingUnit.poi.position,\n height: 30,\n },\n {\n label: '8人',\n id: '6',\n title: regionMap.cokingUnit.title,\n belongTo: regionMap.cokingUnit.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.cokingUnit.poi.position,\n height: 80,\n },\n {\n label: '20人',\n id: '7',\n title: regionMap.administrative.title,\n belongTo: regionMap.administrative.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.administrative.poi.position,\n height: 150,\n },\n]\n\ntype CylinderManageOption = {\n visible?: boolean\n}\n\nclass CylinderManage {\n private scene: Scene\n readonly cylinderMesh: Map<string, Object3D> = new Map()\n private option: CylinderManageOption\n private gobal: Factory3D\n private currentoperate: string = cylinderData[0].belongTo\n\n constructor(gobal: Factory3D, options?: CylinderManageOption) {\n this.scene = gobal.scene.scene\n this.gobal = gobal\n this.option = options || {}\n }\n\n generateCylinder() {\n cylinderData.forEach((item) => {\n const geometry = new BoxGeometry(10, item.height, 10)\n const material = new ShaderMaterial({\n transparent: true,\n depthWrite: false,\n depthTest: false,\n uniforms: {\n uHeight: {\n value: item.height,\n },\n uColor: {\n value: new Color(item.color),\n },\n },\n vertexShader: `\n uniform float uHeight;\n varying float vOpacity;\n void main() {\n vOpacity = (position.y + uHeight/2.0) / uHeight;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n }\n `,\n fragmentShader: `\n uniform vec3 uColor;\n varying float vOpacity;\n void main() {\n gl_FragColor = vec4(uColor,0.3+vOpacity/10.0*7.0);\n }\n `,\n })\n const cylinder = new Mesh(geometry, material)\n const group = new Group()\n cylinder.name = item.title\n\n group.visible = this.option?.visible ?? true\n cylinder.position.copy(new Vector3().fromArray([item.points[0], item.points[1] + item.height / 2, item.points[2]]))\n\n const interactionManager = utils.storeManagement.get<InteractionManager>('interactionManager')\n interactionManager.add(group)\n\n group.addEventListener('click', () => {\n if (this.gobal.style === SceneStyle.real)\n return\n\n if (group.visible === false)\n return\n\n this.gobal.cameraUtil.set({\n position: [item.points[0], item.points[1] + item.height / 2, item.points[2] + 100],\n target: [item.points[0], item.points[1] + item.height / 2, item.points[2]],\n }).then(() => {\n emitter.emit('peoplemanagement-camera-enter', item)\n const currentGroup = this.cylinderMesh.get(item.belongTo) as Group\n currentGroup.visible = false\n\n this.currentoperate = item.belongTo\n this.cameraAddListener()\n })\n })\n this.cylinderMesh.set(item.belongTo, group)\n group.add(cylinder)\n\n const font = createFontMesh(item.label, {\n position: new Vector3().fromArray([item.points[0], item.points[1] + item.height + 10, item.points[2]]),\n })\n\n font.then((mesh) => {\n mesh.geometry.center()\n\n group.add(mesh)\n\n use.useframe(() => {\n lookAtOnYAxis(mesh, globalObjectManage.camera.position)\n })\n this.scene.add(group)\n })\n })\n this.controlAddListener()\n }\n\n private cameraListenerHandle = () => {\n const currentCameraPosition = this.gobal.control.object.position\n const box = this.gobal.areaBoundingBox.boundingBoxMap.get(this.currentoperate)\n const iscollision = collisionDetection(box, currentCameraPosition)\n if (!iscollision) {\n emitter.emit('peoplemanagement-camera-out', {\n belongTo: this.currentoperate,\n })\n\n this.cameraRemoveListener()\n }\n }\n\n private cameraAddListener() {\n this.gobal.control.addEventListener('change', this.cameraListenerHandle)\n }\n\n private controlAddListener() {\n const maxDistance = this.gobal.option.controls.maxDistance\n maxDistance && this.gobal.control.addEventListener('change', () => {\n if (this.gobal.control.getDistance() >= maxDistance - 5)\n emitter.emit('peoplemanagement-control-maxDistance', null)\n })\n }\n\n private cameraRemoveListener() {\n this.gobal.control.removeEventListener('change', this.cameraListenerHandle)\n }\n}\n\nexport default CylinderManage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["BoxGeometry","Color","Group","Mesh","ShaderMaterial","Vector3","globalObjectManage","use","utils","createFontMesh","SceneStyle","regionMap","collisionDetection","lookAtOnYAxis","emitter","cylinderData","label","id","title","reform","belongTo","color","getHex","points","poi","position","height","reduction","crudeOil","catalyticCracking","hydrocrackingUnit","cokingUnit","administrative","CylinderManage","gobal","options","Map","currentCameraPosition","control","object","box","areaBoundingBox","boundingBoxMap","get","currentoperate","iscollision","emit","cameraRemoveListener","scene","option","forEach","item","geometry","material","transparent","depthWrite","depthTest","uniforms","uHeight","value","uColor","vertexShader","fragmentShader","cylinder","group","name","visible","copy","fromArray","interactionManager","storeManagement","add","addEventListener","style","real","cameraUtil","set","target","then","currentGroup","cylinderMesh","cameraAddListener","font","mesh","center","useframe","camera","controlAddListener","cameraListenerHandle","maxDistance","controls","getDistance","removeEventListener"],"sources":["../../../src/factory/unit/cylinder.ts"],"sourcesContent":["import type { InteractionManager, Object3D, Scene } from '@anov/3d-core'\nimport { BoxGeometry, Color, Group, Mesh, ShaderMaterial, Vector3, globalObjectManage, use, utils } from '@anov/3d-core'\nimport createFontMesh from '../utils/fontMesh'\nimport type Factory3D from '../3d'\nimport { SceneStyle } from '../utils/constant'\nimport regionMap from '../regionData'\nimport { collisionDetection } from '../utils/areaBoundingBox'\n\nimport { lookAtOnYAxis } from '../utils'\n\nconst { emitter } = utils\n\nconst cylinderData = [\n {\n label: '8人',\n id: '1',\n title: regionMap.reform.title,\n belongTo: regionMap.reform.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.reform.poi.position,\n height: 80,\n },\n {\n label: '7人',\n id: '2',\n title: regionMap.reduction.title,\n belongTo: regionMap.reduction.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.reduction.poi.position,\n height: 70,\n },\n {\n label: '4人',\n id: '3',\n title: regionMap.crudeOil.title,\n belongTo: regionMap.crudeOil.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.crudeOil.poi.position,\n height: 40,\n },\n {\n label: '10人',\n id: '4',\n title: regionMap.catalyticCracking.title,\n belongTo: regionMap.catalyticCracking.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.catalyticCracking.poi.position,\n height: 100,\n },\n {\n label: '3人',\n id: '5',\n title: regionMap.hydrocrackingUnit.title,\n belongTo: regionMap.hydrocrackingUnit.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.hydrocrackingUnit.poi.position,\n height: 30,\n },\n {\n label: '8人',\n id: '6',\n title: regionMap.cokingUnit.title,\n belongTo: regionMap.cokingUnit.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.cokingUnit.poi.position,\n height: 80,\n },\n {\n label: '20人',\n id: '7',\n title: regionMap.administrative.title,\n belongTo: regionMap.administrative.id,\n color: new Color('#FED602').getHex(),\n points: regionMap.administrative.poi.position,\n height: 150,\n },\n]\n\ntype CylinderManageOption = {\n visible?: boolean\n}\n\nclass CylinderManage {\n private scene: Scene\n readonly cylinderMesh: Map<string, Object3D> = new Map()\n private option: CylinderManageOption\n private gobal: Factory3D\n private currentoperate: string = cylinderData[0].belongTo\n\n constructor(gobal: Factory3D, options?: CylinderManageOption) {\n this.scene = gobal.scene.scene\n this.gobal = gobal\n this.option = options || {}\n }\n\n generateCylinder() {\n cylinderData.forEach((item) => {\n const geometry = new BoxGeometry(10, item.height, 10)\n const material = new ShaderMaterial({\n transparent: true,\n depthWrite: false,\n depthTest: false,\n uniforms: {\n uHeight: {\n value: item.height,\n },\n uColor: {\n value: new Color(item.color),\n },\n },\n vertexShader: `\n uniform float uHeight;\n varying float vOpacity;\n void main() {\n vOpacity = (position.y + uHeight/2.0) / uHeight;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n }\n `,\n fragmentShader: `\n uniform vec3 uColor;\n varying float vOpacity;\n void main() {\n gl_FragColor = vec4(uColor,0.3+vOpacity/10.0*7.0);\n }\n `,\n })\n const cylinder = new Mesh(geometry, material)\n const group = new Group()\n group.name = item.title\n\n group.visible = this.option?.visible ?? true\n cylinder.position.copy(new Vector3().fromArray([item.points[0], item.points[1] + item.height / 2, item.points[2]]))\n\n const interactionManager = utils.storeManagement.get<InteractionManager>('interactionManager')\n interactionManager.add(group)\n\n group.addEventListener('click', () => {\n if (this.gobal.style === SceneStyle.real)\n return\n\n if (group.visible === false)\n return\n\n this.gobal.cameraUtil.set({\n position: [item.points[0], item.points[1] + item.height / 2, item.points[2] + 100],\n target: [item.points[0], item.points[1] + item.height / 2, item.points[2]],\n }).then(() => {\n emitter.emit('peoplemanagement-camera-enter', item)\n const currentGroup = this.cylinderMesh.get(item.belongTo) as Group\n currentGroup.visible = false\n\n this.currentoperate = item.belongTo\n this.cameraAddListener()\n })\n })\n this.cylinderMesh.set(item.belongTo, group)\n group.add(cylinder)\n\n const font = createFontMesh(item.label, {\n position: new Vector3().fromArray([item.points[0], item.points[1] + item.height + 10, item.points[2]]),\n })\n\n font.then((mesh) => {\n mesh.geometry.center()\n\n group.add(mesh)\n\n use.useframe(() => {\n lookAtOnYAxis(mesh, globalObjectManage.camera.position)\n })\n this.scene.add(group)\n })\n })\n this.controlAddListener()\n }\n\n private cameraListenerHandle = () => {\n const currentCameraPosition = this.gobal.control.object.position\n const box = this.gobal.areaBoundingBox.boundingBoxMap.get(this.currentoperate)\n const iscollision = collisionDetection(box, currentCameraPosition)\n if (!iscollision) {\n emitter.emit('peoplemanagement-camera-out', {\n belongTo: this.currentoperate,\n })\n\n this.cameraRemoveListener()\n }\n }\n\n private cameraAddListener() {\n this.gobal.control.addEventListener('change', this.cameraListenerHandle)\n }\n\n private controlAddListener() {\n const maxDistance = this.gobal.option.controls.maxDistance\n maxDistance && this.gobal.control.addEventListener('change', () => {\n if (this.gobal.control.getDistance() >= maxDistance - 5)\n emitter.emit('peoplemanagement-control-maxDistance', null)\n })\n }\n\n private cameraRemoveListener() {\n this.gobal.control.removeEventListener('change', this.cameraListenerHandle)\n }\n}\n\nexport default CylinderManage"],"mappings":";;;;;;;AACA,SAASA,WAAW,EAAEC,KAAK,EAAEC,KAAK,EAAEC,IAAI,EAAEC,cAAc,EAAEC,OAAO,EAAEC,kBAAkB,EAAEC,GAAG,EAAEC,KAAK,QAAQ,eAAe;AACxH,OAAOC,cAAc;AAErB,SAASC,UAAU;AACnB,OAAOC,SAAS;AAChB,SAASC,kBAAkB;AAE3B,SAASC,aAAa;AAEtB,IAAQC,OAAO,GAAKN,KAAK,CAAjBM,OAAO;AAEf,IAAMC,YAAY,GAAG,CACnB;EACEC,KAAK,EAAE,IAAI;EACXC,EAAE,EAAE,GAAG;EACPC,KAAK,EAAEP,SAAS,CAACQ,MAAM,CAACD,KAAK;EAC7BE,QAAQ,EAAET,SAAS,CAACQ,MAAM,CAACF,EAAE;EAC7BI,KAAK,EAAE,IAAIpB,KAAK,CAAC,SAAS,CAAC,CAACqB,MAAM,EAAE;EACpCC,MAAM,EAAEZ,SAAS,CAACQ,MAAM,CAACK,GAAG,CAACC,QAAQ;EACrCC,MAAM,EAAE;AACV,CAAC,EACD;EACEV,KAAK,EAAE,IAAI;EACXC,EAAE,EAAE,GAAG;EACPC,KAAK,EAAEP,SAAS,CAACgB,SAAS,CAACT,KAAK;EAChCE,QAAQ,EAAET,SAAS,CAACgB,SAAS,CAACV,EAAE;EAChCI,KAAK,EAAE,IAAIpB,KAAK,CAAC,SAAS,CAAC,CAACqB,MAAM,EAAE;EACpCC,MAAM,EAAEZ,SAAS,CAACgB,SAAS,CAACH,GAAG,CAACC,QAAQ;EACxCC,MAAM,EAAE;AACV,CAAC,EACD;EACEV,KAAK,EAAE,IAAI;EACXC,EAAE,EAAE,GAAG;EACPC,KAAK,EAAEP,SAAS,CAACiB,QAAQ,CAACV,KAAK;EAC/BE,QAAQ,EAAET,SAAS,CAACiB,QAAQ,CAACX,EAAE;EAC/BI,KAAK,EAAE,IAAIpB,KAAK,CAAC,SAAS,CAAC,CAACqB,MAAM,EAAE;EACpCC,MAAM,EAAEZ,SAAS,CAACiB,QAAQ,CAACJ,GAAG,CAACC,QAAQ;EACvCC,MAAM,EAAE;AACV,CAAC,EACD;EACEV,KAAK,EAAE,KAAK;EACZC,EAAE,EAAE,GAAG;EACPC,KAAK,EAAEP,SAAS,CAACkB,iBAAiB,CAACX,KAAK;EACxCE,QAAQ,EAAET,SAAS,CAACkB,iBAAiB,CAACZ,EAAE;EACxCI,KAAK,EAAE,IAAIpB,KAAK,CAAC,SAAS,CAAC,CAACqB,MAAM,EAAE;EACpCC,MAAM,EAAEZ,SAAS,CAACkB,iBAAiB,CAACL,GAAG,CAACC,QAAQ;EAChDC,MAAM,EAAE;AACV,CAAC,EACD;EACEV,KAAK,EAAE,IAAI;EACXC,EAAE,EAAE,GAAG;EACPC,KAAK,EAAEP,SAAS,CAACmB,iBAAiB,CAACZ,KAAK;EACxCE,QAAQ,EAAET,SAAS,CAACmB,iBAAiB,CAACb,EAAE;EACxCI,KAAK,EAAE,IAAIpB,KAAK,CAAC,SAAS,CAAC,CAACqB,MAAM,EAAE;EACpCC,MAAM,EAAEZ,SAAS,CAACmB,iBAAiB,CAACN,GAAG,CAACC,QAAQ;EAChDC,MAAM,EAAE;AACV,CAAC,EACD;EACEV,KAAK,EAAE,IAAI;EACXC,EAAE,EAAE,GAAG;EACPC,KAAK,EAAEP,SAAS,CAACoB,UAAU,CAACb,KAAK;EACjCE,QAAQ,EAAET,SAAS,CAACoB,UAAU,CAACd,EAAE;EACjCI,KAAK,EAAE,IAAIpB,KAAK,CAAC,SAAS,CAAC,CAACqB,MAAM,EAAE;EACpCC,MAAM,EAAEZ,SAAS,CAACoB,UAAU,CAACP,GAAG,CAACC,QAAQ;EACzCC,MAAM,EAAE;AACV,CAAC,EACD;EACEV,KAAK,EAAE,KAAK;EACZC,EAAE,EAAE,GAAG;EACPC,KAAK,EAAEP,SAAS,CAACqB,cAAc,CAACd,KAAK;EACrCE,QAAQ,EAAET,SAAS,CAACqB,cAAc,CAACf,EAAE;EACrCI,KAAK,EAAE,IAAIpB,KAAK,CAAC,SAAS,CAAC,CAACqB,MAAM,EAAE;EACpCC,MAAM,EAAEZ,SAAS,CAACqB,cAAc,CAACR,GAAG,CAACC,QAAQ;EAC7CC,MAAM,EAAE;AACV,CAAC,CACF;AAAA,IAMKO,cAAc;EAOlB,wBAAYC,KAAgB,EAAEC,OAA8B,EAAE;IAAA;IAAA;IAAA;IAAA,sCALf,IAAIC,GAAG,EAAE;IAAA;IAAA;IAAA,wCAGvBrB,YAAY,CAAC,CAAC,CAAC,CAACK,QAAQ;IAAA,8CAyF1B,YAAM;MACnC,IAAMiB,qBAAqB,GAAG,KAAI,CAACH,KAAK,CAACI,OAAO,CAACC,MAAM,CAACd,QAAQ;MAChE,IAAMe,GAAG,GAAG,KAAI,CAACN,KAAK,CAACO,eAAe,CAACC,cAAc,CAACC,GAAG,CAAC,KAAI,CAACC,cAAc,CAAC;MAC9E,IAAMC,WAAW,GAAGjC,kBAAkB,CAAC4B,GAAG,EAAEH,qBAAqB,CAAC;MAClE,IAAI,CAACQ,WAAW,EAAE;QAChB/B,OAAO,CAACgC,IAAI,CAAC,6BAA6B,EAAE;UAC1C1B,QAAQ,EAAE,KAAI,CAACwB;QACjB,CAAC,CAAC;QAEF,KAAI,CAACG,oBAAoB,EAAE;MAC7B;IACF,CAAC;IAjGC,IAAI,CAACC,KAAK,GAAGd,KAAK,CAACc,KAAK,CAACA,KAAK;IAC9B,IAAI,CAACd,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACe,MAAM,GAAGd,OAAO,IAAI,CAAC,CAAC;EAC7B;EAAC;IAAA;IAAA,OAED,4BAAmB;MAAA;MACjBpB,YAAY,CAACmC,OAAO,CAAC,UAACC,IAAI,EAAK;QAAA;QAC7B,IAAMC,QAAQ,GAAG,IAAIpD,WAAW,CAAC,EAAE,EAAEmD,IAAI,CAACzB,MAAM,EAAE,EAAE,CAAC;QACrD,IAAM2B,QAAQ,GAAG,IAAIjD,cAAc,CAAC;UAClCkD,WAAW,EAAE,IAAI;UACjBC,UAAU,EAAE,KAAK;UACjBC,SAAS,EAAE,KAAK;UAChBC,QAAQ,EAAE;YACRC,OAAO,EAAE;cACPC,KAAK,EAAER,IAAI,CAACzB;YACd,CAAC;YACDkC,MAAM,EAAE;cACND,KAAK,EAAE,IAAI1D,KAAK,CAACkD,IAAI,CAAC9B,KAAK;YAC7B;UACF,CAAC;UACDwC,YAAY,2NAOX;UACDC,cAAc;QAOhB,CAAC,CAAC;QACF,IAAMC,QAAQ,GAAG,IAAI5D,IAAI,CAACiD,QAAQ,EAAEC,QAAQ,CAAC;QAC7C,IAAMW,KAAK,GAAG,IAAI9D,KAAK,EAAE;QACzB8D,KAAK,CAACC,IAAI,GAAGd,IAAI,CAACjC,KAAK;QAEvB8C,KAAK,CAACE,OAAO,6CAAG,MAAI,CAACjB,MAAM,kDAAX,cAAaiB,OAAO,yEAAI,IAAI;QAC5CH,QAAQ,CAACtC,QAAQ,CAAC0C,IAAI,CAAC,IAAI9D,OAAO,EAAE,CAAC+D,SAAS,CAAC,CAACjB,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,EAAE4B,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,GAAG4B,IAAI,CAACzB,MAAM,GAAG,CAAC,EAAEyB,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnH,IAAM8C,kBAAkB,GAAG7D,KAAK,CAAC8D,eAAe,CAAC3B,GAAG,CAAqB,oBAAoB,CAAC;QAC9F0B,kBAAkB,CAACE,GAAG,CAACP,KAAK,CAAC;QAE7BA,KAAK,CAACQ,gBAAgB,CAAC,OAAO,EAAE,YAAM;UACpC,IAAI,MAAI,CAACtC,KAAK,CAACuC,KAAK,KAAK/D,UAAU,CAACgE,IAAI,EACtC;UAEF,IAAIV,KAAK,CAACE,OAAO,KAAK,KAAK,EACzB;UAEF,MAAI,CAAChC,KAAK,CAACyC,UAAU,CAACC,GAAG,CAAC;YACxBnD,QAAQ,EAAE,CAAC0B,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,EAAE4B,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,GAAG4B,IAAI,CAACzB,MAAM,GAAG,CAAC,EAAEyB,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAClFsD,MAAM,EAAE,CAAC1B,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,EAAE4B,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,GAAG4B,IAAI,CAACzB,MAAM,GAAG,CAAC,EAAEyB,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC;UAC3E,CAAC,CAAC,CAACuD,IAAI,CAAC,YAAM;YACZhE,OAAO,CAACgC,IAAI,CAAC,+BAA+B,EAAEK,IAAI,CAAC;YACnD,IAAM4B,YAAY,GAAG,MAAI,CAACC,YAAY,CAACrC,GAAG,CAACQ,IAAI,CAAC/B,QAAQ,CAAU;YAClE2D,YAAY,CAACb,OAAO,GAAG,KAAK;YAE5B,MAAI,CAACtB,cAAc,GAAGO,IAAI,CAAC/B,QAAQ;YACnC,MAAI,CAAC6D,iBAAiB,EAAE;UAC1B,CAAC,CAAC;QACJ,CAAC,CAAC;QACF,MAAI,CAACD,YAAY,CAACJ,GAAG,CAACzB,IAAI,CAAC/B,QAAQ,EAAE4C,KAAK,CAAC;QAC3CA,KAAK,CAACO,GAAG,CAACR,QAAQ,CAAC;QAEnB,IAAMmB,IAAI,GAAGzE,cAAc,CAAC0C,IAAI,CAACnC,KAAK,EAAE;UACtCS,QAAQ,EAAE,IAAIpB,OAAO,EAAE,CAAC+D,SAAS,CAAC,CAACjB,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,EAAE4B,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,GAAG4B,IAAI,CAACzB,MAAM,GAAG,EAAE,EAAEyB,IAAI,CAAC5B,MAAM,CAAC,CAAC,CAAC,CAAC;QACvG,CAAC,CAAC;QAEF2D,IAAI,CAACJ,IAAI,CAAC,UAACK,IAAI,EAAK;UAClBA,IAAI,CAAC/B,QAAQ,CAACgC,MAAM,EAAE;UAEtBpB,KAAK,CAACO,GAAG,CAACY,IAAI,CAAC;UAEf5E,GAAG,CAAC8E,QAAQ,CAAC,YAAM;YACjBxE,aAAa,CAACsE,IAAI,EAAE7E,kBAAkB,CAACgF,MAAM,CAAC7D,QAAQ,CAAC;UACzD,CAAC,CAAC;UACF,MAAI,CAACuB,KAAK,CAACuB,GAAG,CAACP,KAAK,CAAC;QACvB,CAAC,CAAC;MACJ,CAAC,CAAC;MACF,IAAI,CAACuB,kBAAkB,EAAE;IAC3B;EAAC;IAAA;IAAA,OAeD,6BAA4B;MAC1B,IAAI,CAACrD,KAAK,CAACI,OAAO,CAACkC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACgB,oBAAoB,CAAC;IAC1E;EAAC;IAAA;IAAA,OAED,8BAA6B;MAAA;MAC3B,IAAMC,WAAW,GAAG,IAAI,CAACvD,KAAK,CAACe,MAAM,CAACyC,QAAQ,CAACD,WAAW;MAC1DA,WAAW,IAAI,IAAI,CAACvD,KAAK,CAACI,OAAO,CAACkC,gBAAgB,CAAC,QAAQ,EAAE,YAAM;QACjE,IAAI,MAAI,CAACtC,KAAK,CAACI,OAAO,CAACqD,WAAW,EAAE,IAAIF,WAAW,GAAG,CAAC,EACrD3E,OAAO,CAACgC,IAAI,CAAC,sCAAsC,EAAE,IAAI,CAAC;MAC9D,CAAC,CAAC;IACJ;EAAC;IAAA;IAAA,OAED,gCAA+B;MAC7B,IAAI,CAACZ,KAAK,CAACI,OAAO,CAACsD,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACJ,oBAAoB,CAAC;IAC7E;EAAC;EAAA;AAAA;AAGH,eAAevD,cAAc"}
|
|
@@ -6,7 +6,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
6
6
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
7
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
8
|
import { createRoundLineWallMesh } from '@anov/3d-ability';
|
|
9
|
-
import { ShaderMaterial, Vector3 } from '@anov/3d-core';
|
|
9
|
+
import { Color, ShaderMaterial, Vector3 } from '@anov/3d-core';
|
|
10
10
|
import regionMap from "../regionData";
|
|
11
11
|
|
|
12
12
|
// import wallVertexShader from './glsl/wall/vertexShader.glsl'
|
|
@@ -66,10 +66,10 @@ var walllMaterial = new ShaderMaterial({
|
|
|
66
66
|
value: 0.2
|
|
67
67
|
},
|
|
68
68
|
color1: {
|
|
69
|
-
value:
|
|
69
|
+
value: new Color('#ACFEFE')
|
|
70
70
|
},
|
|
71
71
|
color2: {
|
|
72
|
-
value:
|
|
72
|
+
value: new Color('#ACFEFE')
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
vertexShader: "varying vec2 vUv;\n\n void main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }",
|
|
@@ -92,11 +92,10 @@ var WallManage = /*#__PURE__*/function () {
|
|
|
92
92
|
key: "generateWall",
|
|
93
93
|
value: function generateWall() {
|
|
94
94
|
var _this = this;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
setInterval(function () {
|
|
96
|
+
_this.time += 0.0005;
|
|
97
|
+
walllMaterial.uniforms.iTime.value = _this.time;
|
|
98
|
+
});
|
|
100
99
|
wallPosition.forEach(function (item) {
|
|
101
100
|
var _this$option$visible, _this$option;
|
|
102
101
|
var roundLineMesh = createRoundLineWallMesh(item.points.map(function (v) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createRoundLineWallMesh","ShaderMaterial","Vector3","regionMap","wallPosition","label","reform","title","id","belongTo","points","area","reduction","crudeOil","catalyticCracking","hydrocrackingUnit","cokingUnit","administrative","walllMaterial","uniforms","iTime","value","size","width","speed","alpha","color1","color2","vertexShader","fragmentShader","transparent","side","depthTest","WallManage","gobal","options","Map","scene","option","forEach","item","roundLineMesh","map","v","radius","close","visible","wallMesh","set","add"],"sources":["../../../src/factory/unit/wall.ts"],"sourcesContent":["import { createRoundLineWallMesh } from '@anov/3d-ability'\nimport type { Object3D, Scene } from '@anov/3d-core'\nimport { ShaderMaterial, Vector3 } from '@anov/3d-core'\nimport type Factory3D from '../3d'\nimport regionMap from '../regionData'\n\n// import wallVertexShader from './glsl/wall/vertexShader.glsl'\n// import wallFragmentShader from './glsl/wall/fragmentShader.glsl'\n\nconst wallPosition = [\n {\n label: regionMap.reform.title,\n id: '1',\n belongTo: regionMap.reform.id,\n points: regionMap.reform.area,\n },\n {\n label: regionMap.reduction.title,\n id: '2',\n belongTo: regionMap.reduction.id,\n points: regionMap.reduction.area,\n },\n {\n label: regionMap.crudeOil.title,\n id: '3',\n belongTo: regionMap.crudeOil.id,\n points: regionMap.crudeOil.area,\n },\n {\n label: regionMap.catalyticCracking.title,\n id: '4',\n belongTo: regionMap.catalyticCracking.id,\n points: regionMap.catalyticCracking.area,\n },\n {\n label: regionMap.hydrocrackingUnit.title,\n id: '5',\n belongTo: regionMap.hydrocrackingUnit.id,\n points: regionMap.hydrocrackingUnit.area,\n },\n {\n label: regionMap.cokingUnit.title,\n id: '6',\n belongTo: regionMap.cokingUnit.id,\n points: regionMap.cokingUnit.area,\n },\n {\n label: regionMap.administrative.title,\n id: '7',\n belongTo: regionMap.administrative.id,\n points: regionMap.administrative.area,\n },\n]\n\nconst walllMaterial = new ShaderMaterial({\n uniforms: {\n iTime: {\n value: 0,\n },\n size: {\n value: 16.0,\n },\n width: {\n value: 0.4,\n },\n speed: {\n value: 1.0,\n },\n alpha: {\n value: 0.2,\n },\n color1: {\n value:
|
|
1
|
+
{"version":3,"names":["createRoundLineWallMesh","Color","ShaderMaterial","Vector3","regionMap","wallPosition","label","reform","title","id","belongTo","points","area","reduction","crudeOil","catalyticCracking","hydrocrackingUnit","cokingUnit","administrative","walllMaterial","uniforms","iTime","value","size","width","speed","alpha","color1","color2","vertexShader","fragmentShader","transparent","side","depthTest","WallManage","gobal","options","Map","scene","option","setInterval","time","forEach","item","roundLineMesh","map","v","radius","close","visible","wallMesh","set","add"],"sources":["../../../src/factory/unit/wall.ts"],"sourcesContent":["import { createRoundLineWallMesh } from '@anov/3d-ability'\nimport type { Object3D, Scene } from '@anov/3d-core'\nimport { Color, ShaderMaterial, Vector3 } from '@anov/3d-core'\nimport type Factory3D from '../3d'\nimport regionMap from '../regionData'\n\n// import wallVertexShader from './glsl/wall/vertexShader.glsl'\n// import wallFragmentShader from './glsl/wall/fragmentShader.glsl'\n\nconst wallPosition = [\n {\n label: regionMap.reform.title,\n id: '1',\n belongTo: regionMap.reform.id,\n points: regionMap.reform.area,\n },\n {\n label: regionMap.reduction.title,\n id: '2',\n belongTo: regionMap.reduction.id,\n points: regionMap.reduction.area,\n },\n {\n label: regionMap.crudeOil.title,\n id: '3',\n belongTo: regionMap.crudeOil.id,\n points: regionMap.crudeOil.area,\n },\n {\n label: regionMap.catalyticCracking.title,\n id: '4',\n belongTo: regionMap.catalyticCracking.id,\n points: regionMap.catalyticCracking.area,\n },\n {\n label: regionMap.hydrocrackingUnit.title,\n id: '5',\n belongTo: regionMap.hydrocrackingUnit.id,\n points: regionMap.hydrocrackingUnit.area,\n },\n {\n label: regionMap.cokingUnit.title,\n id: '6',\n belongTo: regionMap.cokingUnit.id,\n points: regionMap.cokingUnit.area,\n },\n {\n label: regionMap.administrative.title,\n id: '7',\n belongTo: regionMap.administrative.id,\n points: regionMap.administrative.area,\n },\n]\n\nconst walllMaterial = new ShaderMaterial({\n uniforms: {\n iTime: {\n value: 0,\n },\n size: {\n value: 16.0,\n },\n width: {\n value: 0.4,\n },\n speed: {\n value: 1.0,\n },\n alpha: {\n value: 0.2,\n },\n color1: {\n value: new Color('#ACFEFE'),\n },\n color2: {\n value: new Color('#ACFEFE'),\n },\n },\n vertexShader: `varying vec2 vUv;\n\n void main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `uniform float iTime;\n uniform float size;////循环\n uniform float width;///宽度\n uniform float speed;///速度\n uniform float alpha;///透明度\n uniform vec3 color1;///颜色1\n uniform vec3 color2;///颜色2\n varying vec2 vUv;\n \n vec3 colorfix(vec3 color) {\n return vec3(color.r, color.g, color.b);\n }\n \n void mainImage(out vec4 fragColor, in vec2 fragCoord) {\n vec2 uv = vUv;\n vec2 wallUV = uv;\n wallUV.y *= size;\n \n float fwallUV = floor(fract(wallUV.y - iTime * speed) + width);\n float dis = 1. - max((uv.y * 8. - 7.), 1. - (uv.y * 8.));\n float dis2 = 1. - (uv.y * 4. - 3.);\n vec3 col = color1 * dis2 + color2 * (1. - dis2);\n fragColor = vec4(col, fwallUV * alpha * dis);\n }\n \n void main() {\n vec2 fragCoord = gl_FragCoord.xy;\n mainImage(gl_FragColor, fragCoord);\n }\n \n `,\n transparent: true,\n side: 2,\n depthTest: false,\n})\n\ntype WallManageOption = {\n visible?: boolean\n}\nclass WallManage {\n private scene: Scene\n readonly wallMesh: Map<string, Object3D> = new Map()\n private option: WallManageOption\n\n private time = 0\n\n constructor(gobal: Factory3D, options?: WallManageOption) {\n this.scene = gobal.scene.scene\n this.option = options || {}\n }\n\n generateWall() {\n setInterval(() => {\n this.time += 0.0005\n walllMaterial.uniforms.iTime.value = this.time\n })\n\n wallPosition.forEach((item) => {\n const roundLineMesh = createRoundLineWallMesh(item.points.map(v => new Vector3(v[0], v[1], v[2])), {\n radius: 0,\n close: true,\n }, walllMaterial)\n roundLineMesh.visible = this.option?.visible ?? true\n this.wallMesh.set(item.id, roundLineMesh)\n this.scene.add(roundLineMesh)\n })\n }\n}\n\nexport default WallManage"],"mappings":"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"}
|
|
@@ -101,6 +101,7 @@ var Camera = /*#__PURE__*/function () {
|
|
|
101
101
|
target: lookat.toArray()
|
|
102
102
|
});
|
|
103
103
|
}
|
|
104
|
+
if (_this.isTransitionPeriod) _this.app.sceneControl.renderer.render(_this.app.sceneControl.scene, _this.app.sceneControl.camera);
|
|
104
105
|
});
|
|
105
106
|
}
|
|
106
107
|
|
|
@@ -230,6 +231,7 @@ var Camera = /*#__PURE__*/function () {
|
|
|
230
231
|
this.controls.target.copy(target);
|
|
231
232
|
requestAnimationFrame(function () {
|
|
232
233
|
(options === null || options === void 0 ? void 0 : options.onComplate) && options.onComplate();
|
|
234
|
+
_this4.app.sceneControl.renderer.render(_this4.app.sceneControl.scene, _this4.app.sceneControl.camera);
|
|
233
235
|
});
|
|
234
236
|
return;
|
|
235
237
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Box3","MathUtils","Vector3","TWEEN","MessageType","sendToMessage","EMessageStatus","Camera","app","isTrigger","camera","sceneControl","controls","handleChanged","currentPos","pitch","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","length","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","position","clone","sub","target","normalize","lastPosition","multiplyScalar","add","lastLookat","caclTargetByPitch","subVectors","upVector","localPitchAxis","crossVectors","applyAxisAngle","degToRad","distance","distanceTo","newTarget","prevTarget","prevPosition","lastTarget","addEventListener","isTransitionPeriod","lookat","Event","Success","undefined","toArray","params","Promise","res","duration","moveOptions","onUpdate","onComplate","userInput","Array","isArray","caclCurrentPos","moveCameraTo","caclSingleCoordinate","fromArray","_","x","y","z","options","currentPoition","currentPositionInterpolation","copy","requestAnimationFrame","tween","stop","Tween","t","p","to","rotation","onStart","enabled","easing","Easing","Quadratic","InOut","rotationParent","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../../src/module/camera/index.ts"],"sourcesContent":["import type { OrbitControls, PerspectiveCamera } from '@anov/3d-core'\nimport { Box3, MathUtils, Vector3 } from '@anov/3d-core'\nimport * as TWEEN from '@tweenjs/tween.js'\nimport { MessageType, sendToMessage } from '../../utils/messageFn'\nimport type { BaseModule } from '../../utils/abstract'\nimport { EMessageStatus } from '../../messageStatus'\nimport type Anov3D from '../../sdkEntry'\n\ntype vector3Array = [number, number, number]\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n isTrigger?: boolean\n}\n\nclass Camera implements BaseModule {\n app: Anov3D\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private isTransitionPeriod = false\n private isTrigger = true\n private tween: any\n\n constructor(app: Anov3D) {\n this.app = app\n this.isTrigger = true\n this.camera = app.sceneControl.camera!\n this.controls = app.sceneControl.controls!\n this.handleChanged()\n }\n\n /**\n * caclCurrentPos\n * @param currentPos\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], pitch: number) {\n const box = new Box3()\n\n box.setFromPoints(currentPos.map(item => new Vector3(item[0], item[1], item[2])))\n\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n const halfDiagonal = size.length() * 0.5\n\n const maxDistance = halfDiagonal / Math.tan(this.camera.fov / 2 * Math.PI / 180)\n const cameraToCenterDistance = maxDistance\n const directionVector = (this.camera.position.clone()).sub(this.controls.target).normalize() // 相机指向物体中心的向量\n\n const lastPosition = directionVector.multiplyScalar(cameraToCenterDistance).add(center)\n const lastLookat = this.caclTargetByPitch(pitch, center, lastPosition)\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * caclTargetByPitch\n * @param pitch\n * @param target\n * @param position\n * @returns\n */\n private caclTargetByPitch(pitch: number, target: Vector3, position: Vector3) {\n const directionVector = new Vector3().subVectors(target, position)\n const upVector = new Vector3(0, 1, 0)\n const localPitchAxis = new Vector3().crossVectors(directionVector, upVector).normalize()\n\n directionVector.applyAxisAngle(localPitchAxis, MathUtils.degToRad(pitch))\n\n const distance = position.distanceTo(target)\n const newTarget = position.clone().add(directionVector.normalize().multiplyScalar(distance))\n\n return newTarget\n }\n\n /**\n * caclSingleCoordinate\n * @param prevTarget\n * @param prevPosition\n * @param lastTarget\n * @returns\n */\n private caclSingleCoordinate(prevTarget: Vector3, prevPosition: Vector3, lastTarget: Vector3) {\n const directionVector = lastTarget.clone().sub(prevTarget).normalize()\n return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition)\n }\n\n /**\n * handle camera changed\n */\n private handleChanged() {\n this.controls.addEventListener('change', () => {\n if (!this.isTransitionPeriod && !this.isTrigger) {\n const lookat = this.controls.target\n const position = this.camera.position\n\n sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n }\n })\n }\n\n /**\n * focus On Position\n * @param params\n */\n focus(params: { target: vector3Array | vector3Array[]; pitch?: number; duration?: number; isTrigger?: boolean }) {\n return new Promise((res) => {\n const { target: position, pitch, duration } = params\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n isTrigger: params.isTrigger ?? true,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n params.isTrigger\n && sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, 0)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n else {\n const currentPos = position as vector3Array\n const lastPosition = this.caclSingleCoordinate(this.controls.target, this.camera.position, new Vector3().fromArray(currentPos))\n const lastLookat = this.caclTargetByPitch(0, new Vector3().fromArray(currentPos), lastPosition)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera\n * @param params\n */\n set(params: { position: vector3Array; target: vector3Array; isTrigger?: boolean; duration?: number }) {\n return new Promise((res, _) => {\n this.moveCameraTo(\n new Vector3(params.position[0], params.position[1], params.position[2]),\n new Vector3(params.target[0], params.target[1], params.target[2]),\n 0,\n {\n isTrigger: params.isTrigger ?? true,\n duration: (params.duration && params.duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n params.isTrigger\n && sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n })\n },\n })\n })\n }\n\n /**\n * get Camera info\n * @returns\n */\n get() {\n return {\n position: [this.camera.position.x, this.camera.position.y, this.camera.position.z],\n target: [this.controls.target.x, this.controls.target.y, this.controls.target.z],\n }\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param options\n */\n private moveCameraTo(position: Vector3, target: Vector3, pitch = 0, options?: ChangeCameraPresetOptions) {\n const currentPoition = this.camera.position.clone()\n const currentPositionInterpolation = new Vector3()\n\n if (options?.duration === 0) {\n this.isTrigger = !options.isTrigger\n this.camera.position.copy(position)\n this.controls.target.copy(target)\n\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n })\n\n return\n }\n\n if (this.tween)\n this.tween.stop()\n\n this.tween = new TWEEN.Tween({ t: 0, lookat: this.controls.target.clone(), p: 0 }).to({ t: 1, lookat: target, p: (-this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0)) }, options?.duration || 1000)\n .onStart(() => {\n options?.onStart && options.onStart()\n this.controls.enabled = false\n this.isTransitionPeriod = true\n })\n .easing(TWEEN.Easing.Quadratic.InOut)\n .onUpdate(({ t, lookat, p }) => {\n this.controls.target.copy(lookat)\n\n if (pitch)\n // @ts-ignore\n this.camera.rotationParent.x = p\n\n const currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t)\n this.camera.position.copy(currentPosition)\n options?.onUpdate && options.onUpdate({ position: currentPosition, lookat })\n })\n .onComplete(() => {\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n })\n\n this.controls.enabled = true\n\n setTimeout(() => {\n this.isTransitionPeriod = false\n })\n })\n .start()\n }\n}\n\nexport default Camera"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Box3","MathUtils","Vector3","TWEEN","MessageType","sendToMessage","EMessageStatus","Camera","app","isTrigger","camera","sceneControl","controls","handleChanged","currentPos","pitch","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","length","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","position","clone","sub","target","normalize","lastPosition","multiplyScalar","add","lastLookat","caclTargetByPitch","subVectors","upVector","localPitchAxis","crossVectors","applyAxisAngle","degToRad","distance","distanceTo","newTarget","prevTarget","prevPosition","lastTarget","addEventListener","isTransitionPeriod","lookat","Event","Success","undefined","toArray","renderer","render","scene","params","Promise","res","duration","moveOptions","onUpdate","onComplate","userInput","Array","isArray","caclCurrentPos","moveCameraTo","caclSingleCoordinate","fromArray","_","x","y","z","options","currentPoition","currentPositionInterpolation","copy","requestAnimationFrame","tween","stop","Tween","t","p","to","rotation","onStart","enabled","easing","Easing","Quadratic","InOut","rotationParent","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../../src/module/camera/index.ts"],"sourcesContent":["import type { OrbitControls, PerspectiveCamera } from '@anov/3d-core'\nimport { Box3, MathUtils, Vector3 } from '@anov/3d-core'\nimport * as TWEEN from '@tweenjs/tween.js'\nimport { MessageType, sendToMessage } from '../../utils/messageFn'\nimport type { BaseModule } from '../../utils/abstract'\nimport { EMessageStatus } from '../../messageStatus'\nimport type Anov3D from '../../sdkEntry'\n\ntype vector3Array = [number, number, number]\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n isTrigger?: boolean\n}\n\nclass Camera implements BaseModule {\n app: Anov3D\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private isTransitionPeriod = false\n private isTrigger = true\n private tween: any\n\n constructor(app: Anov3D) {\n this.app = app\n this.isTrigger = true\n this.camera = app.sceneControl.camera!\n this.controls = app.sceneControl.controls!\n this.handleChanged()\n }\n\n /**\n * caclCurrentPos\n * @param currentPos\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], pitch: number) {\n const box = new Box3()\n\n box.setFromPoints(currentPos.map(item => new Vector3(item[0], item[1], item[2])))\n\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n const halfDiagonal = size.length() * 0.5\n\n const maxDistance = halfDiagonal / Math.tan(this.camera.fov / 2 * Math.PI / 180)\n const cameraToCenterDistance = maxDistance\n const directionVector = (this.camera.position.clone()).sub(this.controls.target).normalize() // 相机指向物体中心的向量\n\n const lastPosition = directionVector.multiplyScalar(cameraToCenterDistance).add(center)\n const lastLookat = this.caclTargetByPitch(pitch, center, lastPosition)\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * caclTargetByPitch\n * @param pitch\n * @param target\n * @param position\n * @returns\n */\n private caclTargetByPitch(pitch: number, target: Vector3, position: Vector3) {\n const directionVector = new Vector3().subVectors(target, position)\n const upVector = new Vector3(0, 1, 0)\n const localPitchAxis = new Vector3().crossVectors(directionVector, upVector).normalize()\n\n directionVector.applyAxisAngle(localPitchAxis, MathUtils.degToRad(pitch))\n\n const distance = position.distanceTo(target)\n const newTarget = position.clone().add(directionVector.normalize().multiplyScalar(distance))\n\n return newTarget\n }\n\n /**\n * caclSingleCoordinate\n * @param prevTarget\n * @param prevPosition\n * @param lastTarget\n * @returns\n */\n private caclSingleCoordinate(prevTarget: Vector3, prevPosition: Vector3, lastTarget: Vector3) {\n const directionVector = lastTarget.clone().sub(prevTarget).normalize()\n return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition)\n }\n\n /**\n * handle camera changed\n */\n private handleChanged() {\n this.controls.addEventListener('change', () => {\n if (!this.isTransitionPeriod && !this.isTrigger) {\n const lookat = this.controls.target\n const position = this.camera.position\n\n sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n }\n\n if (this.isTransitionPeriod)\n this.app.sceneControl.renderer!.render(this.app.sceneControl.scene!, this.app.sceneControl.camera!)\n })\n }\n\n /**\n * focus On Position\n * @param params\n */\n focus(params: { target: vector3Array | vector3Array[]; pitch?: number; duration?: number; isTrigger?: boolean }) {\n return new Promise((res) => {\n const { target: position, pitch, duration } = params\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n isTrigger: params.isTrigger ?? true,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n params.isTrigger\n && sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, 0)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n else {\n const currentPos = position as vector3Array\n const lastPosition = this.caclSingleCoordinate(this.controls.target, this.camera.position, new Vector3().fromArray(currentPos))\n const lastLookat = this.caclTargetByPitch(0, new Vector3().fromArray(currentPos), lastPosition)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera\n * @param params\n */\n set(params: { position: vector3Array; target: vector3Array; isTrigger?: boolean; duration?: number }) {\n return new Promise((res, _) => {\n this.moveCameraTo(\n new Vector3(params.position[0], params.position[1], params.position[2]),\n new Vector3(params.target[0], params.target[1], params.target[2]),\n 0,\n {\n isTrigger: params.isTrigger ?? true,\n duration: (params.duration && params.duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n params.isTrigger\n && sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n })\n },\n })\n })\n }\n\n /**\n * get Camera info\n * @returns\n */\n get() {\n return {\n position: [this.camera.position.x, this.camera.position.y, this.camera.position.z],\n target: [this.controls.target.x, this.controls.target.y, this.controls.target.z],\n }\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param options\n */\n private moveCameraTo(position: Vector3, target: Vector3, pitch = 0, options?: ChangeCameraPresetOptions) {\n const currentPoition = this.camera.position.clone()\n const currentPositionInterpolation = new Vector3()\n\n if (options?.duration === 0) {\n this.isTrigger = !options.isTrigger\n this.camera.position.copy(position)\n this.controls.target.copy(target)\n\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n this.app.sceneControl.renderer!.render(this.app.sceneControl.scene!, this.app.sceneControl.camera!)\n })\n\n return\n }\n\n if (this.tween)\n this.tween.stop()\n\n this.tween = new TWEEN.Tween({ t: 0, lookat: this.controls.target.clone(), p: 0 }).to({ t: 1, lookat: target, p: (-this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0)) }, options?.duration || 1000)\n .onStart(() => {\n options?.onStart && options.onStart()\n this.controls.enabled = false\n this.isTransitionPeriod = true\n })\n .easing(TWEEN.Easing.Quadratic.InOut)\n .onUpdate(({ t, lookat, p }) => {\n this.controls.target.copy(lookat)\n\n if (pitch)\n // @ts-ignore\n this.camera.rotationParent.x = p\n\n const currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t)\n this.camera.position.copy(currentPosition)\n options?.onUpdate && options.onUpdate({ position: currentPosition, lookat })\n })\n .onComplete(() => {\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n })\n\n this.controls.enabled = true\n\n setTimeout(() => {\n this.isTransitionPeriod = false\n })\n })\n .start()\n }\n}\n\nexport default Camera"],"mappings":"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"}
|