NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g2/lib/geom/venn.js
2023-09-14 14:47:11 +08:00

155 lines
4.4 KiB
Java

function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
/**
* @fileOverview Venn Diagram
* @author leungwensen@gmail.com
*/
var GeomBase = require('./base');
var Util = require('../util');
var _require = require('venn.js'),
venn = _require.venn,
scaleSolution = _require.scaleSolution,
circlePath = _require.circlePath,
intersectionAreaPath = _require.intersectionAreaPath,
computeTextCentres = _require.computeTextCentres;
require('./shape/venn');
var Venn = /*#__PURE__*/function (_GeomBase) {
_inheritsLoose(Venn, _GeomBase);
function Venn() {
return _GeomBase.apply(this, arguments) || this;
}
var _proto = Venn.prototype;
/**
* get default configuration
* @protected
* @return {Object} configuration
*/
_proto.getDefaultCfg = function getDefaultCfg() {
var cfg = _GeomBase.prototype.getDefaultCfg.call(this);
cfg.type = 'venn';
cfg.shapeType = 'venn';
cfg.generatePoints = false; // super.draw(data, container, shapeFactory, index);
return cfg;
};
_proto._getAttrValues = function _getAttrValues(attr, record) {
if (attr.type === 'position') {
return [record.x, record.y];
}
return _GeomBase.prototype._getAttrValues.call(this, attr, record);
};
_proto.sets = function sets(field) {
this.set('setsField', field);
return this;
};
_proto._initAttrs = function _initAttrs() {
var self = this;
_GeomBase.prototype._initAttrs.call(this);
var attrOptions = self.get('attrOptions');
var setsField = self.get('setsField') || 'sets';
var data = self.get('data');
var sizeField = attrOptions.size ? attrOptions.size.field : 'size'; // prepare data
data.forEach(function (row) {
row.sets = row[setsField];
row._sets = row[setsField].join('&');
row.size = row[sizeField];
});
var solution = venn(data); // scaling
var coord = self.get('coord');
var xRange = [Math.min(coord.x.end, coord.x.start), Math.max(coord.x.end, coord.x.start)];
var yRange = [Math.min(coord.y.end, coord.y.start), Math.max(coord.y.end, coord.y.start)];
var width = xRange[1] - xRange[0];
var height = yRange[1] - yRange[0];
var styleOptions = self.get('styleOptions');
var padding = styleOptions && Util.isObject(styleOptions.style) ? styleOptions.style.padding : 0;
if (!Util.isFinite(padding)) {
padding = 0;
}
var circles = scaleSolution(solution, width, height, padding);
var textCenters = computeTextCentres(circles, data);
data.forEach(function (row) {
var sets = row.sets;
var id = sets.join(',');
row.id = id;
if (sets.length === 1) {
var circle = circles[id];
row.path = circlePath(circle.x, circle.y, circle.radius);
Util.assign(row, circle);
} else {
var setCircles = sets.map(function (set) {
return circles[set];
});
var path = intersectionAreaPath(setCircles);
if (!/[zZ]$/.test(path)) {
path += 'Z';
}
row.path = path;
var center = textCenters[id] || {
x: 0,
y: 0
};
Util.assign(row, center);
}
}); // x, y scales
// self.position('x*y');
// self.scale('x', { type: 'identity' });
// self.scale('y', { type: 'identity' });
} // createShapePointsCfg(obj) {
// const xScale = this.getXScale();
// const yScale = this.getYScale();
// return {
// x: obj[xScale.field],
// y: obj[yScale.field],
// y0: yScale ? yScale.scale(this.getYMinValue()) : undefined
// };
// }
// paint() {
// super.paint();
// const self = this;
// const dataArray = self.get('dataArray');
// const shapeContainer = self.get('shapeContainer');
// // add labels
// dataArray.forEach(row => {
// const cfg = self.getDrawCfg(row[0]);
// const origin = cfg.origin._origin;
// shapeContainer.addShape('text', {
// attrs: Util.mix({}, {
// x: origin.x,
// y: origin.y,
// text: origin.label || '',
// fontSize: 18,
// fill: cfg.shape === 'hollow' ? cfg.color : '#666',
// textAlign: 'center',
// textBaseline: 'middle'
// }, cfg.style ? cfg.style.textStyle : {})
// });
// });
// }
;
return Venn;
}(GeomBase);
GeomBase.Venn = Venn;
module.exports = Venn;