@anov/3d-ability 0.0.93 → 0.0.94

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.
@@ -20,7 +20,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
20
20
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
21
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
22
22
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
23
- import { CanvasTexture, DoubleSide, Mesh, NearestFilter, Object3D, PlaneGeometry, ShaderMaterial, use } from '@anov/3d-core';
23
+ import { CanvasTexture, DoubleSide, Mesh, NearestFilter, Object3D, PlaneGeometry, ShaderMaterial, Vector2, use } from '@anov/3d-core';
24
24
  import h from 'anov-heat-map';
25
25
  import Supercluster from 'supercluster';
26
26
  import { heightFragmentShader, heightVertexShader } from "./shader";
@@ -30,6 +30,17 @@ var defaultGradient = {
30
30
  0.85: 'yellow',
31
31
  1.0: 'rgb(255,0,0)'
32
32
  };
33
+ var defaultData = [{
34
+ x: -1000,
35
+ y: 0,
36
+ z: -1000,
37
+ value: 0
38
+ }, {
39
+ x: -1000,
40
+ y: 0,
41
+ z: 1000,
42
+ value: 0
43
+ }];
33
44
 
34
45
  /**
35
46
  * 区域热力图
@@ -197,7 +208,7 @@ var HeatMap = /*#__PURE__*/function (_Object3D) {
197
208
  key: "coordinateTransformation",
198
209
  value: function coordinateTransformation(data) {
199
210
  var _this3 = this;
200
- var hanldeData = this.handleRandeDataFilter(data);
211
+ var hanldeData = data;
201
212
  var _this$calDataMaxMin2 = this.calDataMaxMin(),
202
213
  width = _this$calDataMaxMin2.width,
203
214
  height = _this$calDataMaxMin2.height,
@@ -208,7 +219,7 @@ var HeatMap = /*#__PURE__*/function (_Object3D) {
208
219
  x: Math.floor((item.x - -max) / (max - -max) * width),
209
220
  y: Math.floor((item.z - -max) / (max - -max) * height),
210
221
  value: item.value,
211
- radius: (_item$radius = item.radius) !== null && _item$radius !== void 0 ? _item$radius : _this3._radius
222
+ radius: Math.max(2, (_item$radius = item.radius) !== null && _item$radius !== void 0 ? _item$radius : _this3._radius)
212
223
  };
213
224
  });
214
225
  return result;
@@ -286,11 +297,13 @@ var HeatMap = /*#__PURE__*/function (_Object3D) {
286
297
  }, {
287
298
  key: "createAttachmentMesh",
288
299
  value: function createAttachmentMesh() {
300
+ var _this$_range$min, _this$_range, _this$_range$max, _this$_range2;
289
301
  if (this._attachmentMesh) this.remove(this._attachmentMesh);
290
302
  var _this$calDataMaxMin4 = this.calDataMaxMin(),
291
303
  width = _this$calDataMaxMin4.width,
292
304
  height = _this$calDataMaxMin4.height,
293
- realShowMax = _this$calDataMaxMin4.realShowMax;
305
+ realShowMax = _this$calDataMaxMin4.realShowMax,
306
+ max = _this$calDataMaxMin4.max;
294
307
  var canvas = this._heatmap._renderer.canvas;
295
308
  var scale = this.calResolutionScale(canvas.width);
296
309
  var canvas2 = this.handleResolutionCanvas(canvas, scale);
@@ -318,6 +331,9 @@ var HeatMap = /*#__PURE__*/function (_Object3D) {
318
331
  },
319
332
  isPixel: {
320
333
  value: this._isPixel
334
+ },
335
+ uRange: {
336
+ value: new Vector2((_this$_range$min = (_this$_range = this._range) === null || _this$_range === void 0 ? void 0 : _this$_range.min) !== null && _this$_range$min !== void 0 ? _this$_range$min : -max, (_this$_range$max = (_this$_range2 = this._range) === null || _this$_range2 === void 0 ? void 0 : _this$_range2.max) !== null && _this$_range$max !== void 0 ? _this$_range$max : max)
321
337
  }
322
338
  },
323
339
  vertexShader: heightVertexShader,
@@ -341,7 +357,7 @@ var HeatMap = /*#__PURE__*/function (_Object3D) {
341
357
  }, {
342
358
  key: "setData",
343
359
  value: function setData(data) {
344
- this.data = data;
360
+ this.data = [].concat(defaultData, _toConsumableArray(data));
345
361
  this._canvasBox && use.useScene().domElement.parentElement.removeChild(this._canvasBox);
346
362
  this._canvasBox = this.createCanvas();
347
363
  this._heatmap = this.createHeatmapTool();
@@ -366,7 +382,7 @@ var HeatMap = /*#__PURE__*/function (_Object3D) {
366
382
  use.useScene().domElement.parentElement.removeChild(this._canvasBox);
367
383
 
368
384
  // @ts-ignore
369
- (_this$_attachmentMesh = this._attachmentMesh) === null || _this$_attachmentMesh === void 0 || _this$_attachmentMesh.material.map.dispose();
385
+ (_this$_attachmentMesh = this._attachmentMesh) === null || _this$_attachmentMesh === void 0 || _this$_attachmentMesh.material.dispose();
370
386
  return this;
371
387
  }
372
388
  }]);
