Files
tekelanew_acs/acs/nladmin-ui/node_modules/echarts-gl/lib/util/EChartsSurface.js
2024-12-05 09:33:18 +08:00

183 lines
4.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _Texture2D = require("claygl/src/Texture2D");
var _Vector = require("claygl/src/math/Vector3");
var _Vector2 = require("claygl/src/math/Vector2");
/**
* Surface texture in the 3D scene.
* Provide management and rendering of zrender shapes and groups
*
* @module echarts-gl/util/EChartsSurface
* @author Yi Shen(http://github.com/pissang)
*/
var events = ['mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu'];
function makeHandlerName(eventName) {
return '_on' + eventName;
}
/**
* @constructor
* @alias echarts-gl/util/EChartsSurface
* @param {module:echarts~ECharts} chart
*/
var EChartsSurface = function (chart) {
var self = this;
this._texture = new _Texture2D.default({
anisotropic: 32,
flipY: false,
surface: this,
dispose: function (renderer) {
self.dispose();
_Texture2D.default.prototype.dispose.call(this, renderer);
}
});
events.forEach(function (eventName) {
this[makeHandlerName(eventName)] = function (eveObj) {
if (!eveObj.triangle) {
return;
}
this._meshes.forEach(function (mesh) {
this.dispatchEvent(eventName, mesh, eveObj.triangle, eveObj.point);
}, this);
};
}, this);
this._meshes = [];
if (chart) {
this.setECharts(chart);
} // Texture updated callback;
this.onupdate = null;
};
EChartsSurface.prototype = {
constructor: EChartsSurface,
getTexture: function () {
return this._texture;
},
setECharts: function (chart) {
this._chart = chart;
var canvas = chart.getDom();
if (!(canvas instanceof HTMLCanvasElement)) {
console.error('ECharts must init on canvas if it is used as texture.'); // Use an empty canvas
canvas = document.createElement('canvas');
} else {
var self = this; // Wrap refreshImmediately
var zr = chart.getZr();
var oldRefreshImmediately = zr.__oldRefreshImmediately || zr.refreshImmediately;
zr.refreshImmediately = function () {
oldRefreshImmediately.call(this);
self._texture.dirty();
self.onupdate && self.onupdate();
};
zr.__oldRefreshImmediately = oldRefreshImmediately;
}
this._texture.image = canvas;
this._texture.dirty();
this.onupdate && this.onupdate();
},
/**
* @method
* @param {clay.Mesh} attachedMesh
* @param {Array.<number>} triangle Triangle indices
* @param {clay.math.Vector3} point
*/
dispatchEvent: function () {
var p0 = new _Vector.default();
var p1 = new _Vector.default();
var p2 = new _Vector.default();
var uv0 = new _Vector2.default();
var uv1 = new _Vector2.default();
var uv2 = new _Vector2.default();
var uv = new _Vector2.default();
var vCross = new _Vector.default();
return function (eventName, attachedMesh, triangle, point) {
var geo = attachedMesh.geometry;
var position = geo.attributes.position;
var texcoord = geo.attributes.texcoord0;
var dot = _Vector.default.dot;
var cross = _Vector.default.cross;
position.get(triangle[0], p0.array);
position.get(triangle[1], p1.array);
position.get(triangle[2], p2.array);
texcoord.get(triangle[0], uv0.array);
texcoord.get(triangle[1], uv1.array);
texcoord.get(triangle[2], uv2.array);
cross(vCross, p1, p2);
var det = dot(p0, vCross);
var t = dot(point, vCross) / det;
cross(vCross, p2, p0);
var u = dot(point, vCross) / det;
cross(vCross, p0, p1);
var v = dot(point, vCross) / det;
_Vector2.default.scale(uv, uv0, t);
_Vector2.default.scaleAndAdd(uv, uv, uv1, u);
_Vector2.default.scaleAndAdd(uv, uv, uv2, v);
var x = uv.x * this._chart.getWidth();
var y = uv.y * this._chart.getHeight();
this._chart.getZr().handler.dispatch(eventName, {
zrX: x,
zrY: y
});
};
}(),
attachToMesh: function (mesh) {
if (this._meshes.indexOf(mesh) >= 0) {
return;
}
events.forEach(function (eventName) {
mesh.on(eventName, this[makeHandlerName(eventName)], this);
}, this);
this._meshes.push(mesh);
},
detachFromMesh: function (mesh) {
var idx = this._meshes.indexOf(mesh);
if (idx >= 0) {
this._meshes.splice(idx, 1);
}
events.forEach(function (eventName) {
mesh.off(eventName, this[makeHandlerName(eventName)]);
}, this);
},
dispose: function () {
this._meshes.forEach(function (mesh) {
this.detachFromMesh(mesh);
}, this);
}
};
var _default = EChartsSurface;
exports.default = _default;