@soonspacejs/plugin-heat-map 2.5.0-alpha.0 → 2.5.0-alpha.1

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.
@@ -0,0 +1,38 @@
1
+ import SoonSpace, { PlaneIVector2 } from 'soonspacejs';
2
+ import { PluginObject } from 'soonspacejs/types/Library';
3
+ import HeatMap, { DataPoint } from 'heatmap-ts';
4
+ export interface SceneDataPoint extends Omit<DataPoint, 'y'> {
5
+ z: number;
6
+ }
7
+ export interface CreateParam {
8
+ id: string;
9
+ name?: PluginObject['name'];
10
+ data: SceneDataPoint[];
11
+ yAxisHeight: number;
12
+ minPosition: PlaneIVector2;
13
+ maxPosition: PlaneIVector2;
14
+ min?: number;
15
+ max?: number;
16
+ radius?: number;
17
+ }
18
+ interface StoreValue {
19
+ object: PluginObject;
20
+ canvas: HTMLCanvasElement;
21
+ param: CreateParam;
22
+ width: number;
23
+ height: number;
24
+ }
25
+ export default class HeatMapPlugin {
26
+ readonly ssp: SoonSpace;
27
+ hmInstance: HeatMap | null;
28
+ readonly store: Map<string | number, StoreValue>;
29
+ constructor(ssp: SoonSpace);
30
+ create(param: CreateParam): PluginObject;
31
+ setData(id: CreateParam['id'], data: CreateParam['data']): PluginObject | void;
32
+ getById(id: PluginObject['id']): PluginObject | null;
33
+ getByName(name: string): PluginObject[];
34
+ removeById(id: PluginObject['id']): boolean;
35
+ private createInitData;
36
+ private _formatData;
37
+ }
38
+ export {};
package/dist/index.esm.js CHANGED
@@ -1 +1 @@
1
- var t={defaultRadius:40,defaultGradient:{.25:"rgb(0,0,255)",.55:"rgb(0,255,0)",.85:"yellow",1:"rgb(255,0,0)"},defaultMaxOpacity:1,defaultMinOpacity:0,defaultBlur:.85,defaultXField:"x",defaultYField:"y",defaultValueField:"value",plugins:{}},e=function(){function t(){this.eStore={}}return t.prototype.on=function(t,e,a){this.eStore[t]||(this.eStore[t]=[]),this.eStore[t].push((function(t){return e.call(a,t)}))},t.prototype.emit=function(t,e){this.eStore[t]&&this.eStore[t].forEach((function(t){return t(e)}))},t}(),a=function(){function a(a){this.coordinator=new e,this.data=[],this.radi=[],this.min=10,this.max=1,this.xField=a.xField||t.defaultXField,this.yField=a.yField||t.defaultYField,this.valueField=a.valueField||t.defaultValueField,this.radius=a.radius||t.defaultRadius}return a.prototype._organiseData=function(t,e){var a=t[this.xField],i=t[this.yField],s=this.radi,n=this.data,r=this.max,h=this.min,o=t[this.valueField]||1,d=t.radius||this.radius;s[a]||(n[a]=[],s[a]=[]),s[a][i]?n[a][i]+=o:(n[a][i]=o,s[a][i]=d);var u=n[a][i];return u?u>r?(e?this.setDataMax(u):this.max=u,!1):u<h?(e?this.setDataMin(u):this.min=u,!1):void 0:{x:a,y:i,value:o,radius:d,min:h,max:r}},a.prototype._unOrganizeData=function(){for(var t=[],e=0;e<this.radi.length;e++)for(var a=0;a<this.radi[e].length;a++)t.push({x:e,y:a,radius:this.radi[e][a],value:this.radi[e][a]});return{min:this.min,max:this.max,data:t}},a.prototype._onExtremaChange=function(){this.coordinator.emit("extremachange",{min:this.min,max:this.max})},a.prototype.addData=function(t){var e=this._organiseData(t,!0);e&&(0===this.data.length&&(this.min=e.value,this.max=e.value),this.coordinator.emit("renderpartial",{min:this.min,max:this.max,data:[e]}))},a.prototype.setData=function(t){var e=t.data;this.data=[],this.radi=[];for(var a=0;a<e.length;a++)this._organiseData(e[a],!1);return this.min=t.min||0,this.max=t.max||100,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype.setDataMax=function(t){return this.max=t,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype.setDataMin=function(t){return this.min=t,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype._getInternalData=function(){return{max:this.max,min:this.min,data:this.data,radi:this.radi}},a.prototype.getData=function(){return this._unOrganizeData()},a}(),i=function(){function e(t){this.canvas=t.canvas||document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.shadowCanvas=t.shadowCanvas||document.createElement("canvas"),this.shadowCtx=this.shadowCanvas.getContext("2d"),this.width=t.width||512,this.height=t.height||512,this.max=100,this.min=1,this.blur=1,this.opacity=1,this.maxOpacity=1,this.minOpacity=0,this.useGradientOpacity=!1,this.canvas.style.cssText=this.shadowCanvas.style.cssText="position:absolute;left:0;top:0;",t.container&&(t.container.style.position="relative",t.container.appendChild(this.canvas)),this.renderBoundaries=[1e4,1e4,0,0],this.palette=this._getColorPalette(t),this.templates=[],this._setStyles(t)}return e.prototype.renderPartial=function(t){t.data.length>0&&(this._drawAlpha(t),this._colorize())},e.prototype.renderAll=function(t){this._clear(),t.data.length>0&&(this._drawAlpha(this._prepareData(t)),this._colorize())},e.prototype.updateConfig=function(t){t.gradient&&this._updateGradient(t),this._setStyles(t)},e.prototype.setDimensions=function(t,e){this.width=this.canvas.width=this.shadowCanvas.width=t,this.height=this.canvas.height=this.shadowCanvas.height=e},e.prototype.getValueAt=function(t){if(!this.shadowCtx)return 0;var e=this.shadowCtx.getImageData(t.x,t.y,1,1);return Math.abs(this.max-this.min)*(e.data[3]/255)>>0},e.prototype.getDataURL=function(){return this.canvas.toDataURL()},e.prototype._getColorPalette=function(e){var a=e.gradient||t.defaultGradient,i=document.createElement("canvas"),s=i.getContext("2d");if(i.width=256,i.height=1,!s)return new Uint8ClampedArray(1024);var n=s.createLinearGradient(0,0,256,1);for(var r in a)n.addColorStop(Number(r),a[r]);return s.fillStyle=n,s.fillRect(0,0,256,1),s.getImageData(0,0,256,1).data},e.prototype._getPointTemplate=function(t,e){var a=document.createElement("canvas"),i=a.getContext("2d");if(!i)return a;var s=t,n=t;if(a.width=a.height=2*t,1===e)i.beginPath(),i.arc(s,n,t,0,2*Math.PI,!1),i.fillStyle="rgba(0,0,0,1)",i.fill();else{var r=i.createRadialGradient(s,n,t*e,s,n,t);r.addColorStop(0,"rgba(0,0,0,1)"),r.addColorStop(1,"rgba(0,0,0,0)"),i.fillStyle=r,i.fillRect(0,0,2*t,2*t)}return a},e.prototype._prepareData=function(t){for(var e=[],a=t.min,i=t.max,s=t.radi,n=t.data,r=Object.keys(n),h=r.length;h--;)for(var o=r[h],d=Object.keys(n[o]),u=d.length;u--;){var c=d[u],l=n[o][c],p=s[o][c];e.push({x:Number(o),y:Number(c),value:l,radius:p})}return{min:a,max:i,data:e}},e.prototype._setStyles=function(e){this.blur=0===e.blur?0:e.blur||t.defaultBlur,e.backgroundColor&&(this.canvas.style.backgroundColor=e.backgroundColor),this.width=this.canvas.width=this.shadowCanvas.width=e.width||this.width,this.height=this.canvas.height=this.shadowCanvas.height=e.height||this.height,this.opacity=255*(e.opacity||0),this.maxOpacity=255*(e.maxOpacity||t.defaultMaxOpacity),this.minOpacity=255*(e.minOpacity||t.defaultMinOpacity),this.useGradientOpacity=!!e.useGradientOpacity},e.prototype._updateGradient=function(t){this.palette=this._getColorPalette(t)},e.prototype._drawAlpha=function(t){for(var e=this.min=t.min||0,a=this.max=t.max||100,i=t.data||[],s=i.length,n=1-this.blur;s--;){var r=i[s],h=r.x,o=r.y,d=r.radius,u=Math.min(r.value,a),c=h-d,l=o-d;if(!this.shadowCtx)return;var p=void 0;this.templates[d]?p=this.templates[d]:this.templates[d]=p=this._getPointTemplate(d,n);var m=(u-e)/(a-e);this.shadowCtx.globalAlpha=m<.01?.01:m,this.shadowCtx.drawImage(p,c,l),c<this.renderBoundaries[0]&&(this.renderBoundaries[0]=c),l<this.renderBoundaries[1]&&(this.renderBoundaries[1]=l),c+2*d>this.renderBoundaries[2]&&(this.renderBoundaries[2]=c+2*d),l+2*d>this.renderBoundaries[3]&&(this.renderBoundaries[3]=l+2*d)}},e.prototype._colorize=function(){var t=this.renderBoundaries[0],e=this.renderBoundaries[1],a=this.renderBoundaries[2]-t,i=this.renderBoundaries[3]-e,s=this.width,n=this.height;if(t<0&&(t=0),e<0&&(e=0),t+a>s&&(a=s-t),e+i>n&&(i=n-e),this.ctx&&this.shadowCtx){for(var r=this.shadowCtx.getImageData(t,e,a,i),h=3;h<r.data.length;h+=4){var o,d=r.data[h],u=4*d;u&&(o=this.opacity>0?this.opacity:d<this.maxOpacity?d<this.minOpacity?this.minOpacity:d:this.maxOpacity,r.data[h-3]=this.palette[u],r.data[h-2]=this.palette[u+1],r.data[h-1]=this.palette[u+2],r.data[h]=this.useGradientOpacity?this.palette[u+3]:o)}this.ctx.putImageData(r,t,e),this.renderBoundaries=[1e3,1e3,0,0]}},e.prototype._clear=function(){this.ctx&&this.shadowCtx&&(this.ctx.clearRect(0,0,this.width,this.height),this.shadowCtx.clearRect(0,0,this.width,this.height))},e}(),s=function(){function e(t){this.config=t,this.renderer=new i(this.config),this.store=new a(this.config),this._init()}return e.prototype._init=function(){var e=this;this.store.coordinator.on("renderpartial",this.renderer.renderPartial,this.renderer),this.store.coordinator.on("renderall",this.renderer.renderAll,this.renderer),this.store.coordinator.on("extremachange",(function(a){e.config.onExtremaChange&&e.config.onExtremaChange({min:a.min,max:a.max,gradient:e.config.gradient||t.defaultGradient})}))},e.prototype.addData=function(t){return this.store.addData(t),this},e.prototype.setData=function(t){return this.store.setData(t),this},e.prototype.setDataMaxx=function(t){return this.store.setDataMax(t),this},e.prototype.setDataMin=function(t){return this.store.setDataMin(t),this},e.prototype.repaint=function(){return this.store.coordinator.emit("renderall",this.store._getInternalData()),this},e.prototype.getData=function(){return this.store.getData()},e.prototype.getDataURL=function(){return this.renderer.getDataURL()},e.prototype.getValueAt=function(t){return this.renderer.getValueAt(t)},e}();export default class{constructor(t){this.ssp=t,this.hmInstance=null,this.store=new Map}create(t){const{id:e,name:a,yAxisHeight:i,minPosition:s,maxPosition:n,data:r,min:h=0,max:o=100,radius:d}=t,u=new this.ssp.THREE.Vector3((n.x+s.x)/2,i,(n.z+s.z)/2),c=n.x-s.x,l=n.z-s.z,p=this.createInitData(d),{canvas:m,hmInstance:g}=p;g.renderer.updateConfig({width:c,height:l}),g.setData({max:o,min:h,data:r.map((t=>Object.assign(Object.assign({},t),{x:t.x-s.x,y:t.z-s.z})))});const f=new this.ssp.THREE.PlaneBufferGeometry(c,l),x=new this.ssp.THREE.CanvasTexture(m),y=new this.ssp.THREE.MeshPhongMaterial({map:x,transparent:!0}),v=new this.ssp.library.BaseMesh(f,y,{id:e,name:a}),w=this.ssp.createPluginObject({id:e,name:a,position:u.clone(),rotation:{x:-Math.PI/2,y:0,z:0}},v);return this.store.set(e,{object:w,canvas:m,param:t}),w}setData(t,e){const a=this.store.get(t);if(a){const{object:t,canvas:i,param:s}=a,{minPosition:n}=s,r=this.createInitData(),{canvas:h,hmInstance:o}=r;o.renderer.updateConfig({width:i.width,height:i.height}),o.setData({data:e.map((t=>Object.assign(Object.assign({},t),{x:t.x-n.x,y:t.z-n.z})))});const d=t.children[0].material;return this.ssp.render((()=>{const t=new this.ssp.THREE.CanvasTexture(h);d.map=t,d.version++})),t}return console.warn(`In soonspacejs: 插件(plugin-heat-map)未找到 id 为 '"${t}"' 的热力图对象!`)}getById(t){return this.ssp.getPluginObjectById(t)}getByName(t){return this.ssp.getPluginObjectByName(t)}removeById(t){return!!this.store.has(t)&&(this.ssp.removePluginObjectById(t),this.store.delete(t),!0)}createInitData(t){const e=document.createElement("canvas");e.width=512,e.height=512;return{canvas:e,hmInstance:this.hmInstance=new s({canvas:e,radius:t})}}}
1
+ var t={defaultRadius:40,defaultGradient:{.25:"rgb(0,0,255)",.55:"rgb(0,255,0)",.85:"yellow",1:"rgb(255,0,0)"},defaultMaxOpacity:1,defaultMinOpacity:0,defaultBlur:.85,defaultXField:"x",defaultYField:"y",defaultValueField:"value",plugins:{}},e=function(){function t(){this.eStore={}}return t.prototype.on=function(t,e,a){this.eStore[t]||(this.eStore[t]=[]),this.eStore[t].push((function(t){return e.call(a,t)}))},t.prototype.emit=function(t,e){this.eStore[t]&&this.eStore[t].forEach((function(t){return t(e)}))},t}(),a=function(){function a(a){this.coordinator=new e,this.data=[],this.radi=[],this.min=10,this.max=1,this.xField=a.xField||t.defaultXField,this.yField=a.yField||t.defaultYField,this.valueField=a.valueField||t.defaultValueField,this.radius=a.radius||t.defaultRadius}return a.prototype._organiseData=function(t,e){var a=t[this.xField],i=t[this.yField],s=this.radi,r=this.data,n=this.max,h=this.min,o=t[this.valueField]||1,d=t.radius||this.radius;s[a]||(r[a]=[],s[a]=[]),s[a][i]?r[a][i]+=o:(r[a][i]=o,s[a][i]=d);var c=r[a][i];return c?c>n?(e?this.setDataMax(c):this.max=c,!1):c<h?(e?this.setDataMin(c):this.min=c,!1):void 0:{x:a,y:i,value:o,radius:d,min:h,max:n}},a.prototype._unOrganizeData=function(){for(var t=[],e=0;e<this.radi.length;e++)for(var a=0;a<this.radi[e].length;a++)t.push({x:e,y:a,radius:this.radi[e][a],value:this.radi[e][a]});return{min:this.min,max:this.max,data:t}},a.prototype._onExtremaChange=function(){this.coordinator.emit("extremachange",{min:this.min,max:this.max})},a.prototype.addData=function(t){var e=this._organiseData(t,!0);e&&(0===this.data.length&&(this.min=e.value,this.max=e.value),this.coordinator.emit("renderpartial",{min:this.min,max:this.max,data:[e]}))},a.prototype.setData=function(t){var e=t.data;this.data=[],this.radi=[];for(var a=0;a<e.length;a++)this._organiseData(e[a],!1);return this.min=t.min||0,this.max=t.max||100,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype.setDataMax=function(t){return this.max=t,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype.setDataMin=function(t){return this.min=t,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype._getInternalData=function(){return{max:this.max,min:this.min,data:this.data,radi:this.radi}},a.prototype.getData=function(){return this._unOrganizeData()},a}(),i=function(){function e(t){this.canvas=t.canvas||document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.shadowCanvas=t.shadowCanvas||document.createElement("canvas"),this.shadowCtx=this.shadowCanvas.getContext("2d"),this.width=t.width||512,this.height=t.height||512,this.max=100,this.min=1,this.blur=1,this.opacity=1,this.maxOpacity=1,this.minOpacity=0,this.useGradientOpacity=!1,this.canvas.style.cssText=this.shadowCanvas.style.cssText="position:absolute;left:0;top:0;",t.container&&(t.container.style.position="relative",t.container.appendChild(this.canvas)),this.renderBoundaries=[1e4,1e4,0,0],this.palette=this._getColorPalette(t),this.templates=[],this._setStyles(t)}return e.prototype.renderPartial=function(t){t.data.length>0&&(this._drawAlpha(t),this._colorize())},e.prototype.renderAll=function(t){this._clear(),t.data.length>0&&(this._drawAlpha(this._prepareData(t)),this._colorize())},e.prototype.updateConfig=function(t){t.gradient&&this._updateGradient(t),this._setStyles(t)},e.prototype.setDimensions=function(t,e){this.width=this.canvas.width=this.shadowCanvas.width=t,this.height=this.canvas.height=this.shadowCanvas.height=e},e.prototype.getValueAt=function(t){if(!this.shadowCtx)return 0;var e=this.shadowCtx.getImageData(t.x,t.y,1,1);return Math.abs(this.max-this.min)*(e.data[3]/255)>>0},e.prototype.getDataURL=function(){return this.canvas.toDataURL()},e.prototype._getColorPalette=function(e){var a=e.gradient||t.defaultGradient,i=document.createElement("canvas"),s=i.getContext("2d");if(i.width=256,i.height=1,!s)return new Uint8ClampedArray(1024);var r=s.createLinearGradient(0,0,256,1);for(var n in a)r.addColorStop(Number(n),a[n]);return s.fillStyle=r,s.fillRect(0,0,256,1),s.getImageData(0,0,256,1).data},e.prototype._getPointTemplate=function(t,e){var a=document.createElement("canvas"),i=a.getContext("2d");if(!i)return a;var s=t,r=t;if(a.width=a.height=2*t,1===e)i.beginPath(),i.arc(s,r,t,0,2*Math.PI,!1),i.fillStyle="rgba(0,0,0,1)",i.fill();else{var n=i.createRadialGradient(s,r,t*e,s,r,t);n.addColorStop(0,"rgba(0,0,0,1)"),n.addColorStop(1,"rgba(0,0,0,0)"),i.fillStyle=n,i.fillRect(0,0,2*t,2*t)}return a},e.prototype._prepareData=function(t){for(var e=[],a=t.min,i=t.max,s=t.radi,r=t.data,n=Object.keys(r),h=n.length;h--;)for(var o=n[h],d=Object.keys(r[o]),c=d.length;c--;){var u=d[c],l=r[o][u],p=s[o][u];e.push({x:Number(o),y:Number(u),value:l,radius:p})}return{min:a,max:i,data:e}},e.prototype._setStyles=function(e){this.blur=0===e.blur?0:e.blur||t.defaultBlur,e.backgroundColor&&(this.canvas.style.backgroundColor=e.backgroundColor),this.width=this.canvas.width=this.shadowCanvas.width=e.width||this.width,this.height=this.canvas.height=this.shadowCanvas.height=e.height||this.height,this.opacity=255*(e.opacity||0),this.maxOpacity=255*(e.maxOpacity||t.defaultMaxOpacity),this.minOpacity=255*(e.minOpacity||t.defaultMinOpacity),this.useGradientOpacity=!!e.useGradientOpacity},e.prototype._updateGradient=function(t){this.palette=this._getColorPalette(t)},e.prototype._drawAlpha=function(t){for(var e=this.min=t.min||0,a=this.max=t.max||100,i=t.data||[],s=i.length,r=1-this.blur;s--;){var n=i[s],h=n.x,o=n.y,d=n.radius,c=Math.min(n.value,a),u=h-d,l=o-d;if(!this.shadowCtx)return;var p=void 0;this.templates[d]?p=this.templates[d]:this.templates[d]=p=this._getPointTemplate(d,r);var m=(c-e)/(a-e);this.shadowCtx.globalAlpha=m<.01?.01:m,this.shadowCtx.drawImage(p,u,l),u<this.renderBoundaries[0]&&(this.renderBoundaries[0]=u),l<this.renderBoundaries[1]&&(this.renderBoundaries[1]=l),u+2*d>this.renderBoundaries[2]&&(this.renderBoundaries[2]=u+2*d),l+2*d>this.renderBoundaries[3]&&(this.renderBoundaries[3]=l+2*d)}},e.prototype._colorize=function(){var t=this.renderBoundaries[0],e=this.renderBoundaries[1],a=this.renderBoundaries[2]-t,i=this.renderBoundaries[3]-e,s=this.width,r=this.height;if(t<0&&(t=0),e<0&&(e=0),t+a>s&&(a=s-t),e+i>r&&(i=r-e),this.ctx&&this.shadowCtx){for(var n=this.shadowCtx.getImageData(t,e,a,i),h=3;h<n.data.length;h+=4){var o,d=n.data[h],c=4*d;c&&(o=this.opacity>0?this.opacity:d<this.maxOpacity?d<this.minOpacity?this.minOpacity:d:this.maxOpacity,n.data[h-3]=this.palette[c],n.data[h-2]=this.palette[c+1],n.data[h-1]=this.palette[c+2],n.data[h]=this.useGradientOpacity?this.palette[c+3]:o)}this.ctx.putImageData(n,t,e),this.renderBoundaries=[1e3,1e3,0,0]}},e.prototype._clear=function(){this.ctx&&this.shadowCtx&&(this.ctx.clearRect(0,0,this.width,this.height),this.shadowCtx.clearRect(0,0,this.width,this.height))},e}(),s=function(){function e(t){this.config=t,this.renderer=new i(this.config),this.store=new a(this.config),this._init()}return e.prototype._init=function(){var e=this;this.store.coordinator.on("renderpartial",this.renderer.renderPartial,this.renderer),this.store.coordinator.on("renderall",this.renderer.renderAll,this.renderer),this.store.coordinator.on("extremachange",(function(a){e.config.onExtremaChange&&e.config.onExtremaChange({min:a.min,max:a.max,gradient:e.config.gradient||t.defaultGradient})}))},e.prototype.addData=function(t){return this.store.addData(t),this},e.prototype.setData=function(t){return this.store.setData(t),this},e.prototype.setDataMaxx=function(t){return this.store.setDataMax(t),this},e.prototype.setDataMin=function(t){return this.store.setDataMin(t),this},e.prototype.repaint=function(){return this.store.coordinator.emit("renderall",this.store._getInternalData()),this},e.prototype.getData=function(){return this.store.getData()},e.prototype.getDataURL=function(){return this.renderer.getDataURL()},e.prototype.getValueAt=function(t){return this.renderer.getValueAt(t)},e}();class r{constructor(t){this.ssp=t,this.hmInstance=null,this.store=new Map}create(t){const{id:e,name:a,yAxisHeight:i,minPosition:s,maxPosition:r,data:n,min:h=0,max:o=100,radius:d=100}=t,c=new this.ssp.THREE.Vector3((r.x+s.x)/2,i,(r.z+s.z)/2),u=r.x-s.x,l=r.z-s.z,p=this.createInitData(d),{canvas:m,hmInstance:g}=p;g.setData({max:o,min:h,data:this._formatData(n,s,u,l)});const f=new this.ssp.THREE.PlaneBufferGeometry(u,l),y=new this.ssp.THREE.CanvasTexture(m),x=new this.ssp.THREE.MeshStandardMaterial({map:y,depthWrite:!1,transparent:!0}),v=new this.ssp.library.BaseMesh(f,x,{id:e,name:a});v.renderOrder=0;const w=this.ssp.createPluginObject({id:e,name:a,position:c.clone(),rotation:{x:-Math.PI/2,y:0,z:0}},v);return this.store.set(e,{object:w,canvas:m,param:t,width:u,height:l}),w}setData(t,e){const a=this.store.get(t);if(a){const{object:t,canvas:i,param:{minPosition:s},width:r,height:n}=a,h=this.createInitData(),{canvas:o,hmInstance:d}=h;d.renderer.updateConfig({width:i.width,height:i.height}),d.setData({data:this._formatData(e,s,r,n)});const c=t.children[0].material;return this.ssp.render((()=>{const t=new this.ssp.THREE.CanvasTexture(o);c.map=t,c.version++})),t}return console.warn(`In soonspacejs: 插件(plugin-heat-map)未找到 id 为 '"${t}"' 的热力图对象!`)}getById(t){return this.ssp.getObjectById(t)}getByName(t){return this.ssp.getObjectByName(t)}removeById(t){return!!this.store.has(t)&&(this.ssp.removeObjectById(t),this.store.delete(t),!0)}createInitData(t){const e=document.createElement("canvas");e.width=512,e.height=512;return{canvas:e,hmInstance:this.hmInstance=new s({canvas:e,radius:t})}}_formatData(t,e,a,i){return t.map((t=>Object.assign(Object.assign({},t),{x:(t.x-e.x)/a*512|0,y:(t.z-e.z)/i*512|0})))}}export{r as default};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var HeatMapPlugin=function(){"use strict";var t={defaultRadius:40,defaultGradient:{.25:"rgb(0,0,255)",.55:"rgb(0,255,0)",.85:"yellow",1:"rgb(255,0,0)"},defaultMaxOpacity:1,defaultMinOpacity:0,defaultBlur:.85,defaultXField:"x",defaultYField:"y",defaultValueField:"value",plugins:{}},e=function(){function t(){this.eStore={}}return t.prototype.on=function(t,e,a){this.eStore[t]||(this.eStore[t]=[]),this.eStore[t].push((function(t){return e.call(a,t)}))},t.prototype.emit=function(t,e){this.eStore[t]&&this.eStore[t].forEach((function(t){return t(e)}))},t}(),a=function(){function a(a){this.coordinator=new e,this.data=[],this.radi=[],this.min=10,this.max=1,this.xField=a.xField||t.defaultXField,this.yField=a.yField||t.defaultYField,this.valueField=a.valueField||t.defaultValueField,this.radius=a.radius||t.defaultRadius}return a.prototype._organiseData=function(t,e){var a=t[this.xField],i=t[this.yField],s=this.radi,n=this.data,r=this.max,h=this.min,o=t[this.valueField]||1,d=t.radius||this.radius;s[a]||(n[a]=[],s[a]=[]),s[a][i]?n[a][i]+=o:(n[a][i]=o,s[a][i]=d);var u=n[a][i];return u?u>r?(e?this.setDataMax(u):this.max=u,!1):u<h?(e?this.setDataMin(u):this.min=u,!1):void 0:{x:a,y:i,value:o,radius:d,min:h,max:r}},a.prototype._unOrganizeData=function(){for(var t=[],e=0;e<this.radi.length;e++)for(var a=0;a<this.radi[e].length;a++)t.push({x:e,y:a,radius:this.radi[e][a],value:this.radi[e][a]});return{min:this.min,max:this.max,data:t}},a.prototype._onExtremaChange=function(){this.coordinator.emit("extremachange",{min:this.min,max:this.max})},a.prototype.addData=function(t){var e=this._organiseData(t,!0);e&&(0===this.data.length&&(this.min=e.value,this.max=e.value),this.coordinator.emit("renderpartial",{min:this.min,max:this.max,data:[e]}))},a.prototype.setData=function(t){var e=t.data;this.data=[],this.radi=[];for(var a=0;a<e.length;a++)this._organiseData(e[a],!1);return this.min=t.min||0,this.max=t.max||100,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype.setDataMax=function(t){return this.max=t,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype.setDataMin=function(t){return this.min=t,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype._getInternalData=function(){return{max:this.max,min:this.min,data:this.data,radi:this.radi}},a.prototype.getData=function(){return this._unOrganizeData()},a}(),i=function(){function e(t){this.canvas=t.canvas||document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.shadowCanvas=t.shadowCanvas||document.createElement("canvas"),this.shadowCtx=this.shadowCanvas.getContext("2d"),this.width=t.width||512,this.height=t.height||512,this.max=100,this.min=1,this.blur=1,this.opacity=1,this.maxOpacity=1,this.minOpacity=0,this.useGradientOpacity=!1,this.canvas.style.cssText=this.shadowCanvas.style.cssText="position:absolute;left:0;top:0;",t.container&&(t.container.style.position="relative",t.container.appendChild(this.canvas)),this.renderBoundaries=[1e4,1e4,0,0],this.palette=this._getColorPalette(t),this.templates=[],this._setStyles(t)}return e.prototype.renderPartial=function(t){t.data.length>0&&(this._drawAlpha(t),this._colorize())},e.prototype.renderAll=function(t){this._clear(),t.data.length>0&&(this._drawAlpha(this._prepareData(t)),this._colorize())},e.prototype.updateConfig=function(t){t.gradient&&this._updateGradient(t),this._setStyles(t)},e.prototype.setDimensions=function(t,e){this.width=this.canvas.width=this.shadowCanvas.width=t,this.height=this.canvas.height=this.shadowCanvas.height=e},e.prototype.getValueAt=function(t){if(!this.shadowCtx)return 0;var e=this.shadowCtx.getImageData(t.x,t.y,1,1);return Math.abs(this.max-this.min)*(e.data[3]/255)>>0},e.prototype.getDataURL=function(){return this.canvas.toDataURL()},e.prototype._getColorPalette=function(e){var a=e.gradient||t.defaultGradient,i=document.createElement("canvas"),s=i.getContext("2d");if(i.width=256,i.height=1,!s)return new Uint8ClampedArray(1024);var n=s.createLinearGradient(0,0,256,1);for(var r in a)n.addColorStop(Number(r),a[r]);return s.fillStyle=n,s.fillRect(0,0,256,1),s.getImageData(0,0,256,1).data},e.prototype._getPointTemplate=function(t,e){var a=document.createElement("canvas"),i=a.getContext("2d");if(!i)return a;var s=t,n=t;if(a.width=a.height=2*t,1===e)i.beginPath(),i.arc(s,n,t,0,2*Math.PI,!1),i.fillStyle="rgba(0,0,0,1)",i.fill();else{var r=i.createRadialGradient(s,n,t*e,s,n,t);r.addColorStop(0,"rgba(0,0,0,1)"),r.addColorStop(1,"rgba(0,0,0,0)"),i.fillStyle=r,i.fillRect(0,0,2*t,2*t)}return a},e.prototype._prepareData=function(t){for(var e=[],a=t.min,i=t.max,s=t.radi,n=t.data,r=Object.keys(n),h=r.length;h--;)for(var o=r[h],d=Object.keys(n[o]),u=d.length;u--;){var c=d[u],l=n[o][c],p=s[o][c];e.push({x:Number(o),y:Number(c),value:l,radius:p})}return{min:a,max:i,data:e}},e.prototype._setStyles=function(e){this.blur=0===e.blur?0:e.blur||t.defaultBlur,e.backgroundColor&&(this.canvas.style.backgroundColor=e.backgroundColor),this.width=this.canvas.width=this.shadowCanvas.width=e.width||this.width,this.height=this.canvas.height=this.shadowCanvas.height=e.height||this.height,this.opacity=255*(e.opacity||0),this.maxOpacity=255*(e.maxOpacity||t.defaultMaxOpacity),this.minOpacity=255*(e.minOpacity||t.defaultMinOpacity),this.useGradientOpacity=!!e.useGradientOpacity},e.prototype._updateGradient=function(t){this.palette=this._getColorPalette(t)},e.prototype._drawAlpha=function(t){for(var e=this.min=t.min||0,a=this.max=t.max||100,i=t.data||[],s=i.length,n=1-this.blur;s--;){var r=i[s],h=r.x,o=r.y,d=r.radius,u=Math.min(r.value,a),c=h-d,l=o-d;if(!this.shadowCtx)return;var p=void 0;this.templates[d]?p=this.templates[d]:this.templates[d]=p=this._getPointTemplate(d,n);var m=(u-e)/(a-e);this.shadowCtx.globalAlpha=m<.01?.01:m,this.shadowCtx.drawImage(p,c,l),c<this.renderBoundaries[0]&&(this.renderBoundaries[0]=c),l<this.renderBoundaries[1]&&(this.renderBoundaries[1]=l),c+2*d>this.renderBoundaries[2]&&(this.renderBoundaries[2]=c+2*d),l+2*d>this.renderBoundaries[3]&&(this.renderBoundaries[3]=l+2*d)}},e.prototype._colorize=function(){var t=this.renderBoundaries[0],e=this.renderBoundaries[1],a=this.renderBoundaries[2]-t,i=this.renderBoundaries[3]-e,s=this.width,n=this.height;if(t<0&&(t=0),e<0&&(e=0),t+a>s&&(a=s-t),e+i>n&&(i=n-e),this.ctx&&this.shadowCtx){for(var r=this.shadowCtx.getImageData(t,e,a,i),h=3;h<r.data.length;h+=4){var o,d=r.data[h],u=4*d;u&&(o=this.opacity>0?this.opacity:d<this.maxOpacity?d<this.minOpacity?this.minOpacity:d:this.maxOpacity,r.data[h-3]=this.palette[u],r.data[h-2]=this.palette[u+1],r.data[h-1]=this.palette[u+2],r.data[h]=this.useGradientOpacity?this.palette[u+3]:o)}this.ctx.putImageData(r,t,e),this.renderBoundaries=[1e3,1e3,0,0]}},e.prototype._clear=function(){this.ctx&&this.shadowCtx&&(this.ctx.clearRect(0,0,this.width,this.height),this.shadowCtx.clearRect(0,0,this.width,this.height))},e}(),s=function(){function e(t){this.config=t,this.renderer=new i(this.config),this.store=new a(this.config),this._init()}return e.prototype._init=function(){var e=this;this.store.coordinator.on("renderpartial",this.renderer.renderPartial,this.renderer),this.store.coordinator.on("renderall",this.renderer.renderAll,this.renderer),this.store.coordinator.on("extremachange",(function(a){e.config.onExtremaChange&&e.config.onExtremaChange({min:a.min,max:a.max,gradient:e.config.gradient||t.defaultGradient})}))},e.prototype.addData=function(t){return this.store.addData(t),this},e.prototype.setData=function(t){return this.store.setData(t),this},e.prototype.setDataMaxx=function(t){return this.store.setDataMax(t),this},e.prototype.setDataMin=function(t){return this.store.setDataMin(t),this},e.prototype.repaint=function(){return this.store.coordinator.emit("renderall",this.store._getInternalData()),this},e.prototype.getData=function(){return this.store.getData()},e.prototype.getDataURL=function(){return this.renderer.getDataURL()},e.prototype.getValueAt=function(t){return this.renderer.getValueAt(t)},e}();return class{constructor(t){this.ssp=t,this.hmInstance=null,this.store=new Map}create(t){const{id:e,name:a,yAxisHeight:i,minPosition:s,maxPosition:n,data:r,min:h=0,max:o=100,radius:d}=t,u=new this.ssp.THREE.Vector3((n.x+s.x)/2,i,(n.z+s.z)/2),c=n.x-s.x,l=n.z-s.z,p=this.createInitData(d),{canvas:m,hmInstance:g}=p;g.renderer.updateConfig({width:c,height:l}),g.setData({max:o,min:h,data:r.map((t=>Object.assign(Object.assign({},t),{x:t.x-s.x,y:t.z-s.z})))});const f=new this.ssp.THREE.PlaneBufferGeometry(c,l),y=new this.ssp.THREE.CanvasTexture(m),x=new this.ssp.THREE.MeshPhongMaterial({map:y,transparent:!0}),v=new this.ssp.library.BaseMesh(f,x,{id:e,name:a}),w=this.ssp.createPluginObject({id:e,name:a,position:u.clone(),rotation:{x:-Math.PI/2,y:0,z:0}},v);return this.store.set(e,{object:w,canvas:m,param:t}),w}setData(t,e){const a=this.store.get(t);if(a){const{object:t,canvas:i,param:s}=a,{minPosition:n}=s,r=this.createInitData(),{canvas:h,hmInstance:o}=r;o.renderer.updateConfig({width:i.width,height:i.height}),o.setData({data:e.map((t=>Object.assign(Object.assign({},t),{x:t.x-n.x,y:t.z-n.z})))});const d=t.children[0].material;return this.ssp.render((()=>{const t=new this.ssp.THREE.CanvasTexture(h);d.map=t,d.version++})),t}return console.warn(`In soonspacejs: 插件(plugin-heat-map)未找到 id 为 '"${t}"' 的热力图对象!`)}getById(t){return this.ssp.getPluginObjectById(t)}getByName(t){return this.ssp.getPluginObjectByName(t)}removeById(t){return!!this.store.has(t)&&(this.ssp.removePluginObjectById(t),this.store.delete(t),!0)}createInitData(t){const e=document.createElement("canvas");e.width=512,e.height=512;return{canvas:e,hmInstance:this.hmInstance=new s({canvas:e,radius:t})}}}}();
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).HeatMapPlugin=e()}(this,(function(){"use strict";var t={defaultRadius:40,defaultGradient:{.25:"rgb(0,0,255)",.55:"rgb(0,255,0)",.85:"yellow",1:"rgb(255,0,0)"},defaultMaxOpacity:1,defaultMinOpacity:0,defaultBlur:.85,defaultXField:"x",defaultYField:"y",defaultValueField:"value",plugins:{}},e=function(){function t(){this.eStore={}}return t.prototype.on=function(t,e,a){this.eStore[t]||(this.eStore[t]=[]),this.eStore[t].push((function(t){return e.call(a,t)}))},t.prototype.emit=function(t,e){this.eStore[t]&&this.eStore[t].forEach((function(t){return t(e)}))},t}(),a=function(){function a(a){this.coordinator=new e,this.data=[],this.radi=[],this.min=10,this.max=1,this.xField=a.xField||t.defaultXField,this.yField=a.yField||t.defaultYField,this.valueField=a.valueField||t.defaultValueField,this.radius=a.radius||t.defaultRadius}return a.prototype._organiseData=function(t,e){var a=t[this.xField],i=t[this.yField],n=this.radi,s=this.data,r=this.max,h=this.min,o=t[this.valueField]||1,d=t.radius||this.radius;n[a]||(s[a]=[],n[a]=[]),n[a][i]?s[a][i]+=o:(s[a][i]=o,n[a][i]=d);var u=s[a][i];return u?u>r?(e?this.setDataMax(u):this.max=u,!1):u<h?(e?this.setDataMin(u):this.min=u,!1):void 0:{x:a,y:i,value:o,radius:d,min:h,max:r}},a.prototype._unOrganizeData=function(){for(var t=[],e=0;e<this.radi.length;e++)for(var a=0;a<this.radi[e].length;a++)t.push({x:e,y:a,radius:this.radi[e][a],value:this.radi[e][a]});return{min:this.min,max:this.max,data:t}},a.prototype._onExtremaChange=function(){this.coordinator.emit("extremachange",{min:this.min,max:this.max})},a.prototype.addData=function(t){var e=this._organiseData(t,!0);e&&(0===this.data.length&&(this.min=e.value,this.max=e.value),this.coordinator.emit("renderpartial",{min:this.min,max:this.max,data:[e]}))},a.prototype.setData=function(t){var e=t.data;this.data=[],this.radi=[];for(var a=0;a<e.length;a++)this._organiseData(e[a],!1);return this.min=t.min||0,this.max=t.max||100,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype.setDataMax=function(t){return this.max=t,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype.setDataMin=function(t){return this.min=t,this._onExtremaChange(),this.coordinator.emit("renderall",this._getInternalData()),this},a.prototype._getInternalData=function(){return{max:this.max,min:this.min,data:this.data,radi:this.radi}},a.prototype.getData=function(){return this._unOrganizeData()},a}(),i=function(){function e(t){this.canvas=t.canvas||document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.shadowCanvas=t.shadowCanvas||document.createElement("canvas"),this.shadowCtx=this.shadowCanvas.getContext("2d"),this.width=t.width||512,this.height=t.height||512,this.max=100,this.min=1,this.blur=1,this.opacity=1,this.maxOpacity=1,this.minOpacity=0,this.useGradientOpacity=!1,this.canvas.style.cssText=this.shadowCanvas.style.cssText="position:absolute;left:0;top:0;",t.container&&(t.container.style.position="relative",t.container.appendChild(this.canvas)),this.renderBoundaries=[1e4,1e4,0,0],this.palette=this._getColorPalette(t),this.templates=[],this._setStyles(t)}return e.prototype.renderPartial=function(t){t.data.length>0&&(this._drawAlpha(t),this._colorize())},e.prototype.renderAll=function(t){this._clear(),t.data.length>0&&(this._drawAlpha(this._prepareData(t)),this._colorize())},e.prototype.updateConfig=function(t){t.gradient&&this._updateGradient(t),this._setStyles(t)},e.prototype.setDimensions=function(t,e){this.width=this.canvas.width=this.shadowCanvas.width=t,this.height=this.canvas.height=this.shadowCanvas.height=e},e.prototype.getValueAt=function(t){if(!this.shadowCtx)return 0;var e=this.shadowCtx.getImageData(t.x,t.y,1,1);return Math.abs(this.max-this.min)*(e.data[3]/255)>>0},e.prototype.getDataURL=function(){return this.canvas.toDataURL()},e.prototype._getColorPalette=function(e){var a=e.gradient||t.defaultGradient,i=document.createElement("canvas"),n=i.getContext("2d");if(i.width=256,i.height=1,!n)return new Uint8ClampedArray(1024);var s=n.createLinearGradient(0,0,256,1);for(var r in a)s.addColorStop(Number(r),a[r]);return n.fillStyle=s,n.fillRect(0,0,256,1),n.getImageData(0,0,256,1).data},e.prototype._getPointTemplate=function(t,e){var a=document.createElement("canvas"),i=a.getContext("2d");if(!i)return a;var n=t,s=t;if(a.width=a.height=2*t,1===e)i.beginPath(),i.arc(n,s,t,0,2*Math.PI,!1),i.fillStyle="rgba(0,0,0,1)",i.fill();else{var r=i.createRadialGradient(n,s,t*e,n,s,t);r.addColorStop(0,"rgba(0,0,0,1)"),r.addColorStop(1,"rgba(0,0,0,0)"),i.fillStyle=r,i.fillRect(0,0,2*t,2*t)}return a},e.prototype._prepareData=function(t){for(var e=[],a=t.min,i=t.max,n=t.radi,s=t.data,r=Object.keys(s),h=r.length;h--;)for(var o=r[h],d=Object.keys(s[o]),u=d.length;u--;){var c=d[u],l=s[o][c],p=n[o][c];e.push({x:Number(o),y:Number(c),value:l,radius:p})}return{min:a,max:i,data:e}},e.prototype._setStyles=function(e){this.blur=0===e.blur?0:e.blur||t.defaultBlur,e.backgroundColor&&(this.canvas.style.backgroundColor=e.backgroundColor),this.width=this.canvas.width=this.shadowCanvas.width=e.width||this.width,this.height=this.canvas.height=this.shadowCanvas.height=e.height||this.height,this.opacity=255*(e.opacity||0),this.maxOpacity=255*(e.maxOpacity||t.defaultMaxOpacity),this.minOpacity=255*(e.minOpacity||t.defaultMinOpacity),this.useGradientOpacity=!!e.useGradientOpacity},e.prototype._updateGradient=function(t){this.palette=this._getColorPalette(t)},e.prototype._drawAlpha=function(t){for(var e=this.min=t.min||0,a=this.max=t.max||100,i=t.data||[],n=i.length,s=1-this.blur;n--;){var r=i[n],h=r.x,o=r.y,d=r.radius,u=Math.min(r.value,a),c=h-d,l=o-d;if(!this.shadowCtx)return;var p=void 0;this.templates[d]?p=this.templates[d]:this.templates[d]=p=this._getPointTemplate(d,s);var m=(u-e)/(a-e);this.shadowCtx.globalAlpha=m<.01?.01:m,this.shadowCtx.drawImage(p,c,l),c<this.renderBoundaries[0]&&(this.renderBoundaries[0]=c),l<this.renderBoundaries[1]&&(this.renderBoundaries[1]=l),c+2*d>this.renderBoundaries[2]&&(this.renderBoundaries[2]=c+2*d),l+2*d>this.renderBoundaries[3]&&(this.renderBoundaries[3]=l+2*d)}},e.prototype._colorize=function(){var t=this.renderBoundaries[0],e=this.renderBoundaries[1],a=this.renderBoundaries[2]-t,i=this.renderBoundaries[3]-e,n=this.width,s=this.height;if(t<0&&(t=0),e<0&&(e=0),t+a>n&&(a=n-t),e+i>s&&(i=s-e),this.ctx&&this.shadowCtx){for(var r=this.shadowCtx.getImageData(t,e,a,i),h=3;h<r.data.length;h+=4){var o,d=r.data[h],u=4*d;u&&(o=this.opacity>0?this.opacity:d<this.maxOpacity?d<this.minOpacity?this.minOpacity:d:this.maxOpacity,r.data[h-3]=this.palette[u],r.data[h-2]=this.palette[u+1],r.data[h-1]=this.palette[u+2],r.data[h]=this.useGradientOpacity?this.palette[u+3]:o)}this.ctx.putImageData(r,t,e),this.renderBoundaries=[1e3,1e3,0,0]}},e.prototype._clear=function(){this.ctx&&this.shadowCtx&&(this.ctx.clearRect(0,0,this.width,this.height),this.shadowCtx.clearRect(0,0,this.width,this.height))},e}(),n=function(){function e(t){this.config=t,this.renderer=new i(this.config),this.store=new a(this.config),this._init()}return e.prototype._init=function(){var e=this;this.store.coordinator.on("renderpartial",this.renderer.renderPartial,this.renderer),this.store.coordinator.on("renderall",this.renderer.renderAll,this.renderer),this.store.coordinator.on("extremachange",(function(a){e.config.onExtremaChange&&e.config.onExtremaChange({min:a.min,max:a.max,gradient:e.config.gradient||t.defaultGradient})}))},e.prototype.addData=function(t){return this.store.addData(t),this},e.prototype.setData=function(t){return this.store.setData(t),this},e.prototype.setDataMaxx=function(t){return this.store.setDataMax(t),this},e.prototype.setDataMin=function(t){return this.store.setDataMin(t),this},e.prototype.repaint=function(){return this.store.coordinator.emit("renderall",this.store._getInternalData()),this},e.prototype.getData=function(){return this.store.getData()},e.prototype.getDataURL=function(){return this.renderer.getDataURL()},e.prototype.getValueAt=function(t){return this.renderer.getValueAt(t)},e}();return class{constructor(t){this.ssp=t,this.hmInstance=null,this.store=new Map}create(t){const{id:e,name:a,yAxisHeight:i,minPosition:n,maxPosition:s,data:r,min:h=0,max:o=100,radius:d=100}=t,u=new this.ssp.THREE.Vector3((s.x+n.x)/2,i,(s.z+n.z)/2),c=s.x-n.x,l=s.z-n.z,p=this.createInitData(d),{canvas:m,hmInstance:f}=p;f.setData({max:o,min:h,data:this._formatData(r,n,c,l)});const g=new this.ssp.THREE.PlaneBufferGeometry(c,l),y=new this.ssp.THREE.CanvasTexture(m),x=new this.ssp.THREE.MeshStandardMaterial({map:y,depthWrite:!1,transparent:!0}),v=new this.ssp.library.BaseMesh(g,x,{id:e,name:a});v.renderOrder=0;const w=this.ssp.createPluginObject({id:e,name:a,position:u.clone(),rotation:{x:-Math.PI/2,y:0,z:0}},v);return this.store.set(e,{object:w,canvas:m,param:t,width:c,height:l}),w}setData(t,e){const a=this.store.get(t);if(a){const{object:t,canvas:i,param:{minPosition:n},width:s,height:r}=a,h=this.createInitData(),{canvas:o,hmInstance:d}=h;d.renderer.updateConfig({width:i.width,height:i.height}),d.setData({data:this._formatData(e,n,s,r)});const u=t.children[0].material;return this.ssp.render((()=>{const t=new this.ssp.THREE.CanvasTexture(o);u.map=t,u.version++})),t}return console.warn(`In soonspacejs: 插件(plugin-heat-map)未找到 id 为 '"${t}"' 的热力图对象!`)}getById(t){return this.ssp.getObjectById(t)}getByName(t){return this.ssp.getObjectByName(t)}removeById(t){return!!this.store.has(t)&&(this.ssp.removeObjectById(t),this.store.delete(t),!0)}createInitData(t){const e=document.createElement("canvas");e.width=512,e.height=512;return{canvas:e,hmInstance:this.hmInstance=new n({canvas:e,radius:t})}}_formatData(t,e,a,i){return t.map((t=>Object.assign(Object.assign({},t),{x:(t.x-e.x)/a*512|0,y:(t.z-e.z)/i*512|0})))}}}));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@soonspacejs/plugin-heat-map",
3
3
  "pluginName": "HeatMapPlugin",
4
- "version": "2.5.0-alpha.0",
4
+ "version": "2.5.0-alpha.1",
5
5
  "description": "Haet-map plugin for SoonSpace.js",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.esm.js",
@@ -16,5 +16,5 @@
16
16
  "dependencies": {
17
17
  "heatmap-ts": "^0.0.4"
18
18
  },
19
- "gitHead": "b8187989f9105b6b235cc22a8e093b4ecab698fb"
19
+ "gitHead": "0718030c70fef431833f4f3d46829009f8d9d2be"
20
20
  }