@@ -1 +1 @@
1
- {"version":3,"names":["CanvasTexture","DoubleSide","Mesh","NearestFilter","Object3D","PlaneGeometry","ShaderMaterial","use","h","Supercluster","heightFragmentShader","heightVertexShader","defaultGradient","HeatMap","_Object3D","_inherits","_super","_createSuper","options","_options$radius","_options$height","_options$isPixel","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_colorMap","colorMap","_radius","radius","_height","height","_isPixel","isPixel","_range","range","_createClass","key","get","Math","max","apply","_toConsumableArray","data","map","item","value","_url","initSupercluster","_supercluster","minZoom","maxZoom","setSuperclusterData","featuresPoints","type","properties","geometry","coordinates","x","z","console","log","length","load","getZoomLevel","camera","minHeight","maxHeight","min","position","y","getSuperclusterData","_this$calDataMaxMin","calDataMaxMin","zoom","useScene","clusters","getClusters","maxX","minX","maxZ","minZ","abs","ceil","width","realShowWidth","realShowHeight","realShowMax","handleRandeDataFilter","_this2","filter","coordinateTransformation","_this3","hanldeData","_this$calDataMaxMin2","result","_item$radius","floor","createHeatmapTool","heatmap","create","container","_canvasBox","gradient","maxOpacity","minOpacity","createCanvas","_this$calDataMaxMin3","canvasBox","document","createElement","style","concat","top","right","domElement","parentElement","appendChild","calResolutionScale","handleResolutionCanvas","canvas","scale","finalCanvas","ctx","getContext","drawImage","createAttachmentMesh","_attachmentMesh","remove","_this$calDataMaxMin4","_heatmap","_renderer","canvas2","texture","minFilter","magFilter","toDataURL","threshold","shaderMaterial","uniforms","granularity","uOpacity","uHeight","vertexShader","fragmentShader","transparent","side","depthTest","mesh","rotation","PI","set","renderOrder","add","setData","removeChild","defaultMax","removeFromParent","_this$_attachmentMesh","_get","_getPrototypeOf","prototype","material","dispose"],"sources":["../../../src/business/HeatMap/HeatMap.ts"],"sourcesContent":["import type { PerspectiveCamera } from '@anov/3d-core'\nimport { CanvasTexture, DoubleSide, Mesh, NearestFilter, Object3D, PlaneGeometry, ShaderMaterial, use } from '@anov/3d-core'\nimport h from 'anov-heat-map'\nimport type { AnyProps } from 'supercluster'\nimport Supercluster from 'supercluster'\nimport { heightFragmentShader, heightVertexShader } from './shader'\nimport type { HeatMapData, HeatMapnterface } from './index'\n\ntype RangeType = {\n min: number\n max: number\n}\n\ntype HeatMapOptions = {\n colorMap?: {\n [key: number]: string\n }\n max?: number\n radius?: number\n height?: number\n isPixel?: boolean\n range?: RangeType\n}\n\nconst defaultGradient = { 0.25: 'rgb(0,0,255)', 0.55: 'rgb(0,255,0)', 0.85: 'yellow', 1.0: 'rgb(255,0,0)' }\n\n/**\n * 区域热力图\n */\n\nclass HeatMap extends Object3D implements HeatMapnterface {\n public data: HeatMapData[] = []\n\n private _height: number\n private _radius: number\n private _heatmap: any\n private _url: string\n private _colorMap: {\n [key: number]: string\n }\n\n private _isPixel: boolean\n private _canvasBox: HTMLDivElement | undefined\n private _attachmentMesh: Mesh | undefined\n private _supercluster: Supercluster\n private _range: RangeType | undefined\n\n private get defaultMax() {\n return Math.max(...this.data.map(item => item.value))\n }\n\n public get url() {\n return this._url\n }\n\n constructor(options: HeatMapOptions) {\n super()\n\n this._colorMap = options.colorMap || defaultGradient\n this._radius = options.radius ?? 40\n this._height = options.height ?? 70\n this._isPixel = options.isPixel ?? false\n this._range = options.range\n\n // this.initSupercluster()\n }\n\n private initSupercluster() {\n this._supercluster = new Supercluster({\n radius: 40,\n minZoom: 1,\n maxZoom: 16,\n })\n }\n\n /**\n * set supercluster data\n */\n private setSuperclusterData() {\n const featuresPoints = this.data.map((item) => {\n return {\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'Point',\n coordinates: [item.x, item.z],\n },\n }\n })\n\n console.log('正在加载点数据到supercluster:', featuresPoints.length)\n this._supercluster.load(featuresPoints as Supercluster.PointFeature<AnyProps>[])\n }\n\n /**\n * get zoom level\n * @param camera\n * @returns\n */\n private getZoomLevel(camera: PerspectiveCamera) {\n const minZoom = 10\n const maxZoom = 16\n const minHeight = 10\n const maxHeight = 1000\n\n return Math.max(minZoom, Math.min(maxZoom,\n ((maxHeight - camera.position.y) / (maxHeight - minHeight)) * (maxZoom - minZoom) + minZoom,\n ))\n }\n\n /**\n * get supercluster data\n * @returns\n */\n private getSuperclusterData() {\n const { max } = this.calDataMaxMin()\n const zoom = this.getZoomLevel(use.useScene().camera)\n const clusters = this._supercluster.getClusters([-max, -max, max, max], zoom)\n\n console.log('当前缩放级别:', zoom, '输入点数量:', this.data.length, '聚类后点数量:', clusters.length)\n\n return clusters\n }\n\n /**\n * calculate data max and min\n * @returns\n */\n private calDataMaxMin() {\n const maxX = Math.max(...this.data.map(item => item.x))\n const minX = Math.min(...this.data.map(item => item.x))\n const maxZ = Math.max(...this.data.map(item => item.z))\n const minZ = Math.min(...this.data.map(item => item.z))\n\n const max = Math.max(Math.abs(Math.ceil(maxX)), Math.abs(Math.ceil(minX)), Math.abs(Math.ceil(maxZ)), Math.abs(Math.ceil(minZ)), 60)\n\n const width = max * 2\n const height = max * 2\n\n const realShowWidth = maxX - minX\n const realShowHeight = maxZ - minZ\n const realShowMax = Math.max(Math.ceil(realShowWidth), Math.ceil(realShowHeight), 60)\n\n return { width, height, max, minX, minZ, maxX, maxZ, realShowMax }\n }\n\n /**\n * handle range data filter\n * @param data\n * @returns\n */\n private handleRandeDataFilter(data: HeatMapData[]) {\n if (this._range) {\n return data.filter((item) => {\n return item.x >= this._range.min && item.x <= this._range.max && item.z >= this._range.min && item.z <= this._range.max\n })\n }\n\n return data\n }\n\n /**\n * coordinate transformation\n * @param data\n * @returns\n */\n private coordinateTransformation(data: HeatMapData[]) {\n const hanldeData = this.handleRandeDataFilter(data)\n const { width, height, max } = this.calDataMaxMin()\n\n const result = hanldeData.map(item => ({\n x: Math.floor((item.x - (-max)) / (max - (-max)) * width),\n y: Math.floor((item.z - (-max)) / (max - (-max)) * height),\n value: item.value,\n radius: item.radius ?? this._radius,\n }))\n\n return result\n }\n\n /**\n * generate heatmap texture\n * @param canvasBox\n * @returns\n */\n private createHeatmapTool() {\n const heatmap = h.create({\n container: this._canvasBox,\n radius: this._radius,\n gradient: this._colorMap,\n maxOpacity: 1,\n minOpacity: 0,\n })\n\n return heatmap\n }\n\n /**\n * create heatmap container canvas\n * @returns\n */\n private createCanvas() {\n const { width, height } = this.calDataMaxMin()\n const canvasBox = document.createElement('div')\n\n canvasBox.style.width = `${width}px`\n canvasBox.style.height = `${height}px`\n canvasBox.style.top = '0'\n canvasBox.style.right = '0'\n\n use.useScene().domElement.parentElement.appendChild(canvasBox)\n\n return canvasBox\n }\n\n /**\n * calculate resolution scale\n * @param width\n * @returns\n */\n private calResolutionScale(width: number) {\n return Math.max(1, Math.min(10, 10 - (width * 9) / 2000))\n }\n\n /**\n * handle resolution canvas\n * @param canvas\n * @param scale\n * @returns\n */\n private handleResolutionCanvas(canvas: HTMLCanvasElement, scale: number) {\n const finalCanvas = document.createElement('canvas')\n finalCanvas.width = canvas.width * scale\n finalCanvas.height = canvas.height * scale\n const ctx = finalCanvas.getContext('2d')\n ctx.scale(scale, scale)\n ctx.drawImage(canvas, 0, 0)\n\n return finalCanvas\n }\n\n /**\n * create attachment mesh\n */\n private createAttachmentMesh() {\n if (this._attachmentMesh)\n this.remove(this._attachmentMesh)\n\n const { width, height, realShowMax } = this.calDataMaxMin()\n const canvas = this._heatmap._renderer.canvas\n const scale = this.calResolutionScale(canvas.width)\n const canvas2 = this.handleResolutionCanvas(canvas, scale)\n const texture = new CanvasTexture(canvas2)\n\n texture.minFilter = NearestFilter\n texture.magFilter = NearestFilter\n\n this._url = canvas.toDataURL('image/png')\n\n const threshold = (0.3 / 1000 * realShowMax)\n const shaderMaterial = new ShaderMaterial({\n uniforms: {\n map: { value: texture },\n granularity: { value: realShowMax / 3 < 300 ? 300 : realShowMax / 3 },\n threshold: { value: threshold > 0.6 ? 0.6 : threshold < 0.25 ? 0.25 : threshold },\n uOpacity: { value: 2.0 },\n uHeight: { value: this._height },\n isPixel: { value: this._isPixel },\n },\n vertexShader: heightVertexShader,\n fragmentShader: heightFragmentShader,\n transparent: true,\n side: DoubleSide,\n depthTest: false,\n })\n\n const mesh = new Mesh(new PlaneGeometry(width, height, 500, 500), shaderMaterial)\n\n mesh.rotation.x = -Math.PI / 2\n mesh.position.set(0, 0, 0)\n mesh.renderOrder = 1000\n\n this._attachmentMesh = mesh\n this.add(mesh)\n }\n\n /**\n * set heatmap data\n * @param data\n */\n public setData(data: HeatMapData[]) {\n this.data = data\n this._canvasBox && use.useScene().domElement.parentElement.removeChild(this._canvasBox)\n this._canvasBox = this.createCanvas()\n this._heatmap = this.createHeatmapTool()\n\n this._heatmap.setData({\n data: this.coordinateTransformation(data),\n max: this.defaultMax,\n })\n\n this.createAttachmentMesh()\n\n // 聚类暂时不实现\n // this.setSuperclusterData()\n // use.useScene().orbitControls.addEventListener('change', () => {\n // const clusters = this.getSuperclusterData()\n // console.log(clusters)\n // })\n }\n\n override removeFromParent(): this {\n super.removeFromParent()\n use.useScene().domElement.parentElement.removeChild(this._canvasBox)\n\n // @ts-ignore\n this._attachmentMesh?.material.map.dispose()\n\n return this\n }\n}\n\nexport default HeatMap"],"mappings":"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"}
1
+ {"version":3,"names":["CanvasTexture","DoubleSide","Mesh","NearestFilter","Object3D","PlaneGeometry","ShaderMaterial","Vector2","use","h","Supercluster","heightFragmentShader","heightVertexShader","defaultGradient","defaultData","x","y","z","value","HeatMap","_Object3D","_inherits","_super","_createSuper","options","_options$radius","_options$height","_options$isPixel","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_colorMap","colorMap","_radius","radius","_height","height","_isPixel","isPixel","_range","range","_createClass","key","get","Math","max","apply","_toConsumableArray","data","map","item","_url","initSupercluster","_supercluster","minZoom","maxZoom","setSuperclusterData","featuresPoints","type","properties","geometry","coordinates","console","log","length","load","getZoomLevel","camera","minHeight","maxHeight","min","position","getSuperclusterData","_this$calDataMaxMin","calDataMaxMin","zoom","useScene","clusters","getClusters","maxX","minX","maxZ","minZ","abs","ceil","width","realShowWidth","realShowHeight","realShowMax","handleRandeDataFilter","_this2","filter","coordinateTransformation","_this3","hanldeData","_this$calDataMaxMin2","result","_item$radius","floor","createHeatmapTool","heatmap","create","container","_canvasBox","gradient","maxOpacity","minOpacity","createCanvas","_this$calDataMaxMin3","canvasBox","document","createElement","style","concat","top","right","domElement","parentElement","appendChild","calResolutionScale","handleResolutionCanvas","canvas","scale","finalCanvas","ctx","getContext","drawImage","createAttachmentMesh","_this$_range$min","_this$_range","_this$_range$max","_this$_range2","_attachmentMesh","remove","_this$calDataMaxMin4","_heatmap","_renderer","canvas2","texture","minFilter","magFilter","toDataURL","threshold","shaderMaterial","uniforms","granularity","uOpacity","uHeight","uRange","vertexShader","fragmentShader","transparent","side","depthTest","mesh","rotation","PI","set","renderOrder","add","setData","removeChild","defaultMax","removeFromParent","_this$_attachmentMesh","_get","_getPrototypeOf","prototype","material","dispose"],"sources":["../../../src/business/HeatMap/HeatMap.ts"],"sourcesContent":["import type { PerspectiveCamera } from '@anov/3d-core'\nimport { CanvasTexture, DoubleSide, Mesh, NearestFilter, Object3D, PlaneGeometry, ShaderMaterial, Vector2, use } from '@anov/3d-core'\nimport h from 'anov-heat-map'\nimport type { AnyProps } from 'supercluster'\nimport Supercluster from 'supercluster'\nimport { heightFragmentShader, heightVertexShader } from './shader'\nimport type { HeatMapData, HeatMapnterface } from './index'\n\ntype RangeType = {\n min: number\n max: number\n}\n\ntype HeatMapOptions = {\n colorMap?: {\n [key: number]: string\n }\n max?: number\n radius?: number\n height?: number\n isPixel?: boolean\n range?: RangeType\n}\n\nconst defaultGradient = { 0.25: 'rgb(0,0,255)', 0.55: 'rgb(0,255,0)', 0.85: 'yellow', 1.0: 'rgb(255,0,0)' }\n\nconst defaultData = [\n {\n x: -1000,\n y: 0,\n z: -1000,\n value: 0,\n },\n {\n x: -1000,\n y: 0,\n z: 1000,\n value: 0,\n },\n]\n\n/**\n * 区域热力图\n */\n\nclass HeatMap extends Object3D implements HeatMapnterface {\n public data: HeatMapData[] = []\n\n private _height: number\n private _radius: number\n private _heatmap: any\n private _url: string\n private _colorMap: {\n [key: number]: string\n }\n\n private _isPixel: boolean\n private _canvasBox: HTMLDivElement | undefined\n private _attachmentMesh: Mesh | undefined\n private _supercluster: Supercluster\n private _range: RangeType | undefined\n\n private get defaultMax() {\n return Math.max(...this.data.map(item => item.value))\n }\n\n public get url() {\n return this._url\n }\n\n constructor(options: HeatMapOptions) {\n super()\n\n this._colorMap = options.colorMap || defaultGradient\n this._radius = options.radius ?? 40\n this._height = options.height ?? 70\n this._isPixel = options.isPixel ?? false\n this._range = options.range\n\n // this.initSupercluster()\n }\n\n private initSupercluster() {\n this._supercluster = new Supercluster({\n radius: 40,\n minZoom: 1,\n maxZoom: 16,\n })\n }\n\n /**\n * set supercluster data\n */\n private setSuperclusterData() {\n const featuresPoints = this.data.map((item) => {\n return {\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'Point',\n coordinates: [item.x, item.z],\n },\n }\n })\n\n console.log('正在加载点数据到supercluster:', featuresPoints.length)\n this._supercluster.load(featuresPoints as Supercluster.PointFeature<AnyProps>[])\n }\n\n /**\n * get zoom level\n * @param camera\n * @returns\n */\n private getZoomLevel(camera: PerspectiveCamera) {\n const minZoom = 10\n const maxZoom = 16\n const minHeight = 10\n const maxHeight = 1000\n\n return Math.max(minZoom, Math.min(maxZoom,\n ((maxHeight - camera.position.y) / (maxHeight - minHeight)) * (maxZoom - minZoom) + minZoom,\n ))\n }\n\n /**\n * get supercluster data\n * @returns\n */\n private getSuperclusterData() {\n const { max } = this.calDataMaxMin()\n const zoom = this.getZoomLevel(use.useScene().camera)\n const clusters = this._supercluster.getClusters([-max, -max, max, max], zoom)\n\n console.log('当前缩放级别:', zoom, '输入点数量:', this.data.length, '聚类后点数量:', clusters.length)\n\n return clusters\n }\n\n /**\n * calculate data max and min\n * @returns\n */\n private calDataMaxMin() {\n const maxX = Math.max(...this.data.map(item => item.x))\n const minX = Math.min(...this.data.map(item => item.x))\n const maxZ = Math.max(...this.data.map(item => item.z))\n const minZ = Math.min(...this.data.map(item => item.z))\n\n const max = Math.max(Math.abs(Math.ceil(maxX)), Math.abs(Math.ceil(minX)), Math.abs(Math.ceil(maxZ)), Math.abs(Math.ceil(minZ)), 60)\n\n const width = max * 2\n const height = max * 2\n\n const realShowWidth = maxX - minX\n const realShowHeight = maxZ - minZ\n const realShowMax = Math.max(Math.ceil(realShowWidth), Math.ceil(realShowHeight), 60)\n\n return { width, height, max, minX, minZ, maxX, maxZ, realShowMax }\n }\n\n /**\n * handle range data filter\n * @param data\n * @returns\n */\n private handleRandeDataFilter(data: HeatMapData[]) {\n if (this._range) {\n return data.filter((item) => {\n return item.x >= this._range.min && item.x <= this._range.max && item.z >= this._range.min && item.z <= this._range.max\n })\n }\n\n return data\n }\n\n /**\n * coordinate transformation\n * @param data\n * @returns\n */\n private coordinateTransformation(data: HeatMapData[]) {\n const hanldeData = data\n const { width, height, max } = this.calDataMaxMin()\n\n const result = hanldeData.map(item => ({\n x: Math.floor((item.x - (-max)) / (max - (-max)) * width),\n y: Math.floor((item.z - (-max)) / (max - (-max)) * height),\n value: item.value,\n radius: Math.max(2, (item.radius ?? this._radius)),\n }))\n\n return result\n }\n\n /**\n * generate heatmap texture\n * @param canvasBox\n * @returns\n */\n private createHeatmapTool() {\n const heatmap = h.create({\n container: this._canvasBox,\n radius: this._radius,\n gradient: this._colorMap,\n maxOpacity: 1,\n minOpacity: 0,\n })\n\n return heatmap\n }\n\n /**\n * create heatmap container canvas\n * @returns\n */\n private createCanvas() {\n const { width, height } = this.calDataMaxMin()\n const canvasBox = document.createElement('div')\n\n canvasBox.style.width = `${width}px`\n canvasBox.style.height = `${height}px`\n canvasBox.style.top = '0'\n canvasBox.style.right = '0'\n\n use.useScene().domElement.parentElement.appendChild(canvasBox)\n\n return canvasBox\n }\n\n /**\n * calculate resolution scale\n * @param width\n * @returns\n */\n private calResolutionScale(width: number) {\n return Math.max(1, Math.min(10, 10 - (width * 9) / 2000))\n }\n\n /**\n * handle resolution canvas\n * @param canvas\n * @param scale\n * @returns\n */\n private handleResolutionCanvas(canvas: HTMLCanvasElement, scale: number) {\n const finalCanvas = document.createElement('canvas')\n finalCanvas.width = canvas.width * scale\n finalCanvas.height = canvas.height * scale\n const ctx = finalCanvas.getContext('2d')\n ctx.scale(scale, scale)\n ctx.drawImage(canvas, 0, 0)\n\n return finalCanvas\n }\n\n /**\n * create attachment mesh\n */\n private createAttachmentMesh() {\n if (this._attachmentMesh)\n this.remove(this._attachmentMesh)\n\n const { width, height, realShowMax, max } = this.calDataMaxMin()\n const canvas = this._heatmap._renderer.canvas\n const scale = this.calResolutionScale(canvas.width)\n const canvas2 = this.handleResolutionCanvas(canvas, scale)\n const texture = new CanvasTexture(canvas2)\n\n texture.minFilter = NearestFilter\n texture.magFilter = NearestFilter\n\n this._url = canvas.toDataURL('image/png')\n\n const threshold = (0.3 / 1000 * realShowMax)\n const shaderMaterial = new ShaderMaterial({\n uniforms: {\n map: { value: texture },\n granularity: { value: realShowMax / 3 < 300 ? 300 : realShowMax / 3 },\n threshold: { value: threshold > 0.6 ? 0.6 : threshold < 0.25 ? 0.25 : threshold },\n uOpacity: { value: 2.0 },\n uHeight: { value: this._height },\n isPixel: { value: this._isPixel },\n uRange: { value: new Vector2(this._range?.min ?? -max, this._range?.max ?? max) },\n\n },\n vertexShader: heightVertexShader,\n fragmentShader: heightFragmentShader,\n transparent: true,\n side: DoubleSide,\n depthTest: false,\n })\n\n const mesh = new Mesh(new PlaneGeometry(width, height, 500, 500), shaderMaterial)\n\n mesh.rotation.x = -Math.PI / 2\n mesh.position.set(0, 0, 0)\n mesh.renderOrder = 1000\n\n this._attachmentMesh = mesh\n this.add(mesh)\n }\n\n /**\n * set heatmap data\n * @param data\n */\n public setData(data: HeatMapData[]) {\n this.data = [...defaultData, ...data]\n this._canvasBox && use.useScene().domElement.parentElement.removeChild(this._canvasBox)\n this._canvasBox = this.createCanvas()\n this._heatmap = this.createHeatmapTool()\n\n this._heatmap.setData({\n data: this.coordinateTransformation(data),\n max: this.defaultMax,\n })\n\n this.createAttachmentMesh()\n\n // 聚类暂时不实现\n // this.setSuperclusterData()\n // use.useScene().orbitControls.addEventListener('change', () => {\n // const clusters = this.getSuperclusterData()\n // console.log(clusters)\n // })\n }\n\n override removeFromParent(): this {\n super.removeFromParent()\n use.useScene().domElement.parentElement.removeChild(this._canvasBox)\n\n // @ts-ignore\n this._attachmentMesh?.material.dispose()\n\n return this\n }\n}\n\nexport default HeatMap"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const heightVertexShader = "\n varying vec2 vUv;\n uniform float uHeight;\n uniform sampler2D map;\n \n void main() {\n vUv = uv;\n float h = texture2D(map, vUv).a * uHeight;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position.x, position.y, h, 1.0);\n }\n";
2
- export declare const heightFragmentShader = "\n uniform sampler2D map;\n uniform float granularity;\n uniform float threshold;\n varying vec2 vUv;\n uniform float uOpacity;\n uniform bool isPixel;\n\n \nvec4 createPixelGraphEffect(sampler2D map, vec2 vUv, float granularity, float threshold) {\n // \u8BA1\u7B97\u70B9\u9635\u7F51\u683C\n vec2 pixelSize = vec2(1.0) / granularity;\n vec2 cell = floor(vUv / pixelSize);\n vec2 cellUv = fract(vUv / pixelSize);\n\n // \u5728\u6BCF\u4E2A\u7F51\u683C\u4E2D\u5FC3\u91C7\u6837\u539F\u59CB\u7EB9\u7406\n vec4 texColor = texture2D(map, (cell + 0.5) * pixelSize);\n\n // \u5C06UV\u5750\u6807\u65CB\u8F6C45\u5EA6\uFF08\u901A\u8FC7\u5750\u6807\u53D8\u6362\uFF09\n vec2 pointCenter = vec2(0.5, 0.5);\n vec2 rotatedUv = cellUv - pointCenter;\n vec2 rotated = vec2(\n (rotatedUv.x - rotatedUv.y) * 0.7071067811865476, // cos(45\u00B0)/sqrt(2)\n (rotatedUv.x + rotatedUv.y) * 0.7071067811865476 // sin(45\u00B0)/sqrt(2)\n );\n\n // \u4F7F\u7528\u66FC\u54C8\u987F\u8DDD\u79BB\u8BA1\u7B97\u65CB\u8F6C\u540E\u7684\u83F1\u5F62\n float dist = abs(rotated.x) + abs(rotated.y);\n\n // \u6839\u636E\u989C\u8272\u5F3A\u5EA6\u8C03\u6574\u70B9\u7684\u5927\u5C0F\n float intensity = (texColor.r + texColor.g + texColor.b) / 3.0;\n float pointSize = 0.3 * smoothstep(0.0, threshold, intensity);\n\n // \u5982\u679C\u4E0D\u5728\u83F1\u5F62\u8303\u56F4\u5185\u6216\u5F3A\u5EA6\u592A\u4F4E\uFF0C\u5219\u4E22\u5F03\u7247\u6BB5\n if (dist > pointSize || intensity < 0.05) {\n discard;\n }\n\n // \u8FD4\u56DE\u989C\u8272\n return texColor;\n}\n\n\n void main() {\n vec4 texColor = isPixel ? \n createPixelGraphEffect(map, vUv, granularity, threshold) : \n texture2D(map, vUv);\n \n\n float a = texColor.a * uOpacity;\n gl_FragColor = texColor;\n gl_FragColor.a = min(a, 1.0); \n }\n";
1
+ export declare const heightVertexShader = "\n varying vec2 vUv;\n varying vec3 vWorldPosition;\n uniform float uHeight;\n uniform sampler2D map;\n\n void main() {\n vUv = uv;\n vec4 worldPosition = modelMatrix * vec4(position, 1.0);\n vWorldPosition = worldPosition.xyz;\n float h = texture2D(map, vUv).a * uHeight;\n // gl_Position = projectionMatrix * viewMatrix * vec4(worldPosition.x, worldPosition.y, h, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position.x, position.y, h, 1.0);\n }\n";
2
+ export declare const heightFragmentShader = "\n uniform sampler2D map;\n uniform float granularity;\n uniform float threshold;\n uniform vec2 uRange;\n varying vec2 vUv;\n varying vec3 vWorldPosition;\n uniform float uOpacity;\n uniform bool isPixel;\n\n \nvec4 createPixelGraphEffect(sampler2D map, vec2 vUv, float granularity, float threshold, vec2 range, vec3 worldPos) {\n vec2 pixelSize = vec2(1.0) / granularity;\n vec2 cell = floor(vUv / pixelSize);\n vec2 cellUv = fract(vUv / pixelSize);\n\n vec4 texColor = texture2D(map, (cell + 0.5) * pixelSize);\n\n vec2 pointCenter = vec2(0.5, 0.5);\n vec2 rotatedUv = cellUv - pointCenter;\n vec2 rotated = vec2(\n (rotatedUv.x - rotatedUv.y) * 0.7071067811865476,\n (rotatedUv.x + rotatedUv.y) * 0.7071067811865476\n );\n\n float dist = abs(rotated.x) + abs(rotated.y);\n\n float intensity = (texColor.r + texColor.g + texColor.b) / 3.0;\n float pointSize = 0.3 * smoothstep(0.0, threshold, intensity);\n\n if (dist > pointSize || intensity < 0.05) {\n discard;\n }\n\n return texColor;\n}\n\n\n void main() {\n vec4 texColor = isPixel ? \n createPixelGraphEffect(map, vUv, granularity, threshold, uRange, vWorldPosition) : \n texture2D(map, vUv);\n \n float a = texColor.a * uOpacity;\n gl_FragColor = texColor;\n gl_FragColor.a = min(a, 1.0); \n\n if(vWorldPosition.x < uRange.x || vWorldPosition.x > uRange.y || \n vWorldPosition.z < uRange.x || vWorldPosition.z > uRange.y) {\n discard;\n }\n }\n";
@@ -1,4 +1,4 @@
1
- export var heightVertexShader = /* glsl */"\n varying vec2 vUv;\n uniform float uHeight;\n uniform sampler2D map;\n \n void main() {\n vUv = uv;\n float h = texture2D(map, vUv).a * uHeight;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position.x, position.y, h, 1.0);\n }\n";
2
- var pixelGraphFunc = /* glsl */"\nvec4 createPixelGraphEffect(sampler2D map, vec2 vUv, float granularity, float threshold) {\n // \u8BA1\u7B97\u70B9\u9635\u7F51\u683C\n vec2 pixelSize = vec2(1.0) / granularity;\n vec2 cell = floor(vUv / pixelSize);\n vec2 cellUv = fract(vUv / pixelSize);\n\n // \u5728\u6BCF\u4E2A\u7F51\u683C\u4E2D\u5FC3\u91C7\u6837\u539F\u59CB\u7EB9\u7406\n vec4 texColor = texture2D(map, (cell + 0.5) * pixelSize);\n\n // \u5C06UV\u5750\u6807\u65CB\u8F6C45\u5EA6\uFF08\u901A\u8FC7\u5750\u6807\u53D8\u6362\uFF09\n vec2 pointCenter = vec2(0.5, 0.5);\n vec2 rotatedUv = cellUv - pointCenter;\n vec2 rotated = vec2(\n (rotatedUv.x - rotatedUv.y) * 0.7071067811865476, // cos(45\xB0)/sqrt(2)\n (rotatedUv.x + rotatedUv.y) * 0.7071067811865476 // sin(45\xB0)/sqrt(2)\n );\n\n // \u4F7F\u7528\u66FC\u54C8\u987F\u8DDD\u79BB\u8BA1\u7B97\u65CB\u8F6C\u540E\u7684\u83F1\u5F62\n float dist = abs(rotated.x) + abs(rotated.y);\n\n // \u6839\u636E\u989C\u8272\u5F3A\u5EA6\u8C03\u6574\u70B9\u7684\u5927\u5C0F\n float intensity = (texColor.r + texColor.g + texColor.b) / 3.0;\n float pointSize = 0.3 * smoothstep(0.0, threshold, intensity);\n\n // \u5982\u679C\u4E0D\u5728\u83F1\u5F62\u8303\u56F4\u5185\u6216\u5F3A\u5EA6\u592A\u4F4E\uFF0C\u5219\u4E22\u5F03\u7247\u6BB5\n if (dist > pointSize || intensity < 0.05) {\n discard;\n }\n\n // \u8FD4\u56DE\u989C\u8272\n return texColor;\n}\n";
3
- export var heightFragmentShader = /* glsl */"\n uniform sampler2D map;\n uniform float granularity;\n uniform float threshold;\n varying vec2 vUv;\n uniform float uOpacity;\n uniform bool isPixel;\n\n ".concat(pixelGraphFunc, "\n\n void main() {\n vec4 texColor = isPixel ? \n createPixelGraphEffect(map, vUv, granularity, threshold) : \n texture2D(map, vUv);\n \n\n float a = texColor.a * uOpacity;\n gl_FragColor = texColor;\n gl_FragColor.a = min(a, 1.0); \n }\n");
1
+ export var heightVertexShader = /* glsl */"\n varying vec2 vUv;\n varying vec3 vWorldPosition;\n uniform float uHeight;\n uniform sampler2D map;\n\n void main() {\n vUv = uv;\n vec4 worldPosition = modelMatrix * vec4(position, 1.0);\n vWorldPosition = worldPosition.xyz;\n float h = texture2D(map, vUv).a * uHeight;\n // gl_Position = projectionMatrix * viewMatrix * vec4(worldPosition.x, worldPosition.y, h, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position.x, position.y, h, 1.0);\n }\n";
2
+ var pixelGraphFunc = /* glsl */"\nvec4 createPixelGraphEffect(sampler2D map, vec2 vUv, float granularity, float threshold, vec2 range, vec3 worldPos) {\n vec2 pixelSize = vec2(1.0) / granularity;\n vec2 cell = floor(vUv / pixelSize);\n vec2 cellUv = fract(vUv / pixelSize);\n\n vec4 texColor = texture2D(map, (cell + 0.5) * pixelSize);\n\n vec2 pointCenter = vec2(0.5, 0.5);\n vec2 rotatedUv = cellUv - pointCenter;\n vec2 rotated = vec2(\n (rotatedUv.x - rotatedUv.y) * 0.7071067811865476,\n (rotatedUv.x + rotatedUv.y) * 0.7071067811865476\n );\n\n float dist = abs(rotated.x) + abs(rotated.y);\n\n float intensity = (texColor.r + texColor.g + texColor.b) / 3.0;\n float pointSize = 0.3 * smoothstep(0.0, threshold, intensity);\n\n if (dist > pointSize || intensity < 0.05) {\n discard;\n }\n\n return texColor;\n}\n";
3
+ export var heightFragmentShader = /* glsl */"\n uniform sampler2D map;\n uniform float granularity;\n uniform float threshold;\n uniform vec2 uRange;\n varying vec2 vUv;\n varying vec3 vWorldPosition;\n uniform float uOpacity;\n uniform bool isPixel;\n\n ".concat(pixelGraphFunc, "\n\n void main() {\n vec4 texColor = isPixel ? \n createPixelGraphEffect(map, vUv, granularity, threshold, uRange, vWorldPosition) : \n texture2D(map, vUv);\n \n float a = texColor.a * uOpacity;\n gl_FragColor = texColor;\n gl_FragColor.a = min(a, 1.0); \n\n if(vWorldPosition.x < uRange.x || vWorldPosition.x > uRange.y || \n vWorldPosition.z < uRange.x || vWorldPosition.z > uRange.y) {\n discard;\n }\n }\n");
4
4
  //# sourceMappingURL=shader.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["heightVertexShader","pixelGraphFunc","heightFragmentShader","concat"],"sources":["../../../src/business/HeatMap/shader.ts"],"sourcesContent":["export const heightVertexShader = /* glsl */ `\n varying vec2 vUv;\n uniform float uHeight;\n uniform sampler2D map;\n \n void main() {\n vUv = uv;\n float h = texture2D(map, vUv).a * uHeight;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position.x, position.y, h, 1.0);\n }\n`\n\nconst pixelGraphFunc = /* glsl */ `\nvec4 createPixelGraphEffect(sampler2D map, vec2 vUv, float granularity, float threshold) {\n // 计算点阵网格\n vec2 pixelSize = vec2(1.0) / granularity;\n vec2 cell = floor(vUv / pixelSize);\n vec2 cellUv = fract(vUv / pixelSize);\n\n // 在每个网格中心采样原始纹理\n vec4 texColor = texture2D(map, (cell + 0.5) * pixelSize);\n\n // 将UV坐标旋转45度(通过坐标变换)\n vec2 pointCenter = vec2(0.5, 0.5);\n vec2 rotatedUv = cellUv - pointCenter;\n vec2 rotated = vec2(\n (rotatedUv.x - rotatedUv.y) * 0.7071067811865476, // cos(45°)/sqrt(2)\n (rotatedUv.x + rotatedUv.y) * 0.7071067811865476 // sin(45°)/sqrt(2)\n );\n\n // 使用曼哈顿距离计算旋转后的菱形\n float dist = abs(rotated.x) + abs(rotated.y);\n\n // 根据颜色强度调整点的大小\n float intensity = (texColor.r + texColor.g + texColor.b) / 3.0;\n float pointSize = 0.3 * smoothstep(0.0, threshold, intensity);\n\n // 如果不在菱形范围内或强度太低,则丢弃片段\n if (dist > pointSize || intensity < 0.05) {\n discard;\n }\n\n // 返回颜色\n return texColor;\n}\n`\n\nexport const heightFragmentShader = /* glsl */ `\n uniform sampler2D map;\n uniform float granularity;\n uniform float threshold;\n varying vec2 vUv;\n uniform float uOpacity;\n uniform bool isPixel;\n\n ${pixelGraphFunc}\n\n void main() {\n vec4 texColor = isPixel ? \n createPixelGraphEffect(map, vUv, granularity, threshold) : \n texture2D(map, vUv);\n \n\n float a = texColor.a * uOpacity;\n gl_FragColor = texColor;\n gl_FragColor.a = min(a, 1.0); \n }\n`\n"],"mappings":"AAAA,OAAO,IAAMA,kBAAkB,GAAG,8QAUjC;AAED,IAAMC,cAAc,GAAG,w6CAiCtB;AAED,OAAO,IAAMC,oBAAoB,GAAG,gLAAAC,MAAA,CAQhCF,cAAc,0SAYjB"}
1
+ {"version":3,"names":["heightVertexShader","pixelGraphFunc","heightFragmentShader","concat"],"sources":["../../../src/business/HeatMap/shader.ts"],"sourcesContent":["export const heightVertexShader = /* glsl */ `\n varying vec2 vUv;\n varying vec3 vWorldPosition;\n uniform float uHeight;\n uniform sampler2D map;\n\n void main() {\n vUv = uv;\n vec4 worldPosition = modelMatrix * vec4(position, 1.0);\n vWorldPosition = worldPosition.xyz;\n float h = texture2D(map, vUv).a * uHeight;\n // gl_Position = projectionMatrix * viewMatrix * vec4(worldPosition.x, worldPosition.y, h, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position.x, position.y, h, 1.0);\n }\n`\n\nconst pixelGraphFunc = /* glsl */ `\nvec4 createPixelGraphEffect(sampler2D map, vec2 vUv, float granularity, float threshold, vec2 range, vec3 worldPos) {\n vec2 pixelSize = vec2(1.0) / granularity;\n vec2 cell = floor(vUv / pixelSize);\n vec2 cellUv = fract(vUv / pixelSize);\n\n vec4 texColor = texture2D(map, (cell + 0.5) * pixelSize);\n\n vec2 pointCenter = vec2(0.5, 0.5);\n vec2 rotatedUv = cellUv - pointCenter;\n vec2 rotated = vec2(\n (rotatedUv.x - rotatedUv.y) * 0.7071067811865476,\n (rotatedUv.x + rotatedUv.y) * 0.7071067811865476\n );\n\n float dist = abs(rotated.x) + abs(rotated.y);\n\n float intensity = (texColor.r + texColor.g + texColor.b) / 3.0;\n float pointSize = 0.3 * smoothstep(0.0, threshold, intensity);\n\n if (dist > pointSize || intensity < 0.05) {\n discard;\n }\n\n return texColor;\n}\n`\n\nexport const heightFragmentShader = /* glsl */ `\n uniform sampler2D map;\n uniform float granularity;\n uniform float threshold;\n uniform vec2 uRange;\n varying vec2 vUv;\n varying vec3 vWorldPosition;\n uniform float uOpacity;\n uniform bool isPixel;\n\n ${pixelGraphFunc}\n\n void main() {\n vec4 texColor = isPixel ? \n createPixelGraphEffect(map, vUv, granularity, threshold, uRange, vWorldPosition) : \n texture2D(map, vUv);\n \n float a = texColor.a * uOpacity;\n gl_FragColor = texColor;\n gl_FragColor.a = min(a, 1.0); \n\n if(vWorldPosition.x < uRange.x || vWorldPosition.x > uRange.y || \n vWorldPosition.z < uRange.x || vWorldPosition.z > uRange.y) {\n discard;\n }\n }\n`\n"],"mappings":"AAAA,OAAO,IAAMA,kBAAkB,GAAG,yfAcjC;AAED,IAAMC,cAAc,GAAG,u1BA0BtB;AAED,OAAO,IAAMC,oBAAoB,GAAG,wOAAAC,MAAA,CAUhCF,cAAc,weAgBjB"}
@@ -133,18 +133,21 @@ export var MaterialSwitchSystem = /*#__PURE__*/function (_Object3D) {
133
133
  value: function addObject(object) {
134
134
  var _this3 = this;
135
135
  this.switchType('Real');
136
- this.objects.set(object.uuid, object);
136
+
137
+ // @ts-ignore
138
+ var uuid = object.tag === 'entity' ? object.entityId : object.uuid;
139
+ this.objects.set(uuid, object);
137
140
  var finalObject = object.clone();
138
141
  this.generateFinalObject(finalObject);
139
- this.FresnelObjects.set(object.uuid, finalObject);
142
+ this.FresnelObjects.set(uuid, finalObject);
140
143
  this.add(finalObject);
141
144
  var pureObject = object.clone();
142
145
  this.generatePureObject(pureObject);
143
- this.PureObjects.set(object.uuid, pureObject);
146
+ this.PureObjects.set(uuid, pureObject);
144
147
  this.add(pureObject);
145
148
  var frameObject = object.clone();
146
149
  this.generateFrameObject(frameObject);
147
- this.FrameObjects.set(object.uuid, frameObject);
150
+ this.FrameObjects.set(uuid, frameObject);
148
151
  this.add(frameObject);
149
152
  object.traverse(function (child) {
150
153
  if (child.type === 'Mesh') {
@@ -154,7 +157,7 @@ export var MaterialSwitchSystem = /*#__PURE__*/function (_Object3D) {
154
157
  });
155
158
  var realObject = object;
156
159
  this.generateRealObject(realObject);
157
- this.RealObjects.set(object.uuid, realObject);
160
+ this.RealObjects.set(uuid, realObject);
158
161
  this.uniforms.maxSize.value = this.getMaxSize();
159
162
  this.allHide();
160
163
  this.RealObjects.forEach(function (object) {
@@ -169,19 +172,22 @@ export var MaterialSwitchSystem = /*#__PURE__*/function (_Object3D) {
169
172
  }, {
170
173
  key: "removeObject",
171
174
  value: function removeObject(object) {
172
- this.objects.delete(object.uuid);
173
- var realObject = this.RealObjects.get(object.uuid);
174
- var frameObject = this.FrameObjects.get(object.uuid);
175
- var pureObject = this.PureObjects.get(object.uuid);
176
- var fresnelObject = this.FresnelObjects.get(object.uuid);
175
+ // @ts-ignore
176
+ var uuid = object.tag === 'entity' ? object.entityId : object.uuid;
177
+ this.objects.delete(uuid);
178
+ console.log('uuid', uuid);
179
+ var realObject = this.RealObjects.get(uuid);
180
+ var frameObject = this.FrameObjects.get(uuid);
181
+ var pureObject = this.PureObjects.get(uuid);
182
+ var fresnelObject = this.FresnelObjects.get(uuid);
177
183
  realObject.removeFromParent();
178
184
  frameObject.removeFromParent();
179
185
  pureObject.removeFromParent();
180
186
  fresnelObject.removeFromParent();
181
- this.RealObjects.delete(object.uuid);
182
- this.FrameObjects.delete(object.uuid);
183
- this.PureObjects.delete(object.uuid);
184
- this.FresnelObjects.delete(object.uuid);
187
+ this.RealObjects.delete(uuid);
188
+ this.FrameObjects.delete(uuid);
189
+ this.PureObjects.delete(uuid);
190
+ this.FresnelObjects.delete(uuid);
185
191
  this.uniforms.maxSize.value = this.getMaxSize();
186
192
  }
187
193
 
@@ -1 +1 @@
1
- {"version":3,"names":["Box3","Object3D","Vector3","gsap","injectToBaseWrite","injectToFinirMaterial","injectToFrameFade","injectToRealFade","MaterialSwitchSystem","_Object3D","_inherits","_super","_createSuper","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","Map","progress","value","isFresnelFadeIn","isRealFadeIn","isPureFadeIn","isFrameFadeIn","maxSize","generate","_createClass","key","uniforms","allHide","oldObjects","forEach","object","visible","RealObjects","FrameObjects","PureObjects","FresnelObjects","switchType","type","_this$frame","_this2","frame","kill","concat","lastType","to","duration","ease","onComplete","dispatchEvent","style","addObject","_this3","objects","set","uuid","finalObject","clone","generateFinalObject","add","pureObject","generatePureObject","frameObject","generateFrameObject","traverse","child","originalMaterial","has","material","realObject","generateRealObject","getMaxSize","removeObject","delete","get","fresnelObject","removeFromParent","box3","expandByObject","size","getSize","Math","max","x","z"],"sources":["../../../src/business/MaterialSwitch/MaterialSwitchSystem.ts"],"sourcesContent":["import { Box3, Object3D, Vector3, gsap } from '@anov/3d-core'\nimport { injectToBaseWrite, injectToFinirMaterial, injectToFrameFade, injectToRealFade } from './inject'\nimport type { MaterialSwitchSystemInterface } from '.'\n\ntype MaterialSwitchType = 'Real' | 'Fresnel' | 'Frame' | 'Pure'\n\n/**\n * 材质切换系统\n */\nexport class MaterialSwitchSystem extends Object3D implements MaterialSwitchSystemInterface {\n public type: MaterialSwitchType = 'Real'\n public originalMaterial = new Map()\n\n private objects = new Map<string, Object3D>()\n private oldObjects = new Map<string, Object3D>()\n private RealObjects = new Map<string, Object3D>()\n private FrameObjects = new Map<string, Object3D>()\n private PureObjects = new Map<string, Object3D>()\n private FresnelObjects = new Map<string, Object3D>()\n\n private frame: gsap.core.Tween | null = null\n\n public uniforms = {\n progress: { value: 0.0 },\n isFresnelFadeIn: { value: false },\n isRealFadeIn: { value: false },\n isPureFadeIn: { value: false },\n isFrameFadeIn: { value: false },\n maxSize: { value: 0 },\n }\n\n constructor() {\n super()\n\n this.generate()\n }\n\n private generate() {\n this.uniforms.progress.value = 1.0\n\n this.uniforms.isRealFadeIn.value = true\n this.uniforms.isFresnelFadeIn.value = false\n this.uniforms.isPureFadeIn.value = false\n this.uniforms.isFrameFadeIn.value = false\n }\n\n private allHide() {\n this.oldObjects.forEach((object) => {\n object.visible = false\n })\n\n this.RealObjects.forEach((object) => {\n object.visible = false\n })\n\n this.FrameObjects.forEach((object) => {\n object.visible = false\n })\n\n this.PureObjects.forEach((object) => {\n object.visible = false\n })\n\n this.FresnelObjects.forEach((object) => {\n object.visible = false\n })\n }\n\n /**\n * switch type\n * @param type\n */\n public switchType(type: MaterialSwitchType) {\n if (this.type === type)\n return\n\n this.frame?.kill()\n\n this.allHide()\n\n this[`${type}Objects`].forEach((object) => {\n object.visible = true\n })\n\n this[`${this.type}Objects`].forEach((object) => {\n object.visible = true\n })\n\n this.uniforms.progress.value = 0.0\n this.uniforms[`is${this.type}FadeIn`].value = false\n this.uniforms[`is${type}FadeIn`].value = true\n\n const lastType = this.type\n\n this.frame = gsap.to(this.uniforms.progress, {\n value: 1.0,\n duration: 3.0,\n ease: 'linear',\n onComplete: () => {\n this[`${lastType}Objects`].forEach((object) => {\n object.visible = false\n })\n\n this.dispatchEvent({\n type: 'onStyleChanged',\n style: type,\n })\n },\n })\n\n this.type = type\n }\n\n /**\n * add object\n * @param object\n */\n public addObject(object: Object3D) {\n this.switchType('Real')\n\n this.objects.set(object.uuid, object)\n\n const finalObject = object.clone()\n this.generateFinalObject(finalObject)\n this.FresnelObjects.set(object.uuid, finalObject)\n this.add(finalObject)\n\n const pureObject = object.clone()\n this.generatePureObject(pureObject)\n this.PureObjects.set(object.uuid, pureObject)\n this.add(pureObject)\n\n const frameObject = object.clone()\n this.generateFrameObject(frameObject)\n this.FrameObjects.set(object.uuid, frameObject)\n this.add(frameObject)\n\n object.traverse((child: any) => {\n if (child.type === 'Mesh') {\n // only record the first material\n if (!this.originalMaterial.has(child.uuid))\n this.originalMaterial.set(child.uuid, child.material.clone())\n }\n })\n\n const realObject = object\n this.generateRealObject(realObject)\n this.RealObjects.set(object.uuid, realObject)\n\n this.uniforms.maxSize.value = this.getMaxSize()\n\n this.allHide()\n this.RealObjects.forEach((object) => {\n object.visible = true\n })\n }\n\n /**\n * remove object\n * @param object\n */\n public removeObject(object: Object3D) {\n this.objects.delete(object.uuid)\n\n const realObject = this.RealObjects.get(object.uuid)\n const frameObject = this.FrameObjects.get(object.uuid)\n const pureObject = this.PureObjects.get(object.uuid)\n const fresnelObject = this.FresnelObjects.get(object.uuid)\n\n realObject.removeFromParent()\n frameObject.removeFromParent()\n pureObject.removeFromParent()\n fresnelObject.removeFromParent()\n\n this.RealObjects.delete(object.uuid)\n this.FrameObjects.delete(object.uuid)\n this.PureObjects.delete(object.uuid)\n this.FresnelObjects.delete(object.uuid)\n\n this.uniforms.maxSize.value = this.getMaxSize()\n }\n\n /**\n * get max size\n * @param object\n * @returns\n */\n private getMaxSize() {\n const box3 = new Box3()\n this.RealObjects.forEach((object) => {\n box3.expandByObject(object)\n })\n\n const size = box3.getSize(new Vector3())\n const maxSize = Math.max(size.x, size.z)\n return maxSize\n }\n\n /**\n * generate final object\n * @param object\n */\n private generateFinalObject(object: Object3D) {\n injectToFinirMaterial(object, this.uniforms)\n }\n\n /**\n * generate real object\n * @param object\n */\n private generateRealObject(object: Object3D) {\n injectToRealFade(object, this.uniforms)\n }\n\n /**\n * generate pure object\n * @param object\n */\n private generatePureObject(object: Object3D) {\n injectToBaseWrite(object, this.uniforms)\n }\n\n /**\n * generate frame object\n * @param object\n */\n private generateFrameObject(object: Object3D) {\n injectToFrameFade(object, this.uniforms)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Box3","Object3D","Vector3","gsap","injectToBaseWrite","injectToFinirMaterial","injectToFrameFade","injectToRealFade","MaterialSwitchSystem","_Object3D","_inherits","_super","_createSuper","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","Map","progress","value","isFresnelFadeIn","isRealFadeIn","isPureFadeIn","isFrameFadeIn","maxSize","generate","_createClass","key","uniforms","allHide","oldObjects","forEach","object","visible","RealObjects","FrameObjects","PureObjects","FresnelObjects","switchType","type","_this$frame","_this2","frame","kill","concat","lastType","to","duration","ease","onComplete","dispatchEvent","style","addObject","_this3","uuid","tag","entityId","objects","set","finalObject","clone","generateFinalObject","add","pureObject","generatePureObject","frameObject","generateFrameObject","traverse","child","originalMaterial","has","material","realObject","generateRealObject","getMaxSize","removeObject","delete","console","log","get","fresnelObject","removeFromParent","box3","expandByObject","size","getSize","Math","max","x","z"],"sources":["../../../src/business/MaterialSwitch/MaterialSwitchSystem.ts"],"sourcesContent":["import { Box3, Object3D, Vector3, gsap } from '@anov/3d-core'\nimport { injectToBaseWrite, injectToFinirMaterial, injectToFrameFade, injectToRealFade } from './inject'\nimport type { MaterialSwitchSystemInterface } from '.'\n\ntype MaterialSwitchType = 'Real' | 'Fresnel' | 'Frame' | 'Pure'\n\n/**\n * 材质切换系统\n */\nexport class MaterialSwitchSystem extends Object3D implements MaterialSwitchSystemInterface {\n public type: MaterialSwitchType = 'Real'\n public originalMaterial = new Map()\n\n private objects = new Map<string, Object3D>()\n private oldObjects = new Map<string, Object3D>()\n private RealObjects = new Map<string, Object3D>()\n private FrameObjects = new Map<string, Object3D>()\n private PureObjects = new Map<string, Object3D>()\n private FresnelObjects = new Map<string, Object3D>()\n\n private frame: gsap.core.Tween | null = null\n\n public uniforms = {\n progress: { value: 0.0 },\n isFresnelFadeIn: { value: false },\n isRealFadeIn: { value: false },\n isPureFadeIn: { value: false },\n isFrameFadeIn: { value: false },\n maxSize: { value: 0 },\n }\n\n constructor() {\n super()\n\n this.generate()\n }\n\n private generate() {\n this.uniforms.progress.value = 1.0\n\n this.uniforms.isRealFadeIn.value = true\n this.uniforms.isFresnelFadeIn.value = false\n this.uniforms.isPureFadeIn.value = false\n this.uniforms.isFrameFadeIn.value = false\n }\n\n private allHide() {\n this.oldObjects.forEach((object) => {\n object.visible = false\n })\n\n this.RealObjects.forEach((object) => {\n object.visible = false\n })\n\n this.FrameObjects.forEach((object) => {\n object.visible = false\n })\n\n this.PureObjects.forEach((object) => {\n object.visible = false\n })\n\n this.FresnelObjects.forEach((object) => {\n object.visible = false\n })\n }\n\n /**\n * switch type\n * @param type\n */\n public switchType(type: MaterialSwitchType) {\n if (this.type === type)\n return\n\n this.frame?.kill()\n\n this.allHide()\n\n this[`${type}Objects`].forEach((object) => {\n object.visible = true\n })\n\n this[`${this.type}Objects`].forEach((object) => {\n object.visible = true\n })\n\n this.uniforms.progress.value = 0.0\n this.uniforms[`is${this.type}FadeIn`].value = false\n this.uniforms[`is${type}FadeIn`].value = true\n\n const lastType = this.type\n\n this.frame = gsap.to(this.uniforms.progress, {\n value: 1.0,\n duration: 3.0,\n ease: 'linear',\n onComplete: () => {\n this[`${lastType}Objects`].forEach((object) => {\n object.visible = false\n })\n\n this.dispatchEvent({\n type: 'onStyleChanged',\n style: type,\n })\n },\n })\n\n this.type = type\n }\n\n /**\n * add object\n * @param object\n */\n public addObject(object: Object3D) {\n this.switchType('Real')\n\n // @ts-ignore\n const uuid = object.tag === 'entity' ? object.entityId : object.uuid\n\n this.objects.set(uuid, object)\n\n const finalObject = object.clone()\n this.generateFinalObject(finalObject)\n this.FresnelObjects.set(uuid, finalObject)\n this.add(finalObject)\n\n const pureObject = object.clone()\n this.generatePureObject(pureObject)\n this.PureObjects.set(uuid, pureObject)\n this.add(pureObject)\n\n const frameObject = object.clone()\n this.generateFrameObject(frameObject)\n this.FrameObjects.set(uuid, frameObject)\n this.add(frameObject)\n\n object.traverse((child: any) => {\n if (child.type === 'Mesh') {\n // only record the first material\n if (!this.originalMaterial.has(child.uuid))\n this.originalMaterial.set(child.uuid, child.material.clone())\n }\n })\n\n const realObject = object\n this.generateRealObject(realObject)\n this.RealObjects.set(uuid, realObject)\n\n this.uniforms.maxSize.value = this.getMaxSize()\n\n this.allHide()\n this.RealObjects.forEach((object) => {\n object.visible = true\n })\n }\n\n /**\n * remove object\n * @param object\n */\n public removeObject(object: Object3D) {\n // @ts-ignore\n const uuid = object.tag === 'entity' ? object.entityId : object.uuid\n this.objects.delete(uuid)\n\n console.log('uuid', uuid)\n const realObject = this.RealObjects.get(uuid)\n const frameObject = this.FrameObjects.get(uuid)\n const pureObject = this.PureObjects.get(uuid)\n const fresnelObject = this.FresnelObjects.get(uuid)\n\n realObject.removeFromParent()\n frameObject.removeFromParent()\n pureObject.removeFromParent()\n fresnelObject.removeFromParent()\n\n this.RealObjects.delete(uuid)\n this.FrameObjects.delete(uuid)\n this.PureObjects.delete(uuid)\n this.FresnelObjects.delete(uuid)\n\n this.uniforms.maxSize.value = this.getMaxSize()\n }\n\n /**\n * get max size\n * @param object\n * @returns\n */\n private getMaxSize() {\n const box3 = new Box3()\n this.RealObjects.forEach((object) => {\n box3.expandByObject(object)\n })\n\n const size = box3.getSize(new Vector3())\n const maxSize = Math.max(size.x, size.z)\n return maxSize\n }\n\n /**\n * generate final object\n * @param object\n */\n private generateFinalObject(object: Object3D) {\n injectToFinirMaterial(object, this.uniforms)\n }\n\n /**\n * generate real object\n * @param object\n */\n private generateRealObject(object: Object3D) {\n injectToRealFade(object, this.uniforms)\n }\n\n /**\n * generate pure object\n * @param object\n */\n private generatePureObject(object: Object3D) {\n injectToBaseWrite(object, this.uniforms)\n }\n\n /**\n * generate frame object\n * @param object\n */\n private generateFrameObject(object: Object3D) {\n injectToFrameFade(object, this.uniforms)\n }\n}\n"],"mappings":"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"}
@@ -15,7 +15,7 @@ export default class LinkMesh extends ObjectLayer {
15
15
  get vspace(): [number, number];
16
16
  set vspace(newValue: [number, number]);
17
17
  get hspace(): [number, number];
18
- get mesh(): Group | Mesh<import("@anov/3d-core").BufferGeometry<import("@anov/3d-core").NormalBufferAttributes>, import("@anov/3d-core").Material | import("@anov/3d-core").Material[]>;
18
+ get mesh(): Mesh<import("@anov/3d-core").BufferGeometry<import("@anov/3d-core").NormalBufferAttributes>, import("@anov/3d-core").Material | import("@anov/3d-core").Material[]> | Group;
19
19
  setupAnimation(): void;
20
20
  addReloadListener(callback: any): void;
21
21
  removeReloadListener(callback: any): void;
@@ -9,7 +9,7 @@ export default class ParticleMesh extends ObjectLayer {
9
9
  _listeners: Set<unknown>;
10
10
  constructor();
11
11
  get ready(): Promise<boolean>;
12
- get mesh(): Group | Mesh<import("@anov/3d-core").BufferGeometry<import("@anov/3d-core").NormalBufferAttributes>, import("@anov/3d-core").Material | import("@anov/3d-core").Material[]>;
12
+ get mesh(): Mesh<import("@anov/3d-core").BufferGeometry<import("@anov/3d-core").NormalBufferAttributes>, import("@anov/3d-core").Material | import("@anov/3d-core").Material[]> | Group;
13
13
  setupAnimation(): void;
14
14
  addReloadListener(callback: any): void;
15
15
  removeReloadListener(callback: any): void;
@@ -20,7 +20,7 @@ export default class TitleMesh extends ObjectLayer {
20
20
  private _debouncedUpdate;
21
21
  constructor(option: TextOption);
22
22
  get ready(): Promise<boolean>;
23
- get mesh(): Group | Mesh<import("@anov/3d-core").BufferGeometry<import("@anov/3d-core").NormalBufferAttributes>, import("@anov/3d-core").Material | import("@anov/3d-core").Material[]>;
23
+ get mesh(): Mesh<import("@anov/3d-core").BufferGeometry<import("@anov/3d-core").NormalBufferAttributes>, import("@anov/3d-core").Material | import("@anov/3d-core").Material[]> | Group;
24
24
  get value(): string;
25
25
  set value(newValue: string);
26
26
  get fontSize(): number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anov/3d-ability",
3
- "version": "0.0.93",
3
+ "version": "0.0.94",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "license": "MIT",