cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
244 lines (243 loc) • 7.83 kB
JavaScript
import { __extends } from "../../../../tslib/tslib.es6.mjs";
import { createSymbol } from "../../util/symbol.mjs";
import { getECData } from "../../util/innerStore.mjs";
import BoundingRect from "../../../../zrender/lib/core/BoundingRect.mjs";
import Path from "../../../../zrender/lib/graphic/Path.mjs";
import Group from "../../../../zrender/lib/graphic/Group.mjs";
var BOOST_SIZE_THRESHOLD = 4;
var LargeSymbolPathShape = function() {
function LargeSymbolPathShape2() {
}
return LargeSymbolPathShape2;
}();
var LargeSymbolPath = function(_super) {
__extends(LargeSymbolPath2, _super);
function LargeSymbolPath2(opts) {
var _this = _super.call(this, opts) || this;
_this._off = 0;
_this.hoverDataIdx = -1;
return _this;
}
LargeSymbolPath2.prototype.getDefaultShape = function() {
return new LargeSymbolPathShape();
};
LargeSymbolPath2.prototype.reset = function() {
this.notClear = false;
this._off = 0;
};
LargeSymbolPath2.prototype.buildPath = function(path, shape) {
var points = shape.points;
var size = shape.size;
var symbolProxy = this.symbolProxy;
var symbolProxyShape = symbolProxy.shape;
var ctx = path.getContext ? path.getContext() : path;
var canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD;
var softClipShape = this.softClipShape;
var i;
if (canBoost) {
this._ctx = ctx;
return;
}
this._ctx = null;
for (i = this._off; i < points.length; ) {
var x = points[i++];
var y = points[i++];
if (isNaN(x) || isNaN(y)) {
continue;
}
if (softClipShape && !softClipShape.contain(x, y)) {
continue;
}
symbolProxyShape.x = x - size[0] / 2;
symbolProxyShape.y = y - size[1] / 2;
symbolProxyShape.width = size[0];
symbolProxyShape.height = size[1];
symbolProxy.buildPath(path, symbolProxyShape, true);
}
if (this.incremental) {
this._off = i;
this.notClear = true;
}
};
LargeSymbolPath2.prototype.afterBrush = function() {
var shape = this.shape;
var points = shape.points;
var size = shape.size;
var ctx = this._ctx;
var softClipShape = this.softClipShape;
var i;
if (!ctx) {
return;
}
for (i = this._off; i < points.length; ) {
var x = points[i++];
var y = points[i++];
if (isNaN(x) || isNaN(y)) {
continue;
}
if (softClipShape && !softClipShape.contain(x, y)) {
continue;
}
ctx.fillRect(x - size[0] / 2, y - size[1] / 2, size[0], size[1]);
}
if (this.incremental) {
this._off = i;
this.notClear = true;
}
};
LargeSymbolPath2.prototype.findDataIndex = function(x, y) {
var shape = this.shape;
var points = shape.points;
var size = shape.size;
var w = Math.max(size[0], 4);
var h = Math.max(size[1], 4);
for (var idx = points.length / 2 - 1; idx >= 0; idx--) {
var i = idx * 2;
var x0 = points[i] - w / 2;
var y0 = points[i + 1] - h / 2;
if (x >= x0 && y >= y0 && x <= x0 + w && y <= y0 + h) {
return idx;
}
}
return -1;
};
LargeSymbolPath2.prototype.contain = function(x, y) {
var localPos = this.transformCoordToLocal(x, y);
var rect = this.getBoundingRect();
x = localPos[0];
y = localPos[1];
if (rect.contain(x, y)) {
var dataIdx = this.hoverDataIdx = this.findDataIndex(x, y);
return dataIdx >= 0;
}
this.hoverDataIdx = -1;
return false;
};
LargeSymbolPath2.prototype.getBoundingRect = function() {
var rect = this._rect;
if (!rect) {
var shape = this.shape;
var points = shape.points;
var size = shape.size;
var w = size[0];
var h = size[1];
var minX = Infinity;
var minY = Infinity;
var maxX = -Infinity;
var maxY = -Infinity;
for (var i = 0; i < points.length; ) {
var x = points[i++];
var y = points[i++];
minX = Math.min(x, minX);
maxX = Math.max(x, maxX);
minY = Math.min(y, minY);
maxY = Math.max(y, maxY);
}
rect = this._rect = new BoundingRect(minX - w / 2, minY - h / 2, maxX - minX + w, maxY - minY + h);
}
return rect;
};
return LargeSymbolPath2;
}(Path);
var LargeSymbolDraw = function() {
function LargeSymbolDraw2() {
this.group = new Group();
}
LargeSymbolDraw2.prototype.updateData = function(data, opt) {
this._clear();
var symbolEl = this._create();
symbolEl.setShape({
points: data.getLayout("points")
});
this._setCommon(symbolEl, data, opt);
};
LargeSymbolDraw2.prototype.updateLayout = function(data) {
var points = data.getLayout("points");
this.group.eachChild(function(child) {
if (child.startIndex != null) {
var len = (child.endIndex - child.startIndex) * 2;
var byteOffset = child.startIndex * 4 * 2;
points = new Float32Array(points.buffer, byteOffset, len);
}
child.setShape("points", points);
child.reset();
});
};
LargeSymbolDraw2.prototype.incrementalPrepareUpdate = function(data) {
this._clear();
};
LargeSymbolDraw2.prototype.incrementalUpdate = function(taskParams, data, opt) {
var lastAdded = this._newAdded[0];
var points = data.getLayout("points");
var oldPoints = lastAdded && lastAdded.shape.points;
if (oldPoints && oldPoints.length < 2e4) {
var oldLen = oldPoints.length;
var newPoints = new Float32Array(oldLen + points.length);
newPoints.set(oldPoints);
newPoints.set(points, oldLen);
lastAdded.endIndex = taskParams.end;
lastAdded.setShape({
points: newPoints
});
} else {
this._newAdded = [];
var symbolEl = this._create();
symbolEl.startIndex = taskParams.start;
symbolEl.endIndex = taskParams.end;
symbolEl.incremental = true;
symbolEl.setShape({
points
});
this._setCommon(symbolEl, data, opt);
}
};
LargeSymbolDraw2.prototype.eachRendered = function(cb) {
this._newAdded[0] && cb(this._newAdded[0]);
};
LargeSymbolDraw2.prototype._create = function() {
var symbolEl = new LargeSymbolPath({
cursor: "default"
});
symbolEl.ignoreCoarsePointer = true;
this.group.add(symbolEl);
this._newAdded.push(symbolEl);
return symbolEl;
};
LargeSymbolDraw2.prototype._setCommon = function(symbolEl, data, opt) {
var hostModel = data.hostModel;
opt = opt || {};
var size = data.getVisual("symbolSize");
symbolEl.setShape("size", size instanceof Array ? size : [size, size]);
symbolEl.softClipShape = opt.clipShape || null;
symbolEl.symbolProxy = createSymbol(data.getVisual("symbol"), 0, 0, 0, 0);
symbolEl.setColor = symbolEl.symbolProxy.setColor;
var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD;
symbolEl.useStyle(
hostModel.getModel("itemStyle").getItemStyle(extrudeShadow ? ["color", "shadowBlur", "shadowColor"] : ["color"])
);
var globalStyle = data.getVisual("style");
var visualColor = globalStyle && globalStyle.fill;
if (visualColor) {
symbolEl.setColor(visualColor);
}
var ecData = getECData(symbolEl);
ecData.seriesIndex = hostModel.seriesIndex;
symbolEl.on("mousemove", function(e) {
ecData.dataIndex = null;
var dataIndex = symbolEl.hoverDataIdx;
if (dataIndex >= 0) {
ecData.dataIndex = dataIndex + (symbolEl.startIndex || 0);
}
});
};
LargeSymbolDraw2.prototype.remove = function() {
this._clear();
};
LargeSymbolDraw2.prototype._clear = function() {
this._newAdded = [];
this.group.removeAll();
};
return LargeSymbolDraw2;
}();
var LargeSymbolDraw$1 = LargeSymbolDraw;
export { LargeSymbolDraw$1 as default };