cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
153 lines (152 loc) • 5.37 kB
JavaScript
import "../../../../echarts/lib/echarts.mjs";
import graphicGL from "../../util/graphicGL.mjs";
import retrieve from "../../util/retrieve.mjs";
import LinesGeometry from "../../util/geometry/Lines3D.mjs";
import QuadsGeometry from "../../util/geometry/Quads.mjs";
import { isArray } from "../../../../zrender/lib/core/util.mjs";
var firstNotNull = retrieve.firstNotNull;
var dimIndicesMap = {
x: 0,
y: 2,
z: 1
};
function updateFacePlane(node, plane, otherAxis, dir) {
var coord = [0, 0, 0];
var distance = dir < 0 ? otherAxis.getExtentMin() : otherAxis.getExtentMax();
coord[dimIndicesMap[otherAxis.dim]] = distance;
node.position.setArray(coord);
node.rotation.identity();
plane.distance = -Math.abs(distance);
plane.normal.set(0, 0, 0);
if (otherAxis.dim === "x") {
node.rotation.rotateY(dir * Math.PI / 2);
plane.normal.x = -dir;
} else if (otherAxis.dim === "z") {
node.rotation.rotateX(-dir * Math.PI / 2);
plane.normal.y = -dir;
} else {
if (dir > 0) {
node.rotation.rotateY(Math.PI);
}
plane.normal.z = -dir;
}
}
function Grid3DFace(faceInfo, linesMaterial, quadsMaterial) {
this.rootNode = new graphicGL.Node();
var linesMesh = new graphicGL.Mesh({
geometry: new LinesGeometry({
useNativeLine: false
}),
material: linesMaterial,
castShadow: false,
ignorePicking: true,
$ignorePicking: true,
renderOrder: 1
});
var quadsMesh = new graphicGL.Mesh({
geometry: new QuadsGeometry(),
material: quadsMaterial,
castShadow: false,
culling: false,
ignorePicking: true,
$ignorePicking: true,
renderOrder: 0
});
this.rootNode.add(quadsMesh);
this.rootNode.add(linesMesh);
this.faceInfo = faceInfo;
this.plane = new graphicGL.Plane();
this.linesMesh = linesMesh;
this.quadsMesh = quadsMesh;
}
Grid3DFace.prototype.update = function(grid3DModel, ecModel, api) {
var cartesian = grid3DModel.coordinateSystem;
var axes = [cartesian.getAxis(this.faceInfo[0]), cartesian.getAxis(this.faceInfo[1])];
var lineGeometry = this.linesMesh.geometry;
var quadsGeometry = this.quadsMesh.geometry;
lineGeometry.convertToDynamicArray(true);
quadsGeometry.convertToDynamicArray(true);
this._updateSplitLines(lineGeometry, axes, grid3DModel, api);
this._udpateSplitAreas(quadsGeometry, axes, grid3DModel, api);
lineGeometry.convertToTypedArray();
quadsGeometry.convertToTypedArray();
var otherAxis = cartesian.getAxis(this.faceInfo[2]);
updateFacePlane(this.rootNode, this.plane, otherAxis, this.faceInfo[3]);
};
Grid3DFace.prototype._updateSplitLines = function(geometry, axes, grid3DModel, api) {
var dpr = api.getDevicePixelRatio();
axes.forEach(function(axis, idx) {
var axisModel = axis.model;
var otherExtent = axes[1 - idx].getExtent();
if (axis.scale.isBlank()) {
return;
}
var splitLineModel = axisModel.getModel("splitLine", grid3DModel.getModel("splitLine"));
if (splitLineModel.get("show")) {
var lineStyleModel = splitLineModel.getModel("lineStyle");
var lineColors = lineStyleModel.get("color");
var opacity = firstNotNull(lineStyleModel.get("opacity"), 1);
var lineWidth = firstNotNull(lineStyleModel.get("width"), 1);
lineColors = isArray(lineColors) ? lineColors : [lineColors];
var ticksCoords = axis.getTicksCoords({
tickModel: splitLineModel
});
var count = 0;
for (var i = 0; i < ticksCoords.length; i++) {
var tickCoord = ticksCoords[i].coord;
var lineColor = graphicGL.parseColor(lineColors[count % lineColors.length]);
lineColor[3] *= opacity;
var p0 = [0, 0, 0];
var p1 = [0, 0, 0];
p0[idx] = p1[idx] = tickCoord;
p0[1 - idx] = otherExtent[0];
p1[1 - idx] = otherExtent[1];
geometry.addLine(p0, p1, lineColor, lineWidth * dpr);
count++;
}
}
});
};
Grid3DFace.prototype._udpateSplitAreas = function(geometry, axes, grid3DModel, api) {
axes.forEach(function(axis, idx) {
var axisModel = axis.model;
var otherExtent = axes[1 - idx].getExtent();
if (axis.scale.isBlank()) {
return;
}
var splitAreaModel = axisModel.getModel("splitArea", grid3DModel.getModel("splitArea"));
if (splitAreaModel.get("show")) {
var areaStyleModel = splitAreaModel.getModel("areaStyle");
var colors = areaStyleModel.get("color");
var opacity = firstNotNull(areaStyleModel.get("opacity"), 1);
colors = isArray(colors) ? colors : [colors];
var ticksCoords = axis.getTicksCoords({
tickModel: splitAreaModel,
clamp: true
});
var count = 0;
var prevP0 = [0, 0, 0];
var prevP1 = [0, 0, 0];
for (var i = 0; i < ticksCoords.length; i++) {
var tickCoord = ticksCoords[i].coord;
var p0 = [0, 0, 0];
var p1 = [0, 0, 0];
p0[idx] = p1[idx] = tickCoord;
p0[1 - idx] = otherExtent[0];
p1[1 - idx] = otherExtent[1];
if (i === 0) {
prevP0 = p0;
prevP1 = p1;
continue;
}
var color = graphicGL.parseColor(colors[count % colors.length]);
color[3] *= opacity;
geometry.addQuad([prevP0, p0, p1, prevP1], color);
prevP0 = p0;
prevP1 = p1;
count++;
}
}
});
};
export { Grid3DFace as default };