cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
101 lines (100 loc) • 3.77 kB
JavaScript
import "../../../../echarts/lib/echarts.mjs";
import graphicGL from "../../util/graphicGL.mjs";
import retrieve from "../../util/retrieve.mjs";
import formatUtil from "../../util/format.mjs";
import PointsBuilder from "../common/PointsBuilder.mjs";
import ChartView from "../../../../echarts/lib/view/Chart.mjs";
import { each } from "../../../../zrender/lib/core/util.mjs";
var Scatter3DView = ChartView.extend({
type: "scatter3D",
hasSymbolVisual: true,
__ecgl__: true,
init: function(ecModel, api) {
this.groupGL = new graphicGL.Node();
this._pointsBuilderList = [];
this._currentStep = 0;
},
render: function(seriesModel, ecModel, api) {
this.groupGL.removeAll();
if (!seriesModel.getData().count()) {
return;
}
var coordSys = seriesModel.coordinateSystem;
if (coordSys && coordSys.viewGL) {
coordSys.viewGL.add(this.groupGL);
this._camera = coordSys.viewGL.camera;
var pointsBuilder = this._pointsBuilderList[0];
if (!pointsBuilder) {
pointsBuilder = this._pointsBuilderList[0] = new PointsBuilder(false, api);
}
this._pointsBuilderList.length = 1;
this.groupGL.add(pointsBuilder.rootNode);
pointsBuilder.update(seriesModel, ecModel, api);
pointsBuilder.updateView(coordSys.viewGL.camera);
}
},
incrementalPrepareRender: function(seriesModel, ecModel, api) {
var coordSys = seriesModel.coordinateSystem;
if (coordSys && coordSys.viewGL) {
coordSys.viewGL.add(this.groupGL);
this._camera = coordSys.viewGL.camera;
}
this.groupGL.removeAll();
this._currentStep = 0;
},
incrementalRender: function(params, seriesModel, ecModel, api) {
if (params.end <= params.start) {
return;
}
var pointsBuilder = this._pointsBuilderList[this._currentStep];
if (!pointsBuilder) {
pointsBuilder = new PointsBuilder(false, api);
this._pointsBuilderList[this._currentStep] = pointsBuilder;
}
this.groupGL.add(pointsBuilder.rootNode);
pointsBuilder.update(seriesModel, ecModel, api, params.start, params.end);
pointsBuilder.updateView(seriesModel.coordinateSystem.viewGL.camera);
this._currentStep++;
},
updateCamera: function() {
this._pointsBuilderList.forEach(function(pointsBuilder) {
pointsBuilder.updateView(this._camera);
}, this);
},
highlight: function(seriesModel, ecModel, api, payload) {
this._toggleStatus("highlight", seriesModel, ecModel, api, payload);
},
downplay: function(seriesModel, ecModel, api, payload) {
this._toggleStatus("downplay", seriesModel, ecModel, api, payload);
},
_toggleStatus: function(status, seriesModel, ecModel, api, payload) {
var data = seriesModel.getData();
var dataIndex = retrieve.queryDataIndex(data, payload);
var isHighlight = status === "highlight";
if (dataIndex != null) {
each(formatUtil.normalizeToArray(dataIndex), function(dataIdx) {
for (var i = 0; i < this._pointsBuilderList.length; i++) {
var pointsBuilder = this._pointsBuilderList[i];
isHighlight ? pointsBuilder.highlight(data, dataIdx) : pointsBuilder.downplay(data, dataIdx);
}
}, this);
} else {
data.each(function(dataIdx) {
for (var i = 0; i < this._pointsBuilderList.length; i++) {
var pointsBuilder = this._pointsBuilderList[i];
isHighlight ? pointsBuilder.highlight(data, dataIdx) : pointsBuilder.downplay(data, dataIdx);
}
});
}
},
dispose: function() {
this._pointsBuilderList.forEach(function(pointsBuilder) {
pointsBuilder.dispose();
});
this.groupGL.removeAll();
},
remove: function() {
this.groupGL.removeAll();
}
});
export { Scatter3DView as default };