1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- //通过Canvas绘制复杂或动态对象的图标点Graphic
- class CanvasBillboard extends mars3d.graphic.BillboardEntity {
- /**
- * 文字
- * @type {string}
- */
- get text() {
- return this.style.text;
- }
- set text(val) {
- this.style.text = val;
- this._updateCanvas();
- }
- /**
- * 对象添加到图层前创建一些对象的钩子方法,
- * 只会调用一次
- * @return {void} 无
- * @private
- */
- _mountedHook() {
- super._mountedHook();
- //图片对象
- this.style.imageUrl = "img/marker/textPnl.png";
- this.style.width = 300;
- this.style.height = 140;
- if (!this._canvas) {
- this._canvas = document.createElement("canvas");
- this._canvas.width = this.style.width;
- this._canvas.height = this.style.height;
- }
- if (!this._pngImage) {
- let img = new Image(this.style.width, this.style.height);
- img.crossOrigin = "Anonymous";
- img.src = this.style.imageUrl;
- img.onload = () => {
- this._pngImage = img;
- this._updateCanvas();
- };
- }
- this._updateCanvas();
- }
- //创建canvas
- _updateCanvas() {
- if (!this._pngImage || !this._canvas) {
- return;
- }
- let canvas = this._canvas;
- let ctx = canvas.getContext("2d");
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- //绘制图片
- ctx.drawImage(this._pngImage, 0, 0);
- //绘制文字
- ctx.fillStyle = "rgb(255, 255, 255)";
- ctx.font = "55px 楷体";
- ctx.textBaseline = "middle";
- ctx.fillText("温度:", 20, canvas.height / 2);
- ctx.fillText(this.style.text, 160, canvas.height / 2);
- ctx.fillText("℃", 220, canvas.height / 2);
- let newImg = new Image(canvas.width, canvas.height);
- newImg.src = canvas.toDataURL("image/png");
- //将图片赋予给矢量对象进行显示,this.image是父类的属性
- this.image = newImg;
- }
- }
- mars3d.graphic.CanvasBillboard = CanvasBillboard;
|