@visactor/vutils 0.18.9 → 0.18.11
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.
- package/cjs/color/Color.js +12 -7
- package/cjs/color/Color.js.map +1 -1
- package/cjs/common/cloneDeep.d.ts +1 -1
- package/cjs/common/cloneDeep.js +3 -3
- package/cjs/common/cloneDeep.js.map +1 -1
- package/cjs/common/index.d.ts +1 -1
- package/cjs/common/index.js +7 -2
- package/cjs/common/index.js.map +1 -1
- package/cjs/common/merge.d.ts +1 -0
- package/cjs/common/merge.js +7 -6
- package/cjs/common/merge.js.map +1 -1
- package/cjs/graphics/algorithm/intersect.js +48 -31
- package/cjs/graphics/algorithm/intersect.js.map +1 -1
- package/cjs/graphics/text/measure/util.d.ts +1 -1
- package/cjs/graphics/text/measure/util.js +3 -2
- package/cjs/graphics/text/measure/util.js.map +1 -1
- package/cjs/math.js +1 -1
- package/cjs/math.js.map +1 -1
- package/dist/index.js +72 -111
- package/dist/index.min.js +1 -1
- package/es/color/Color.js +12 -7
- package/es/color/Color.js.map +1 -1
- package/es/common/cloneDeep.d.ts +1 -1
- package/es/common/cloneDeep.js +3 -3
- package/es/common/cloneDeep.js.map +1 -1
- package/es/common/index.d.ts +1 -1
- package/es/common/index.js +1 -1
- package/es/common/index.js.map +1 -1
- package/es/common/merge.d.ts +1 -0
- package/es/common/merge.js +4 -4
- package/es/common/merge.js.map +1 -1
- package/es/graphics/algorithm/intersect.js +40 -25
- package/es/graphics/algorithm/intersect.js.map +1 -1
- package/es/graphics/text/measure/util.d.ts +1 -1
- package/es/graphics/text/measure/util.js +3 -2
- package/es/graphics/text/measure/util.js.map +1 -1
- package/es/math.js +1 -1
- package/es/math.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphics/algorithm/intersect.ts"],"names":[],"mappings":"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","file":"intersect.js","sourcesContent":["/* 用于判断2d相交 */\nimport { degreeToRadian } from '../../angle';\nimport type { IBoundsLike } from '../../data-structure';\nimport type { vec2 } from '../../math';\nimport { pi2, halfPi, crossProduct, fuzzyEqualVec } from '../../math';\nimport type { Point } from './interface';\n\nfunction sub(out: vec2, v1: vec2, v2: vec2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n}\n\n// 临时变量\nlet x11: number;\nlet x12: number;\nlet y11: number;\nlet y12: number;\nlet x21: number;\nlet x22: number;\nlet y21: number;\nlet y22: number;\n\n/**\n * 判断直线是否相交,投影法\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function isIntersect(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean {\n let min1: number = left1[0];\n let max1: number = right1[0];\n let min2: number = left2[0];\n let max2: number = right2[0];\n let _temp: number;\n if (max1 < min1) {\n _temp = max1;\n (max1 = min1), (min1 = _temp);\n }\n if (max2 < min2) {\n _temp = max2;\n (max2 = min2), (min2 = _temp);\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n (min1 = left1[1]), (max1 = right1[1]), (min2 = left2[1]), (max2 = right2[1]);\n if (max1 < min1) {\n _temp = max1;\n (max1 = min1), (min1 = _temp);\n }\n if (max2 < min2) {\n _temp = max2;\n (max2 = min2), (min2 = _temp);\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n return true;\n}\n\n/**\n * 获取直线交点\n * 不相交返回false,共线返回true,相交返回交点\n * https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function getIntersectPoint(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean | vec2 {\n if (!isIntersect(left1, right1, left2, right2)) {\n return false;\n }\n const dir1: vec2 = [0, 0];\n const dir2: vec2 = [0, 0];\n const tempVec: vec2 = [0, 0];\n sub(dir1, right1, left1);\n sub(dir2, right2, left2);\n\n // 判断共线\n if (fuzzyEqualVec(dir1, dir2)) {\n return true;\n }\n\n // https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n // line1: left1 + dir1 * t\n // line2: left2 + dir2 * u\n // 当 left1 + dir1 * t = left2 + dir2 * u => (left1 + dir1 * t) x dir2 = (left2 + dir2 * u) x dir2\n // => dir1 x dir2 * t = (left2 - left1) x dir2 => t = (left2 - left1) x dir2 / (dir1 x dir2)\n // 直线不平行,dir1 x dir2 ≠ 0,当0 <= t <= 1时,可以求出交点\n sub(tempVec, left2, left1);\n const t = crossProduct(tempVec, dir2) / crossProduct(dir1, dir2);\n if (t >= 0 && t <= 1) {\n return [left1[0] + dir1[0] * t, left1[1] + dir1[1] * t];\n }\n\n return false;\n}\n\n/**\n * 获取两个rect的相交部分\n * 如果有bbox为null,返回null,如果不相交返回{x1: 0, y1: 0, x2: 0, y2: 0}\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function getRectIntersect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): IBoundsLike | null {\n if (bbox1 === null) {\n return bbox2;\n }\n if (bbox2 === null) {\n return bbox1;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return { x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n return { x1: Math.max(x11, x21), y1: Math.max(y11, y21), x2: Math.min(x12, x22), y2: Math.min(y12, y22) };\n}\n\nexport enum InnerBBox {\n NONE = 0,\n BBOX1 = 1,\n BBOX2 = 2\n}\n/**\n * 矩形是否在另一个矩形内部\n * 返回InnerBBox\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function rectInsideAnotherRect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): InnerBBox {\n if (!bbox1 || !bbox2) {\n return InnerBBox.NONE;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n\n // bbox1在bbox2内部\n if (x11 > x21 && x12 < x22 && y11 > y21 && y12 < y22) {\n return InnerBBox.BBOX1;\n }\n // bbox2在bbox1内部\n if (x21 > x11 && x22 < x12 && y21 > y11 && y22 < y12) {\n return InnerBBox.BBOX2;\n }\n\n return InnerBBox.NONE;\n}\n\n/**\n * 两个矩形是否相交\n * 如果有矩形为null,判断为相交\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function isRectIntersect(bbox1: IBoundsLike | null, bbox2: IBoundsLike | null, format: boolean): boolean {\n if (bbox1 && bbox2) {\n if (!format) {\n if (bbox1.x1 > bbox2.x2 || bbox1.x2 < bbox2.x1 || bbox1.y1 > bbox2.y2 || bbox1.y2 < bbox2.y1) {\n return false;\n }\n return true;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n\n if (x11 > x22 || x12 < x21 || y11 > y22 || y12 < y21) {\n return false;\n }\n return true;\n }\n return true;\n}\n\n/**\n * 点在box内部\n * 如果bbox为null返回true\n * @param point\n * @param bbox\n */\nexport function pointInRect(point: { x: number; y: number }, bbox: IBoundsLike | null, format: boolean): boolean {\n if (!bbox) {\n return true;\n }\n if (!format) {\n return point.x >= bbox.x1 && point.x <= bbox.x2 && point.y >= bbox.y1 && point.y <= bbox.y2;\n }\n (x11 = bbox.x1), (x12 = bbox.x2), (y11 = bbox.y1), (y12 = bbox.y2);\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n return point.x >= x11 && point.x <= x12 && point.y >= y11 && point.y <= y12;\n}\n\n// 参考https://github.com/francecil/leetcode/issues/1\n\n/**\n * 计算投影半径\n * @param {Array(Number)} checkAxis 检测轴 [cosθ,sinθ]\n * @param {Array} axis 目标轴 [x,y]\n */\nfunction getProjectionRadius(checkAxis: [number, number], axis: [number, number]) {\n return Math.abs(axis[0] * checkAxis[0] + axis[1] * checkAxis[1]);\n}\n\nfunction rotate({ x, y }: Point, deg: number, origin = { x: 0, y: 0 }) {\n return {\n x: (x - origin.x) * Math.cos(deg) + (y - origin.y) * Math.sin(deg) + origin.x,\n y: (x - origin.x) * Math.sin(deg) + (origin.y - y) * Math.cos(deg) + origin.y\n };\n}\n\nfunction getCenterPoint(box: RotateBound): Point {\n return {\n x: (box.x1 + box.x2) / 2,\n y: (box.y1 + box.y2) / 2\n };\n}\n\ninterface RotateBound extends IBoundsLike {\n angle: number;\n rotateCenter?: { x: number; y: number };\n}\n\n/**\n * 转化为顶点坐标数组\n * @param {Object} box\n */\nfunction toRect(box: RotateBound, isDeg: boolean) {\n const deg = isDeg ? box.angle : degreeToRadian(box.angle);\n const cp = getCenterPoint(box);\n return [\n rotate(\n {\n x: box.x1,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y2\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x1,\n y: box.y2\n },\n deg,\n cp\n )\n ];\n}\nexport function isRotateAABBIntersect(\n box1: RotateBound,\n box2: RotateBound,\n isDeg = false,\n ctx?: CanvasRenderingContext2D\n) {\n const rect1 = toRect(box1, isDeg);\n const rect2 = toRect(box2, isDeg);\n const vector = (start: Point, end: Point) => {\n return [end.x - start.x, end.y - start.y] as [number, number];\n };\n\n if (ctx) {\n ctx.save();\n ctx.fillStyle = 'red';\n ctx.globalAlpha = 0.6;\n rect1.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n\n ctx.save();\n ctx.fillStyle = 'green';\n ctx.globalAlpha = 0.6;\n rect2.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n }\n\n // 两个矩形的中心点\n const p1 = getCenterPoint(box1);\n const p2 = getCenterPoint(box2);\n\n ctx && ctx.fillRect(p1.x, p1.y, 2, 2);\n ctx && ctx.fillRect(p2.x, p2.y, 2, 2);\n // 向量 p1p2\n const vp1p2 = vector(p1, p2);\n\n //矩形1的两边向量\n const AB = vector(rect1[0], rect1[1]);\n const BC = vector(rect1[1], rect1[2]);\n //矩形2的两边向量\n const A1B1 = vector(rect2[0], rect2[1]);\n const B1C1 = vector(rect2[1], rect2[2]);\n\n // 矩形1 的两个弧度\n const deg11 = isDeg ? box1.angle : degreeToRadian(box1.angle);\n let deg12 = isDeg ? box1.angle + halfPi : degreeToRadian(90 - box1.angle);\n // 矩形2 的两个弧度\n const deg21 = isDeg ? box2.angle : degreeToRadian(box2.angle);\n let deg22 = isDeg ? box2.angle + halfPi : degreeToRadian(90 - box2.angle);\n if (deg12 > pi2) {\n deg12 -= pi2;\n }\n if (deg22 > pi2) {\n deg22 -= pi2;\n }\n\n // 投影重叠\n const isCover = (\n checkAxisRadius: number,\n deg: number,\n targetAxis1: [number, number],\n targetAxis2: [number, number]\n ) => {\n const checkAxis = [Math.cos(deg), Math.sin(deg)] as [number, number];\n const targetAxisRadius =\n (getProjectionRadius(checkAxis, targetAxis1) + getProjectionRadius(checkAxis, targetAxis2)) / 2;\n const centerPointRadius = getProjectionRadius(checkAxis, vp1p2);\n // console.log('abc', `checkAxis:${checkAxis},三个投影:${checkAxisRadius}, ${targetAxisRadius}, ${centerPointRadius}`)\n return checkAxisRadius + targetAxisRadius > centerPointRadius;\n };\n\n return (\n isCover((box1.x2 - box1.x1) / 2, deg11, A1B1, B1C1) &&\n isCover((box1.y2 - box1.y1) / 2, deg12, A1B1, B1C1) &&\n isCover((box2.x2 - box2.x1) / 2, deg21, AB, BC) &&\n isCover((box2.y2 - box2.y1) / 2, deg22, AB, BC)\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphics/algorithm/intersect.ts"],"names":[],"mappings":"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","file":"intersect.js","sourcesContent":["/* 用于判断2d相交 */\nimport { degreeToRadian } from '../../angle';\nimport type { IBoundsLike } from '../../data-structure';\nimport type { vec2 } from '../../math';\nimport { pi2, halfPi, crossProduct, fuzzyEqualVec } from '../../math';\nimport type { Point } from './interface';\n\nfunction sub(out: vec2, v1: vec2, v2: vec2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n}\n\n/**\n * 判断直线是否相交,投影法\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function isIntersect(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean {\n let min1: number = left1[0];\n let max1: number = right1[0];\n let min2: number = left2[0];\n let max2: number = right2[0];\n if (max1 < min1) {\n [min1, max1] = [max1, min1];\n }\n if (max2 < min2) {\n [max2, min2] = [min2, max2];\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n (min1 = left1[1]), (max1 = right1[1]), (min2 = left2[1]), (max2 = right2[1]);\n if (max1 < min1) {\n [min1, max1] = [max1, min1];\n }\n if (max2 < min2) {\n [max2, min2] = [min2, max2];\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n return true;\n}\n\n/**\n * 获取直线交点\n * 不相交返回false,共线返回true,相交返回交点\n * https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function getIntersectPoint(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean | vec2 {\n if (!isIntersect(left1, right1, left2, right2)) {\n return false;\n }\n const dir1: vec2 = [0, 0];\n const dir2: vec2 = [0, 0];\n const tempVec: vec2 = [0, 0];\n sub(dir1, right1, left1);\n sub(dir2, right2, left2);\n\n // 判断共线\n if (fuzzyEqualVec(dir1, dir2)) {\n return true;\n }\n\n // https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n // line1: left1 + dir1 * t\n // line2: left2 + dir2 * u\n // 当 left1 + dir1 * t = left2 + dir2 * u => (left1 + dir1 * t) x dir2 = (left2 + dir2 * u) x dir2\n // => dir1 x dir2 * t = (left2 - left1) x dir2 => t = (left2 - left1) x dir2 / (dir1 x dir2)\n // 直线不平行,dir1 x dir2 ≠ 0,当0 <= t <= 1时,可以求出交点\n sub(tempVec, left2, left1);\n const t = crossProduct(tempVec, dir2) / crossProduct(dir1, dir2);\n if (t >= 0 && t <= 1) {\n return [left1[0] + dir1[0] * t, left1[1] + dir1[1] * t];\n }\n\n return false;\n}\n\n/**\n * 获取两个rect的相交部分\n * 如果有bbox为null,返回null,如果不相交返回{x1: 0, y1: 0, x2: 0, y2: 0}\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function getRectIntersect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): IBoundsLike | null {\n if (bbox1 === null) {\n return bbox2;\n }\n if (bbox2 === null) {\n return bbox1;\n }\n\n const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, format);\n\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return { x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n return { x1: Math.max(x11, x21), y1: Math.max(y11, y21), x2: Math.min(x12, x22), y2: Math.min(y12, y22) };\n}\n\nexport enum InnerBBox {\n NONE = 0,\n BBOX1 = 1,\n BBOX2 = 2\n}\n\nconst formatTwoBBox = (bbox1: IBoundsLike, bbox2: IBoundsLike, format: boolean) => {\n let x11 = bbox1.x1;\n let x12 = bbox1.x2;\n let y11 = bbox1.y1;\n let y12 = bbox1.y2;\n let x21 = bbox2.x1;\n let x22 = bbox2.x2;\n let y21 = bbox2.y1;\n let y22 = bbox2.y2;\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n return { x11, x12, y11, y12, x21, x22, y21, y22 };\n};\n/**\n * 矩形是否在另一个矩形内部\n * 返回InnerBBox\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function rectInsideAnotherRect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): InnerBBox {\n if (!bbox1 || !bbox2) {\n return InnerBBox.NONE;\n }\n\n const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, format);\n // bbox1在bbox2内部\n if (x11 > x21 && x12 < x22 && y11 > y21 && y12 < y22) {\n return InnerBBox.BBOX1;\n }\n // bbox2在bbox1内部\n if (x21 > x11 && x22 < x12 && y21 > y11 && y22 < y12) {\n return InnerBBox.BBOX2;\n }\n\n return InnerBBox.NONE;\n}\n\n/**\n * 两个矩形是否相交\n * 如果有矩形为null,判断为相交\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function isRectIntersect(bbox1: IBoundsLike | null, bbox2: IBoundsLike | null, format: boolean): boolean {\n if (bbox1 && bbox2) {\n if (!format) {\n if (bbox1.x1 > bbox2.x2 || bbox1.x2 < bbox2.x1 || bbox1.y1 > bbox2.y2 || bbox1.y2 < bbox2.y1) {\n return false;\n }\n return true;\n }\n\n const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, true);\n\n if (x11 > x22 || x12 < x21 || y11 > y22 || y12 < y21) {\n return false;\n }\n return true;\n }\n return true;\n}\n\n/**\n * 点在box内部\n * 如果bbox为null返回true\n * @param point\n * @param bbox\n */\nexport function pointInRect(point: { x: number; y: number }, bbox: IBoundsLike | null, format: boolean): boolean {\n if (!bbox) {\n return true;\n }\n if (!format) {\n return point.x >= bbox.x1 && point.x <= bbox.x2 && point.y >= bbox.y1 && point.y <= bbox.y2;\n }\n let x11 = bbox.x1;\n let x12 = bbox.x2;\n let y11 = bbox.y1;\n let y12 = bbox.y2;\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n return point.x >= x11 && point.x <= x12 && point.y >= y11 && point.y <= y12;\n}\n\n// 参考https://github.com/francecil/leetcode/issues/1\n\n/**\n * 计算投影半径\n * @param {Array(Number)} checkAxis 检测轴 [cosθ,sinθ]\n * @param {Array} axis 目标轴 [x,y]\n */\nfunction getProjectionRadius(checkAxis: [number, number], axis: [number, number]) {\n return Math.abs(axis[0] * checkAxis[0] + axis[1] * checkAxis[1]);\n}\n\nfunction rotate({ x, y }: Point, deg: number, origin = { x: 0, y: 0 }) {\n return {\n x: (x - origin.x) * Math.cos(deg) + (y - origin.y) * Math.sin(deg) + origin.x,\n y: (x - origin.x) * Math.sin(deg) + (origin.y - y) * Math.cos(deg) + origin.y\n };\n}\n\nfunction getCenterPoint(box: RotateBound): Point {\n return {\n x: (box.x1 + box.x2) / 2,\n y: (box.y1 + box.y2) / 2\n };\n}\n\ninterface RotateBound extends IBoundsLike {\n angle: number;\n rotateCenter?: { x: number; y: number };\n}\n\n/**\n * 转化为顶点坐标数组\n * @param {Object} box\n */\nfunction toRect(box: RotateBound, isDeg: boolean) {\n const deg = isDeg ? box.angle : degreeToRadian(box.angle);\n const cp = getCenterPoint(box);\n return [\n rotate(\n {\n x: box.x1,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y2\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x1,\n y: box.y2\n },\n deg,\n cp\n )\n ];\n}\nexport function isRotateAABBIntersect(\n box1: RotateBound,\n box2: RotateBound,\n isDeg = false,\n ctx?: CanvasRenderingContext2D\n) {\n const rect1 = toRect(box1, isDeg);\n const rect2 = toRect(box2, isDeg);\n const vector = (start: Point, end: Point) => {\n return [end.x - start.x, end.y - start.y] as [number, number];\n };\n\n if (ctx) {\n ctx.save();\n ctx.fillStyle = 'red';\n ctx.globalAlpha = 0.6;\n rect1.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n\n ctx.save();\n ctx.fillStyle = 'green';\n ctx.globalAlpha = 0.6;\n rect2.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n }\n\n // 两个矩形的中心点\n const p1 = getCenterPoint(box1);\n const p2 = getCenterPoint(box2);\n\n ctx && ctx.fillRect(p1.x, p1.y, 2, 2);\n ctx && ctx.fillRect(p2.x, p2.y, 2, 2);\n // 向量 p1p2\n const vp1p2 = vector(p1, p2);\n\n //矩形1的两边向量\n const AB = vector(rect1[0], rect1[1]);\n const BC = vector(rect1[1], rect1[2]);\n //矩形2的两边向量\n const A1B1 = vector(rect2[0], rect2[1]);\n const B1C1 = vector(rect2[1], rect2[2]);\n\n // 矩形1 的两个弧度\n const deg11 = isDeg ? box1.angle : degreeToRadian(box1.angle);\n let deg12 = isDeg ? box1.angle + halfPi : degreeToRadian(90 - box1.angle);\n // 矩形2 的两个弧度\n const deg21 = isDeg ? box2.angle : degreeToRadian(box2.angle);\n let deg22 = isDeg ? box2.angle + halfPi : degreeToRadian(90 - box2.angle);\n if (deg12 > pi2) {\n deg12 -= pi2;\n }\n if (deg22 > pi2) {\n deg22 -= pi2;\n }\n\n // 投影重叠\n const isCover = (\n checkAxisRadius: number,\n deg: number,\n targetAxis1: [number, number],\n targetAxis2: [number, number]\n ) => {\n const checkAxis = [Math.cos(deg), Math.sin(deg)] as [number, number];\n const targetAxisRadius =\n (getProjectionRadius(checkAxis, targetAxis1) + getProjectionRadius(checkAxis, targetAxis2)) / 2;\n const centerPointRadius = getProjectionRadius(checkAxis, vp1p2);\n // console.log('abc', `checkAxis:${checkAxis},三个投影:${checkAxisRadius}, ${targetAxisRadius}, ${centerPointRadius}`)\n return checkAxisRadius + targetAxisRadius > centerPointRadius;\n };\n\n return (\n isCover((box1.x2 - box1.x1) / 2, deg11, A1B1, B1C1) &&\n isCover((box1.y2 - box1.y1) / 2, deg12, A1B1, B1C1) &&\n isCover((box2.x2 - box2.x1) / 2, deg21, AB, BC) &&\n isCover((box2.y2 - box2.y1) / 2, deg22, AB, BC)\n );\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { ITextFontParams } from './interface';
|
|
2
|
-
export declare function getContextFont(text: Partial<ITextFontParams>, defaultAttr?: Partial<ITextFontParams
|
|
2
|
+
export declare function getContextFont(text: Partial<ITextFontParams>, defaultAttr?: Partial<ITextFontParams>, fontSizeScale?: number): string;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function getContextFont(text, defaultAttr = {}) {
|
|
3
|
+
function getContextFont(text, defaultAttr = {}, fontSizeScale) {
|
|
4
|
+
fontSizeScale || (fontSizeScale = 1);
|
|
4
5
|
const {fontStyle: fontStyle = defaultAttr.fontStyle, fontVariant: fontVariant = defaultAttr.fontVariant, fontWeight: fontWeight = defaultAttr.fontWeight, fontSize: fontSize = defaultAttr.fontSize, fontFamily: fontFamily = defaultAttr.fontFamily} = text;
|
|
5
|
-
return (fontStyle ? fontStyle + " " : "") + (fontVariant ? fontVariant + " " : "") + (fontWeight ? fontWeight + " " : "") + fontSize + "px " + (fontFamily || "sans-serif");
|
|
6
|
+
return (fontStyle ? fontStyle + " " : "") + (fontVariant ? fontVariant + " " : "") + (fontWeight ? fontWeight + " " : "") + fontSize * fontSizeScale + "px " + (fontFamily || "sans-serif");
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphics/text/measure/util.ts"],"names":[],"mappings":";;;AAGA,SAAgB,cAAc,
|
|
1
|
+
{"version":3,"sources":["../src/graphics/text/measure/util.ts"],"names":[],"mappings":";;;AAGA,SAAgB,cAAc,CAC5B,IAA8B,EAC9B,cAAwC,EAAE,EAC1C,aAAsB;IAEtB,IAAI,CAAC,aAAa,EAAE;QAClB,aAAa,GAAG,CAAC,CAAC;KACnB;IACD,MAAM,EACJ,SAAS,GAAG,WAAW,CAAC,SAAS,EACjC,WAAW,GAAG,WAAW,CAAC,WAAW,EACrC,UAAU,GAAG,WAAW,CAAC,UAAU,EACnC,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAC/B,UAAU,GAAG,WAAW,CAAC,UAAU,EACpC,GAAG,IAAI,CAAC;IACT,OAAO,CACL,EAAE;QACF,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,QAAQ,GAAG,aAAa;QACxB,KAAK;QACL,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CACzC,CAAC;AACJ,CAAC;AAxBD,wCAwBC","file":"util.js","sourcesContent":["import type { ITextFontParams } from './interface';\n\n// FIXME: from VRender\nexport function getContextFont(\n text: Partial<ITextFontParams>,\n defaultAttr: Partial<ITextFontParams> = {},\n fontSizeScale?: number\n): string {\n if (!fontSizeScale) {\n fontSizeScale = 1;\n }\n const {\n fontStyle = defaultAttr.fontStyle,\n fontVariant = defaultAttr.fontVariant,\n fontWeight = defaultAttr.fontWeight,\n fontSize = defaultAttr.fontSize,\n fontFamily = defaultAttr.fontFamily\n } = text;\n return (\n '' +\n (fontStyle ? fontStyle + ' ' : '') +\n (fontVariant ? fontVariant + ' ' : '') +\n (fontWeight ? fontWeight + ' ' : '') +\n fontSize * fontSizeScale +\n 'px ' +\n (fontFamily ? fontFamily : 'sans-serif')\n );\n}\n"]}
|
package/cjs/math.js
CHANGED
|
@@ -9,7 +9,7 @@ function asin(x) {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
function pointAt(x1, y1, x2, y2, t) {
|
|
12
|
-
let x, y;
|
|
12
|
+
let x = x2, y = y2;
|
|
13
13
|
return "number" == typeof x1 && "number" == typeof x2 && (x = (1 - t) * x1 + t * x2),
|
|
14
14
|
"number" == typeof y1 && "number" == typeof y2 && (y = (1 - t) * y1 + t * y2), {
|
|
15
15
|
x: x,
|
package/cjs/math.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/math.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,KAAK,CAAC;AAChB,QAAA,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACb,QAAA,MAAM,GAAG,UAAE,GAAG,CAAC,CAAC;AAChB,QAAA,GAAG,GAAG,CAAC,GAAG,UAAE,CAAC;AACb,QAAA,iBAAiB,GAAG,CAAC,CAAC;AACtB,QAAA,gBAAgB,GAAG,KAAK,CAAC;AACzB,QAAA,qBAAqB,GAAG,SAAS,CAAC;AAClC,QAAA,0BAA0B,GAAG,EAAE,CAAC;AAChC,QAAA,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AA2BlB,QAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACf,QAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACnB,QAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACf,QAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACf,QAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACf,QAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACf,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACjB,QAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAE5B,SAAgB,IAAI,CAAC,CAAS;IAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAFD,oBAEC;AAED,SAAgB,IAAI,CAAC,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAFD,oBAEC;AAWD,SAAgB,OAAO,CACrB,EAA6B,EAC7B,EAA6B,EAC7B,EAA6B,EAC7B,EAA6B,EAC7B,CAAS;IAKT,IAAI,
|
|
1
|
+
{"version":3,"sources":["../src/math.ts"],"names":[],"mappings":"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","file":"math.js","sourcesContent":["export const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\nexport const NEWTON_ITERATIONS = 4;\nexport const NEWTON_MIN_SLOPE = 0.001;\nexport const SUBDIVISION_PRECISION = 0.0000001;\nexport const SUBDIVISION_MAX_ITERATIONS = 10;\nexport const pi2 = Math.PI * 2;\n\nexport type vec2 = [number, number] | Float32Array;\nexport type vec3 = [number, number, number] | Float32Array;\nexport type vec4 = [number, number, number, number] | Float32Array;\nexport type vec8 = [number, number, number, number, number, number, number, number] | Float32Array;\nexport type mat4 =\n | [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number\n ]\n | Float32Array;\n\nexport const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\nexport const pow = Math.pow;\n\nexport function acos(x: number) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x: number) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\n/**\n * 根据比例获直线上的点\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} t 指定比例\n * @return {object} 包含 x, y 的点\n */\nexport function pointAt(\n x1: number | null | undefined,\n y1: number | null | undefined,\n x2: number | null | undefined,\n y2: number | null | undefined,\n t: number\n): {\n x: undefined | number;\n y: undefined | number;\n} {\n let x: number | undefined = x2;\n let y: number | undefined = y2;\n if (typeof x1 === 'number' && typeof x2 === 'number') {\n x = (1 - t) * x1 + t * x2;\n }\n if (typeof y1 === 'number' && typeof y2 === 'number') {\n y = (1 - t) * y1 + t * y2;\n }\n return {\n x,\n y\n };\n}\n\nexport function lengthFromPointToLine(\n point: { x: number; y: number },\n point1: { x: number; y: number },\n point2: { x: number; y: number }\n): number {\n // 面积\n const dir1X = point2.x - point1.x;\n const dir1Y = point2.y - point1.y;\n const dir2X = point.x - point1.x;\n const dir2Y = point.y - point1.y;\n const s = Math.abs(dir1X * dir2Y - dir2X * dir1Y);\n const length = Math.sqrt(dir1X * dir1X + dir1Y * dir1Y);\n return s / length;\n}\n\nexport function crossProduct(dir1: vec2, dir2: vec2): number {\n return dir1[0] * dir2[1] - dir1[1] * dir2[0];\n}\n\nexport function crossProductPoint(dir1: { x: number; y: number }, dir2: { x: number; y: number }): number {\n return dir1.x * dir2.y - dir1.y * dir2.x;\n}\n\nexport function dotProduct(a: number[] | Float32Array, b: number[] | Float32Array): number {\n let ret = 0;\n for (let i = 0; i < a.length; ++i) {\n ret += a[i] * b[i];\n }\n return ret;\n}\n\nexport function fuzzyEqualNumber(a: number, b: number): boolean {\n return abs(a - b) < epsilon;\n}\n\nexport function fuzzyEqualVec(a: vec2, b: vec2): boolean {\n return abs(a[0] - b[0]) + abs(a[1] - b[1]) < epsilon;\n}\n\nexport function fixPrecision(num: number, precision = 10) {\n return Math.round(num * precision) / precision;\n}\n\nexport function getDecimalPlaces(n: number): number {\n const dStr = n.toString().split(/[eE]/);\n const s = (dStr[0].split('.')[1] || '').length - (+dStr[1] || 0);\n return s > 0 ? s : 0;\n}\n\nexport function precisionAdd(a: number, b: number) {\n return fixPrecision(a + b, 10 ** Math.max(getDecimalPlaces(a), getDecimalPlaces(b)));\n}\n\nexport function precisionSub(a: number, b: number) {\n return fixPrecision(a - b, 10 ** Math.max(getDecimalPlaces(a), getDecimalPlaces(b)));\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -545,9 +545,9 @@
|
|
|
545
545
|
return _clone(parent, depth);
|
|
546
546
|
}
|
|
547
547
|
|
|
548
|
-
function cloneDeep(value) {
|
|
548
|
+
function cloneDeep(value, ignoreWhen, excludeKeys) {
|
|
549
549
|
let result;
|
|
550
|
-
if (!isValid(value) || typeof value !== 'object') {
|
|
550
|
+
if (!isValid(value) || typeof value !== 'object' || (ignoreWhen && ignoreWhen(value))) {
|
|
551
551
|
return value;
|
|
552
552
|
}
|
|
553
553
|
const isArr = isArray(value);
|
|
@@ -573,13 +573,18 @@
|
|
|
573
573
|
while (++index < (props || value).length) {
|
|
574
574
|
const key = props ? props[index] : index;
|
|
575
575
|
const subValue = value[key];
|
|
576
|
-
|
|
576
|
+
if (excludeKeys && excludeKeys.includes(key.toString())) {
|
|
577
|
+
result[key] = subValue;
|
|
578
|
+
}
|
|
579
|
+
else {
|
|
580
|
+
result[key] = cloneDeep(subValue, ignoreWhen, excludeKeys);
|
|
581
|
+
}
|
|
577
582
|
}
|
|
578
583
|
}
|
|
579
584
|
return result;
|
|
580
585
|
}
|
|
581
586
|
|
|
582
|
-
function baseMerge(target, source, shallowArray = false) {
|
|
587
|
+
function baseMerge(target, source, shallowArray = false, skipTargetArray = false) {
|
|
583
588
|
if (source) {
|
|
584
589
|
if (target === source) {
|
|
585
590
|
return;
|
|
@@ -594,8 +599,10 @@
|
|
|
594
599
|
let propIndex = -1;
|
|
595
600
|
while (length--) {
|
|
596
601
|
const key = props[++propIndex];
|
|
597
|
-
if (isValid(iterable[key]) &&
|
|
598
|
-
|
|
602
|
+
if (isValid(iterable[key]) &&
|
|
603
|
+
typeof iterable[key] === 'object' &&
|
|
604
|
+
(!skipTargetArray || !isArray(target[key]))) {
|
|
605
|
+
baseMergeDeep(target, source, key, shallowArray, skipTargetArray);
|
|
599
606
|
}
|
|
600
607
|
else {
|
|
601
608
|
assignMergeValue(target, key, iterable[key]);
|
|
@@ -604,7 +611,7 @@
|
|
|
604
611
|
}
|
|
605
612
|
}
|
|
606
613
|
}
|
|
607
|
-
function baseMergeDeep(target, source, key, shallowArray = false) {
|
|
614
|
+
function baseMergeDeep(target, source, key, shallowArray = false, skipTargetArray = false) {
|
|
608
615
|
const objValue = target[key];
|
|
609
616
|
const srcValue = source[key];
|
|
610
617
|
let newValue = source[key];
|
|
@@ -635,7 +642,7 @@
|
|
|
635
642
|
isCommon = false;
|
|
636
643
|
}
|
|
637
644
|
if (isCommon) {
|
|
638
|
-
baseMerge(newValue, srcValue, shallowArray);
|
|
645
|
+
baseMerge(newValue, srcValue, shallowArray, skipTargetArray);
|
|
639
646
|
}
|
|
640
647
|
assignMergeValue(target, key, newValue);
|
|
641
648
|
}
|
|
@@ -1800,8 +1807,8 @@
|
|
|
1800
1807
|
return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);
|
|
1801
1808
|
}
|
|
1802
1809
|
function pointAt(x1, y1, x2, y2, t) {
|
|
1803
|
-
let x;
|
|
1804
|
-
let y;
|
|
1810
|
+
let x = x2;
|
|
1811
|
+
let y = y2;
|
|
1805
1812
|
if (typeof x1 === 'number' && typeof x2 === 'number') {
|
|
1806
1813
|
x = (1 - t) * x1 + t * x2;
|
|
1807
1814
|
}
|
|
@@ -2868,6 +2875,24 @@
|
|
|
2868
2875
|
function LinearToSRGB(c) {
|
|
2869
2876
|
return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;
|
|
2870
2877
|
}
|
|
2878
|
+
const setHex = (formatValue, forceHex) => {
|
|
2879
|
+
const isHex = REG_HEX.exec(formatValue);
|
|
2880
|
+
if (forceHex || isHex) {
|
|
2881
|
+
const hex = parseInt(isHex[1], 16);
|
|
2882
|
+
const hexLength = isHex[1].length;
|
|
2883
|
+
if (hexLength === 3) {
|
|
2884
|
+
return new RGB(((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4), ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4), (hex & 0xf) + ((hex & 0xf) << 4), 1);
|
|
2885
|
+
}
|
|
2886
|
+
if (hexLength === 6) {
|
|
2887
|
+
return rgb(hex);
|
|
2888
|
+
}
|
|
2889
|
+
else if (hexLength === 8) {
|
|
2890
|
+
return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);
|
|
2891
|
+
}
|
|
2892
|
+
return null;
|
|
2893
|
+
}
|
|
2894
|
+
return undefined;
|
|
2895
|
+
};
|
|
2871
2896
|
class Color {
|
|
2872
2897
|
static Brighter(source, b = 1) {
|
|
2873
2898
|
if (b === 1) {
|
|
@@ -2906,20 +2931,9 @@
|
|
|
2906
2931
|
return rgb(DEFAULT_COLORS[value]);
|
|
2907
2932
|
}
|
|
2908
2933
|
const formatValue = `${value}`.trim().toLowerCase();
|
|
2909
|
-
const
|
|
2910
|
-
if (
|
|
2911
|
-
|
|
2912
|
-
const hexLength = isHex[1].length;
|
|
2913
|
-
if (hexLength === 3) {
|
|
2914
|
-
return new RGB(((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4), ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4), (hex & 0xf) + ((hex & 0xf) << 4), 1);
|
|
2915
|
-
}
|
|
2916
|
-
if (hexLength === 6) {
|
|
2917
|
-
return rgb(hex);
|
|
2918
|
-
}
|
|
2919
|
-
else if (hexLength === 8) {
|
|
2920
|
-
return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);
|
|
2921
|
-
}
|
|
2922
|
-
return;
|
|
2934
|
+
const hexRes = setHex(value);
|
|
2935
|
+
if (hexRes !== undefined) {
|
|
2936
|
+
return hexRes;
|
|
2923
2937
|
}
|
|
2924
2938
|
if (/^(rgb|RGB|rgba|RGBA)/.test(formatValue)) {
|
|
2925
2939
|
const aColor = formatValue.replace(/(?:\(|\)|rgba|RGBA|rgb|RGB)*/g, '').split(',');
|
|
@@ -3004,19 +3018,8 @@
|
|
|
3004
3018
|
}
|
|
3005
3019
|
setHex(value) {
|
|
3006
3020
|
const formatValue = `${value}`.trim().toLowerCase();
|
|
3007
|
-
const
|
|
3008
|
-
|
|
3009
|
-
const hexLength = isHex[1].length;
|
|
3010
|
-
if (hexLength === 3) {
|
|
3011
|
-
return new RGB(((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4), ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4), (hex & 0xf) + ((hex & 0xf) << 4), 1);
|
|
3012
|
-
}
|
|
3013
|
-
if (hexLength === 6) {
|
|
3014
|
-
return rgb(hex);
|
|
3015
|
-
}
|
|
3016
|
-
else if (hexLength === 8) {
|
|
3017
|
-
return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);
|
|
3018
|
-
}
|
|
3019
|
-
return this;
|
|
3021
|
+
const res = setHex(formatValue, true);
|
|
3022
|
+
return res !== null && res !== void 0 ? res : this;
|
|
3020
3023
|
}
|
|
3021
3024
|
setColorName(name) {
|
|
3022
3025
|
const hex = DEFAULT_COLORS[name.toLowerCase()];
|
|
@@ -3202,39 +3205,26 @@
|
|
|
3202
3205
|
out[0] = v1[0] - v2[0];
|
|
3203
3206
|
out[1] = v1[1] - v2[1];
|
|
3204
3207
|
}
|
|
3205
|
-
let x11;
|
|
3206
|
-
let x12;
|
|
3207
|
-
let y11;
|
|
3208
|
-
let y12;
|
|
3209
|
-
let x21;
|
|
3210
|
-
let x22;
|
|
3211
|
-
let y21;
|
|
3212
|
-
let y22;
|
|
3213
3208
|
function isIntersect(left1, right1, left2, right2) {
|
|
3214
3209
|
let min1 = left1[0];
|
|
3215
3210
|
let max1 = right1[0];
|
|
3216
3211
|
let min2 = left2[0];
|
|
3217
3212
|
let max2 = right2[0];
|
|
3218
|
-
let _temp;
|
|
3219
3213
|
if (max1 < min1) {
|
|
3220
|
-
|
|
3221
|
-
(max1 = min1), (min1 = _temp);
|
|
3214
|
+
[min1, max1] = [max1, min1];
|
|
3222
3215
|
}
|
|
3223
3216
|
if (max2 < min2) {
|
|
3224
|
-
|
|
3225
|
-
(max2 = min2), (min2 = _temp);
|
|
3217
|
+
[max2, min2] = [min2, max2];
|
|
3226
3218
|
}
|
|
3227
3219
|
if (max1 < min2 || max2 < min1) {
|
|
3228
3220
|
return false;
|
|
3229
3221
|
}
|
|
3230
3222
|
(min1 = left1[1]), (max1 = right1[1]), (min2 = left2[1]), (max2 = right2[1]);
|
|
3231
3223
|
if (max1 < min1) {
|
|
3232
|
-
|
|
3233
|
-
(max1 = min1), (min1 = _temp);
|
|
3224
|
+
[min1, max1] = [max1, min1];
|
|
3234
3225
|
}
|
|
3235
3226
|
if (max2 < min2) {
|
|
3236
|
-
|
|
3237
|
-
(max2 = min2), (min2 = _temp);
|
|
3227
|
+
[max2, min2] = [min2, max2];
|
|
3238
3228
|
}
|
|
3239
3229
|
if (max1 < min2 || max2 < min1) {
|
|
3240
3230
|
return false;
|
|
@@ -3267,28 +3257,7 @@
|
|
|
3267
3257
|
if (bbox2 === null) {
|
|
3268
3258
|
return bbox1;
|
|
3269
3259
|
}
|
|
3270
|
-
|
|
3271
|
-
(x12 = bbox1.x2),
|
|
3272
|
-
(y11 = bbox1.y1),
|
|
3273
|
-
(y12 = bbox1.y2),
|
|
3274
|
-
(x21 = bbox2.x1),
|
|
3275
|
-
(x22 = bbox2.x2),
|
|
3276
|
-
(y21 = bbox2.y1),
|
|
3277
|
-
(y22 = bbox2.y2);
|
|
3278
|
-
if (format) {
|
|
3279
|
-
if (x11 > x12) {
|
|
3280
|
-
[x11, x12] = [x12, x11];
|
|
3281
|
-
}
|
|
3282
|
-
if (y11 > y12) {
|
|
3283
|
-
[y11, y12] = [y12, y11];
|
|
3284
|
-
}
|
|
3285
|
-
if (x21 > x22) {
|
|
3286
|
-
[x21, x22] = [x22, x21];
|
|
3287
|
-
}
|
|
3288
|
-
if (y21 > y22) {
|
|
3289
|
-
[y21, y22] = [y22, y21];
|
|
3290
|
-
}
|
|
3291
|
-
}
|
|
3260
|
+
const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, format);
|
|
3292
3261
|
if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {
|
|
3293
3262
|
return { x1: 0, y1: 0, x2: 0, y2: 0 };
|
|
3294
3263
|
}
|
|
@@ -3300,18 +3269,15 @@
|
|
|
3300
3269
|
InnerBBox[InnerBBox["BBOX1"] = 1] = "BBOX1";
|
|
3301
3270
|
InnerBBox[InnerBBox["BBOX2"] = 2] = "BBOX2";
|
|
3302
3271
|
})(exports.InnerBBox || (exports.InnerBBox = {}));
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
(x22 = bbox2.x2),
|
|
3313
|
-
(y21 = bbox2.y1),
|
|
3314
|
-
(y22 = bbox2.y2);
|
|
3272
|
+
const formatTwoBBox = (bbox1, bbox2, format) => {
|
|
3273
|
+
let x11 = bbox1.x1;
|
|
3274
|
+
let x12 = bbox1.x2;
|
|
3275
|
+
let y11 = bbox1.y1;
|
|
3276
|
+
let y12 = bbox1.y2;
|
|
3277
|
+
let x21 = bbox2.x1;
|
|
3278
|
+
let x22 = bbox2.x2;
|
|
3279
|
+
let y21 = bbox2.y1;
|
|
3280
|
+
let y22 = bbox2.y2;
|
|
3315
3281
|
if (format) {
|
|
3316
3282
|
if (x11 > x12) {
|
|
3317
3283
|
[x11, x12] = [x12, x11];
|
|
@@ -3326,6 +3292,13 @@
|
|
|
3326
3292
|
[y21, y22] = [y22, y21];
|
|
3327
3293
|
}
|
|
3328
3294
|
}
|
|
3295
|
+
return { x11, x12, y11, y12, x21, x22, y21, y22 };
|
|
3296
|
+
};
|
|
3297
|
+
function rectInsideAnotherRect(bbox1, bbox2, format) {
|
|
3298
|
+
if (!bbox1 || !bbox2) {
|
|
3299
|
+
return exports.InnerBBox.NONE;
|
|
3300
|
+
}
|
|
3301
|
+
const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, format);
|
|
3329
3302
|
if (x11 > x21 && x12 < x22 && y11 > y21 && y12 < y22) {
|
|
3330
3303
|
return exports.InnerBBox.BBOX1;
|
|
3331
3304
|
}
|
|
@@ -3342,26 +3315,7 @@
|
|
|
3342
3315
|
}
|
|
3343
3316
|
return true;
|
|
3344
3317
|
}
|
|
3345
|
-
|
|
3346
|
-
(x12 = bbox1.x2),
|
|
3347
|
-
(y11 = bbox1.y1),
|
|
3348
|
-
(y12 = bbox1.y2),
|
|
3349
|
-
(x21 = bbox2.x1),
|
|
3350
|
-
(x22 = bbox2.x2),
|
|
3351
|
-
(y21 = bbox2.y1),
|
|
3352
|
-
(y22 = bbox2.y2);
|
|
3353
|
-
if (x11 > x12) {
|
|
3354
|
-
[x11, x12] = [x12, x11];
|
|
3355
|
-
}
|
|
3356
|
-
if (y11 > y12) {
|
|
3357
|
-
[y11, y12] = [y12, y11];
|
|
3358
|
-
}
|
|
3359
|
-
if (x21 > x22) {
|
|
3360
|
-
[x21, x22] = [x22, x21];
|
|
3361
|
-
}
|
|
3362
|
-
if (y21 > y22) {
|
|
3363
|
-
[y21, y22] = [y22, y21];
|
|
3364
|
-
}
|
|
3318
|
+
const { x11, x12, y11, y12, x21, x22, y21, y22 } = formatTwoBBox(bbox1, bbox2, true);
|
|
3365
3319
|
if (x11 > x22 || x12 < x21 || y11 > y22 || y12 < y21) {
|
|
3366
3320
|
return false;
|
|
3367
3321
|
}
|
|
@@ -3376,7 +3330,10 @@
|
|
|
3376
3330
|
if (!format) {
|
|
3377
3331
|
return point.x >= bbox.x1 && point.x <= bbox.x2 && point.y >= bbox.y1 && point.y <= bbox.y2;
|
|
3378
3332
|
}
|
|
3379
|
-
|
|
3333
|
+
let x11 = bbox.x1;
|
|
3334
|
+
let x12 = bbox.x2;
|
|
3335
|
+
let y11 = bbox.y1;
|
|
3336
|
+
let y12 = bbox.y2;
|
|
3380
3337
|
if (x11 > x12) {
|
|
3381
3338
|
[x11, x12] = [x12, x11];
|
|
3382
3339
|
}
|
|
@@ -4086,13 +4043,16 @@
|
|
|
4086
4043
|
return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
|
|
4087
4044
|
};
|
|
4088
4045
|
|
|
4089
|
-
function getContextFont(text, defaultAttr = {}) {
|
|
4046
|
+
function getContextFont(text, defaultAttr = {}, fontSizeScale) {
|
|
4047
|
+
if (!fontSizeScale) {
|
|
4048
|
+
fontSizeScale = 1;
|
|
4049
|
+
}
|
|
4090
4050
|
const { fontStyle = defaultAttr.fontStyle, fontVariant = defaultAttr.fontVariant, fontWeight = defaultAttr.fontWeight, fontSize = defaultAttr.fontSize, fontFamily = defaultAttr.fontFamily } = text;
|
|
4091
4051
|
return ('' +
|
|
4092
4052
|
(fontStyle ? fontStyle + ' ' : '') +
|
|
4093
4053
|
(fontVariant ? fontVariant + ' ' : '') +
|
|
4094
4054
|
(fontWeight ? fontWeight + ' ' : '') +
|
|
4095
|
-
fontSize +
|
|
4055
|
+
fontSize * fontSizeScale +
|
|
4096
4056
|
'px ' +
|
|
4097
4057
|
(fontFamily ? fontFamily : 'sans-serif'));
|
|
4098
4058
|
}
|
|
@@ -6133,6 +6093,7 @@
|
|
|
6133
6093
|
exports.ascending = ascending;
|
|
6134
6094
|
exports.asin = asin;
|
|
6135
6095
|
exports.atan2 = atan2;
|
|
6096
|
+
exports.baseMerge = baseMerge;
|
|
6136
6097
|
exports.binaryFuzzySearch = binaryFuzzySearch;
|
|
6137
6098
|
exports.binaryFuzzySearchInNumberRange = binaryFuzzySearchInNumberRange;
|
|
6138
6099
|
exports.bisect = bisect;
|