| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- // 已弃用
- let ctx = null
- let systemInfo = null
- let canvasW = 0 // 画布宽度 px
- let canvasH = 0 // 画布高度 px
- let scale = 1.0 // 地图缩放比例
- export default {
- async initCanvas(canvasId, instance) {
- ctx = uni.createCanvasContext(canvasId, instance)
- // 获取设备信息,主要获取宽度,赋值给canvasW 也就是宽度:100%
- let [err, systemInfo] = await uni.getSystemInfo()
- // systemInfo = await this.getSystemInfo()
- console.log("[initCanvas] systemInfo", systemInfo)
- canvasW = systemInfo.windowWidth; // 画布宽度
- canvasH = systemInfo.windowHeight - 60; // 画布高度
- console.log("[initCanvas] ", canvasW, canvasH)
- },
- async handleDrawMap(mapUrl) {
- this.drawMapBg(mapUrl)
- // await this.draw(false)
- let posArr = [
- {
- x: canvasW / 2,
- y: canvasH / 2,
- color: 'red'
- }, {
- x: 100,
- y: 100,
- color: 'green'
- }, {
- x: 300,
- y: 300,
- color: ''
- }
- ]
- let radius = 20
- this.drawPosArr(posArr, radius)
- this.drawPosArr(posArr, 30)
- ctx.strokeRect(100, 10, 150, 100)
-
- // 以原点为中心,原点可以用 translate方法修改。顺时针旋转当前坐标轴。多次调用rotate,旋转的角度会叠加。
- // rotate Number 旋转角度,以弧度计(degrees * Math.PI/180;degrees范围为0~360)
- ctx.rotate(20 * Math.PI / 180)
-
- // 在调用scale方法后,之后创建的路径其横纵坐标会被缩放。多次调用scale,倍数会相乘。
- ctx.scale(2, 2)
- ctx.strokeRect(100, 10, 150, 100)
-
-
- ctx.rotate(-20 * Math.PI / 180)
-
- ctx.setLineDash([20, 30], 20)
- ctx.beginPath()
- ctx.moveTo(0,100)
- ctx.lineTo(600, 100)
- ctx.stroke()
-
- await this.draw()
- },
- drawMapBg(mapUrl) {
- // 填充背景色,白色
- // ctx.setFillStyle('#fff'); // 默认白色
- // ctx.fillRect(0, 0, canvasW, canvasH) // fillRect(x,y,宽度,高度)
- console.log("[drawMapBg] ", canvasW, canvasH)
- // ctx.drawImage(mapUrl, 0, 0, 1180, 666) // drawImage(图片路径,x,y,绘制图像的宽度,绘制图像的高度)
- ctx.drawImage(mapUrl, 0, 0, canvasW, canvasH) // drawImage(图片路径,x,y,绘制图像的宽度,绘制图像的高度)
- },
- // x Number 圆的x坐标
- // y Number 圆的y坐标
- // r Number 圆的半径
- drawPos(x, y, r, color = 'blue') {
- // ctx.setFillStyle('#ff0000'); // 默认白色
- // ctx.fillRect(0, 0, 100, 200) // fillRect(x,y,宽度,高度)
- ctx.beginPath()
- ctx.setLineWidth(3)
- ctx.arc(x, y, r, 0, 2 * Math.PI)
- ctx.setStrokeStyle(color)
- ctx.stroke()
- },
- drawPosArr(posArr, radius, defaultColor = 'blue') {
- for (var i = 0; i < posArr.length; i++) {
- let color = (posArr[i].color != '') ? posArr[i].color : defaultColor
- this.drawPos(posArr[i].x, posArr[i].y, radius, color)
- }
- },
- async draw(reserve = true) {
- // draw方法 把以上内容画到 canvas 中
- ctx.draw(reserve, (ret) => {
- console.log("[draw] 绘制完成")
- // uni.showToast({
- // icon: 'success',
- // mask: true,
- // title: '绘制完成',
- // });
- });
- },
- // 获取图片信息
- getImageInfo(image) {
- return new Promise((req, rej) => {
- uni.getImageInfo({
- src: image,
- success: function(res) {
- req(res)
- },
- });
- })
- },
- // 获取设备信息
- getSystemInfo() {
- return new Promise((req, rej) => {
- uni.getSystemInfo({
- success: function(res) {
- req(res)
- }
- });
- })
- },
- }
|