function Label(text,option) {
|
|
if ( option === undefined ) option = {};
|
|
this.fontface = option.hasOwnProperty("fontface") ?
|
option["fontface"] : "Arial";
|
|
/* 字体大小 */
|
this.fontsize = option.hasOwnProperty("fontsize") ?
|
option["fontsize"] : 18;
|
|
this.fontColor=option.hasOwnProperty("fontColor") ?
|
option["fontColor"] : "#FFFFFF";
|
/* 背景颜色 */
|
this.backgroundColor = option.hasOwnProperty("backgroundColor") ?
|
option["backgroundColor"] : 'rgba(8, 36, 85, 0.8)';;
|
|
let canvas = document.createElement('canvas');
|
let context = canvas.getContext('2d');
|
|
context.font = "Bold " + this.fontsize + "px " + this.fontface;
|
|
/* 获取文字的大小数据,高度取决于文字的大小 */
|
var metrics = context.measureText( text );
|
var textWidth = metrics.width;
|
// 定义画布的宽度
|
canvas.width = (textWidth+textWidth*0.4);
|
// 定义画布的高度
|
canvas.height = (this.fontsize*2);
|
// 定义canvas画笔的x坐标点
|
let x = 0;
|
// 定义canvas画笔的y坐标点
|
let y = 0;
|
// 定义圆角的半径
|
let r = 15;
|
// 提示框的宽度
|
let w = canvas.width;
|
// 提示框的高度======》画布高度-下放三角箭头的高度
|
let h = canvas.height-r;
|
// 缩放
|
context.scale(1, 1);
|
// 背景颜色
|
context.fillStyle=this.backgroundColor;
|
|
// 开始
|
context.beginPath();
|
// 画笔移动到起始位置
|
context.moveTo(x + r, y);
|
// 绘制右上角的圆角
|
context.arcTo(x + w, y, x + w, y + h, r);
|
// 绘制右下角的圆角
|
context.arcTo(x + w, y + h, x, y + h, r);
|
|
// 画三角形轮廓
|
// 绘制到三角形起点的位置
|
context.lineTo(x + w, y + h);
|
// 绘制三角形的起点到顶点的线段
|
context.lineTo(x + w / 2 + 10, y + h);
|
// 绘制顶点到三角形另一边的线段
|
context.lineTo(x + w / 2, y + h+r);
|
// 绘制三角形结束点到左下方的圆角起始处
|
context.lineTo(x + w / 2 - 10, y + h );
|
|
// 绘制左下角的圆角
|
context.arcTo(x, y + h, x, y, r);
|
// 绘制左上角的圆角
|
context.arcTo(x, y, x + w, y, r);
|
// 设置阴影
|
context.shadowColor = 'rgba(0, 0, 0, 0.2)'; // 颜色
|
context.shadowBlur = 5; // 模糊尺寸
|
context.shadowOffsetX = 2; // 阴影Y轴偏移
|
context.shadowOffsetY = 2; // 阴影X轴偏移
|
// 关闭,形成一个闭合的回路---->轮廓
|
context.closePath();
|
// 填充
|
context.fill();
|
|
context.fillStyle=this.fontColor;
|
context.textAlign='center';
|
context.textBaseline='middle'
|
context.font = "Bold " + this.fontsize + "px " + this.fontface;
|
context.fillText( text, (canvas.width-textWidth)/2, (canvas.height)/2);
|
|
/* 画布内容用于纹理贴图 */
|
let texture = new THREE.Texture(canvas);
|
texture.needsUpdate = true;
|
|
let spriteMaterial = new THREE.SpriteMaterial({ map: texture } );
|
let sprite = new THREE.Sprite( spriteMaterial );
|
|
/* 缩放比例 */
|
sprite.scale.set(100,100,1);
|
|
return sprite;
|
}
|