| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.getTextPoint = exports.toPx = exports.updateClip = exports.getBBoxWithClip = exports.mergeBBox = exports.intersectBBox = exports.near = exports.wait = exports.distance = exports.getCirclePoint = exports.getValueByPercent = exports.createBBox = exports.pointsToBBox = exports.regionToBBox = exports.hasClass = exports.clearDom = exports.formatPadding = void 0;
- var util_1 = require("@antv/util");
- function formatPadding(padding) {
- var top = 0;
- var left = 0;
- var right = 0;
- var bottom = 0;
- if (util_1.isNumber(padding)) {
- top = left = right = bottom = padding;
- }
- else if (util_1.isArray(padding)) {
- top = padding[0];
- right = !util_1.isNil(padding[1]) ? padding[1] : padding[0];
- bottom = !util_1.isNil(padding[2]) ? padding[2] : padding[0];
- left = !util_1.isNil(padding[3]) ? padding[3] : right;
- }
- return [top, right, bottom, left];
- }
- exports.formatPadding = formatPadding;
- function clearDom(container) {
- var children = container.childNodes;
- var length = children.length;
- for (var i = length - 1; i >= 0; i--) {
- container.removeChild(children[i]);
- }
- }
- exports.clearDom = clearDom;
- function hasClass(elements, cName) {
- return !!elements.className.match(new RegExp("(\\s|^)" + cName + "(\\s|$)"));
- }
- exports.hasClass = hasClass;
- function regionToBBox(region) {
- var start = region.start, end = region.end;
- var minX = Math.min(start.x, end.x);
- var minY = Math.min(start.y, end.y);
- var maxX = Math.max(start.x, end.x);
- var maxY = Math.max(start.y, end.y);
- return {
- x: minX,
- y: minY,
- minX: minX,
- minY: minY,
- maxX: maxX,
- maxY: maxY,
- width: maxX - minX,
- height: maxY - minY,
- };
- }
- exports.regionToBBox = regionToBBox;
- function pointsToBBox(points) {
- var xs = points.map(function (point) { return point.x; });
- var ys = points.map(function (point) { return point.y; });
- var minX = Math.min.apply(Math, xs);
- var minY = Math.min.apply(Math, ys);
- var maxX = Math.max.apply(Math, xs);
- var maxY = Math.max.apply(Math, ys);
- return {
- x: minX,
- y: minY,
- minX: minX,
- minY: minY,
- maxX: maxX,
- maxY: maxY,
- width: maxX - minX,
- height: maxY - minY,
- };
- }
- exports.pointsToBBox = pointsToBBox;
- function createBBox(x, y, width, height) {
- var maxX = x + width;
- var maxY = y + height;
- return {
- x: x,
- y: y,
- width: width,
- height: height,
- minX: x,
- minY: y,
- // 非常奇葩的 js 特性
- // Infinity + Infinity = Infinity
- // Infinity - Infinity = NaN
- // fixed https://github.com/antvis/G2Plot/issues/1243
- maxX: isNaN(maxX) ? 0 : maxX,
- maxY: isNaN(maxY) ? 0 : maxY,
- };
- }
- exports.createBBox = createBBox;
- function getValueByPercent(min, max, percent) {
- return (1 - percent) * min + max * percent;
- }
- exports.getValueByPercent = getValueByPercent;
- function getCirclePoint(center, radius, angle) {
- return {
- x: center.x + Math.cos(angle) * radius,
- y: center.y + Math.sin(angle) * radius,
- };
- }
- exports.getCirclePoint = getCirclePoint;
- function distance(p1, p2) {
- var dx = p2.x - p1.x;
- var dy = p2.y - p1.y;
- return Math.sqrt(dx * dx + dy * dy);
- }
- exports.distance = distance;
- exports.wait = function (interval) {
- return new Promise(function (resolve) {
- setTimeout(resolve, interval);
- });
- };
- /**
- * 判断两个数值 是否接近
- * - 解决精度问题(由于无法确定精度上限,根据具体场景可传入 精度 参数)
- */
- exports.near = function (x, y, e) {
- if (e === void 0) { e = Math.pow(Number.EPSILON, 0.5); }
- return [x, y].includes(Infinity) ? Math.abs(x) === Math.abs(y) : Math.abs(x - y) < e;
- };
- function intersectBBox(box1, box2) {
- var minX = Math.max(box1.minX, box2.minX);
- var minY = Math.max(box1.minY, box2.minY);
- var maxX = Math.min(box1.maxX, box2.maxX);
- var maxY = Math.min(box1.maxY, box2.maxY);
- return createBBox(minX, minY, maxX - minX, maxY - minY);
- }
- exports.intersectBBox = intersectBBox;
- function mergeBBox(box1, box2) {
- var minX = Math.min(box1.minX, box2.minX);
- var minY = Math.min(box1.minY, box2.minY);
- var maxX = Math.max(box1.maxX, box2.maxX);
- var maxY = Math.max(box1.maxY, box2.maxY);
- return createBBox(minX, minY, maxX - minX, maxY - minY);
- }
- exports.mergeBBox = mergeBBox;
- function getBBoxWithClip(element) {
- var clipShape = element.getClip();
- var clipBBox = clipShape && clipShape.getBBox();
- var bbox;
- if (!element.isGroup()) {
- // 如果是普通的图形
- bbox = element.getBBox();
- }
- else {
- var minX_1 = Infinity;
- var maxX_1 = -Infinity;
- var minY_1 = Infinity;
- var maxY_1 = -Infinity;
- var children = element.getChildren();
- if (children.length > 0) {
- util_1.each(children, function (child) {
- if (child.get('visible')) {
- // 如果分组没有子元素,则直接跳过
- if (child.isGroup() && child.get('children').length === 0) {
- return true;
- }
- var box = getBBoxWithClip(child);
- // 计算 4 个顶点
- var leftTop = child.applyToMatrix([box.minX, box.minY, 1]);
- var leftBottom = child.applyToMatrix([box.minX, box.maxY, 1]);
- var rightTop = child.applyToMatrix([box.maxX, box.minY, 1]);
- var rightBottom = child.applyToMatrix([box.maxX, box.maxY, 1]);
- // 从中取最小的范围
- var boxMinX = Math.min(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0]);
- var boxMaxX = Math.max(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0]);
- var boxMinY = Math.min(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1]);
- var boxMaxY = Math.max(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1]);
- if (boxMinX < minX_1) {
- minX_1 = boxMinX;
- }
- if (boxMaxX > maxX_1) {
- maxX_1 = boxMaxX;
- }
- if (boxMinY < minY_1) {
- minY_1 = boxMinY;
- }
- if (boxMaxY > maxY_1) {
- maxY_1 = boxMaxY;
- }
- }
- });
- }
- else {
- minX_1 = 0;
- maxX_1 = 0;
- minY_1 = 0;
- maxY_1 = 0;
- }
- bbox = createBBox(minX_1, minY_1, maxX_1 - minX_1, maxY_1 - minY_1);
- }
- if (clipBBox) {
- return intersectBBox(bbox, clipBBox);
- }
- else {
- return bbox;
- }
- }
- exports.getBBoxWithClip = getBBoxWithClip;
- function updateClip(element, newElement) {
- if (!element.getClip() && !newElement.getClip()) {
- // 两者都没有 clip
- return;
- }
- var newClipShape = newElement.getClip();
- if (!newClipShape) {
- // 新的 element 没有 clip
- element.setClip(null); // 移除 clip
- return;
- }
- var clipCfg = {
- type: newClipShape.get('type'),
- attrs: newClipShape.attr(),
- };
- element.setClip(clipCfg);
- }
- exports.updateClip = updateClip;
- function toPx(number) {
- return number + "px";
- }
- exports.toPx = toPx;
- function getTextPoint(start, end, position, offset) {
- var lineLength = distance(start, end);
- var offsetPercent = offset / lineLength; // 计算间距同线的比例,用于计算最终的位置
- var percent = 0;
- if (position === 'start') {
- percent = 0 - offsetPercent;
- }
- else if (position === 'end') {
- percent = 1 + offsetPercent;
- }
- return {
- x: getValueByPercent(start.x, end.x, percent),
- y: getValueByPercent(start.y, end.y, percent),
- };
- }
- exports.getTextPoint = getTextPoint;
- //# sourceMappingURL=util.js.map
|