95 lines
2.3 KiB
Java
95 lines
2.3 KiB
Java
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
|
|
|
|
/**
|
|
* @fileOverview circle facets
|
|
* @author dxq613@gmail.com
|
|
*/
|
|
var Base = require('./base');
|
|
|
|
function getPoint(center, r, angle) {
|
|
return {
|
|
x: center.x + r * Math.cos(angle),
|
|
y: center.y + r * Math.sin(angle)
|
|
};
|
|
}
|
|
|
|
var Circle = /*#__PURE__*/function (_Base) {
|
|
_inheritsLoose(Circle, _Base);
|
|
|
|
function Circle() {
|
|
return _Base.apply(this, arguments) || this;
|
|
}
|
|
|
|
var _proto = Circle.prototype;
|
|
|
|
_proto.getDefaultCfg = function getDefaultCfg() {
|
|
var cfg = _Base.prototype.getDefaultCfg.call(this);
|
|
|
|
cfg.type = 'circle';
|
|
return cfg;
|
|
};
|
|
|
|
_proto.getRegion = function getRegion(count, index) {
|
|
var r = 1 / 2; // 画布半径
|
|
|
|
var avgAngle = Math.PI * 2 / count;
|
|
var angle = -1 * Math.PI / 2 + avgAngle * index; // 当前分面所在的弧度
|
|
|
|
var facetR = r / (1 + 1 / Math.sin(avgAngle / 2));
|
|
var center = {
|
|
x: 0.5,
|
|
y: 0.5
|
|
}; // 画布圆心
|
|
|
|
var middle = getPoint(center, r - facetR, angle); // 分面的中心点
|
|
|
|
var startAngle = Math.PI * 5 / 4; // 右上角
|
|
|
|
var endAngle = Math.PI * 1 / 4; // 左下角
|
|
|
|
return {
|
|
start: getPoint(middle, facetR, startAngle),
|
|
end: getPoint(middle, facetR, endAngle)
|
|
};
|
|
};
|
|
|
|
_proto.generateFacets = function generateFacets(data) {
|
|
var self = this;
|
|
var fields = self.fields;
|
|
var field = fields[0];
|
|
|
|
if (!field) {
|
|
throw 'Please specify for the field for facet!';
|
|
}
|
|
|
|
var values = self.getFieldValues(field, data);
|
|
var count = values.length;
|
|
var rst = [];
|
|
values.forEach(function (value, index) {
|
|
var conditions = [{
|
|
field: field,
|
|
value: value,
|
|
values: values
|
|
}];
|
|
var filter = self.getFilter(conditions);
|
|
var subData = data.filter(filter);
|
|
var facet = {
|
|
type: self.type,
|
|
colValue: value,
|
|
colField: field,
|
|
colIndex: index,
|
|
cols: count,
|
|
rows: 1,
|
|
rowIndex: 0,
|
|
data: subData,
|
|
region: self.getRegion(count, index)
|
|
};
|
|
rst.push(facet);
|
|
});
|
|
return rst;
|
|
};
|
|
|
|
return Circle;
|
|
}(Base);
|
|
|
|
module.exports = Circle; |