UNPKG

bytev-charts

Version:

基于echarts和JavaScript及ES6封装的一个可以直接调用的图表组件库,内置主题设计,简单快捷,且支持用户自定义配置; npm 安装方式: npm install bytev-charts 若启动提示还需额外install插件,则运行 npm install @babel/runtime-corejs2 即可;

171 lines (148 loc) 7.33 kB
import "core-js/modules/es.array.iterator.js"; import "core-js/modules/es.array-buffer.slice.js"; import "core-js/modules/es.object.to-string.js"; import "core-js/modules/es.typed-array.float32-array.js"; import "core-js/modules/es.typed-array.copy-within.js"; import "core-js/modules/es.typed-array.every.js"; import "core-js/modules/es.typed-array.fill.js"; import "core-js/modules/es.typed-array.filter.js"; import "core-js/modules/es.typed-array.find.js"; import "core-js/modules/es.typed-array.find-index.js"; import "core-js/modules/es.typed-array.for-each.js"; import "core-js/modules/es.typed-array.includes.js"; import "core-js/modules/es.typed-array.index-of.js"; import "core-js/modules/es.typed-array.iterator.js"; import "core-js/modules/es.typed-array.join.js"; import "core-js/modules/es.typed-array.last-index-of.js"; import "core-js/modules/es.typed-array.map.js"; import "core-js/modules/es.typed-array.reduce.js"; import "core-js/modules/es.typed-array.reduce-right.js"; import "core-js/modules/es.typed-array.reverse.js"; import "core-js/modules/es.typed-array.set.js"; import "core-js/modules/es.typed-array.slice.js"; import "core-js/modules/es.typed-array.some.js"; import "core-js/modules/es.typed-array.sort.js"; import "core-js/modules/es.typed-array.subarray.js"; import "core-js/modules/es.typed-array.to-locale-string.js"; import "core-js/modules/es.typed-array.to-string.js"; import _Object$assign from "@babel/runtime-corejs2/core-js/object/assign"; import _Object$create from "@babel/runtime-corejs2/core-js/object/create"; console.warn("THREE.LineSegments2: As part of the transition to ES6 Modules, the files in 'examples/js' were deprecated in May 2020 (r117) and will be deleted in December 2020 (r124). You can find more information about developing using ES6 Modules in https://threejs.org/docs/#manual/en/introduction/Installation."); THREE.LineSegments2 = function (geometry, material) { THREE.Mesh.call(this); this.type = 'LineSegments2'; this.geometry = geometry !== undefined ? geometry : new THREE.LineSegmentsGeometry(); this.material = material !== undefined ? material : new THREE.LineMaterial({ color: Math.random() * 0xffffff }); }; THREE.LineSegments2.prototype = _Object$assign(_Object$create(THREE.Mesh.prototype), { constructor: THREE.LineSegments2, isLineSegments2: true, computeLineDistances: function () { // for backwards-compatability, but could be a method of LineSegmentsGeometry... var start = new THREE.Vector3(); var end = new THREE.Vector3(); return function computeLineDistances() { var geometry = this.geometry; var instanceStart = geometry.attributes.instanceStart; var instanceEnd = geometry.attributes.instanceEnd; var lineDistances = new Float32Array(2 * instanceStart.data.count); for (var i = 0, j = 0, l = instanceStart.data.count; i < l; i++, j += 2) { start.fromBufferAttribute(instanceStart, i); end.fromBufferAttribute(instanceEnd, i); lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1]; lineDistances[j + 1] = lineDistances[j] + start.distanceTo(end); } var instanceDistanceBuffer = new THREE.InstancedInterleavedBuffer(lineDistances, 2, 1); // d0, d1 geometry.setAttribute('instanceDistanceStart', new THREE.InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0)); // d0 geometry.setAttribute('instanceDistanceEnd', new THREE.InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1)); // d1 return this; }; }(), raycast: function () { var start = new THREE.Vector4(); var end = new THREE.Vector4(); var ssOrigin = new THREE.Vector4(); var ssOrigin3 = new THREE.Vector3(); var mvMatrix = new THREE.Matrix4(); var line = new THREE.Line3(); var closestPoint = new THREE.Vector3(); return function raycast(raycaster, intersects) { if (raycaster.camera === null) { console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.'); } var ray = raycaster.ray; var camera = raycaster.camera; var projectionMatrix = camera.projectionMatrix; var geometry = this.geometry; var material = this.material; var resolution = material.resolution; var lineWidth = material.linewidth; var instanceStart = geometry.attributes.instanceStart; var instanceEnd = geometry.attributes.instanceEnd; // pick a point 1 unit out along the ray to avoid the ray origin // sitting at the camera origin which will cause "w" to be 0 when // applying the projection matrix. ray.at(1, ssOrigin); // ndc space [ - 1.0, 1.0 ] ssOrigin.w = 1; ssOrigin.applyMatrix4(camera.matrixWorldInverse); ssOrigin.applyMatrix4(projectionMatrix); ssOrigin.multiplyScalar(1 / ssOrigin.w); // screen space ssOrigin.x *= resolution.x / 2; ssOrigin.y *= resolution.y / 2; ssOrigin.z = 0; ssOrigin3.copy(ssOrigin); var matrixWorld = this.matrixWorld; mvMatrix.multiplyMatrices(camera.matrixWorldInverse, matrixWorld); for (var i = 0, l = instanceStart.count; i < l; i++) { start.fromBufferAttribute(instanceStart, i); end.fromBufferAttribute(instanceEnd, i); start.w = 1; end.w = 1; // camera space start.applyMatrix4(mvMatrix); end.applyMatrix4(mvMatrix); // clip space start.applyMatrix4(projectionMatrix); end.applyMatrix4(projectionMatrix); // ndc space [ - 1.0, 1.0 ] start.multiplyScalar(1 / start.w); end.multiplyScalar(1 / end.w); // skip the segment if it's outside the camera near and far planes var isBehindCameraNear = start.z < -1 && end.z < -1; var isPastCameraFar = start.z > 1 && end.z > 1; if (isBehindCameraNear || isPastCameraFar) { continue; } // screen space start.x *= resolution.x / 2; start.y *= resolution.y / 2; end.x *= resolution.x / 2; end.y *= resolution.y / 2; // create 2d segment line.start.copy(start); line.start.z = 0; line.end.copy(end); line.end.z = 0; // get closest point on ray to segment var param = line.closestPointToPointParameter(ssOrigin3, true); line.at(param, closestPoint); // check if the intersection point is within clip space var zPos = THREE.MathUtils.lerp(start.z, end.z, param); var isInClipSpace = zPos >= -1 && zPos <= 1; var isInside = ssOrigin3.distanceTo(closestPoint) < lineWidth * 0.5; if (isInClipSpace && isInside) { line.start.fromBufferAttribute(instanceStart, i); line.end.fromBufferAttribute(instanceEnd, i); line.start.applyMatrix4(matrixWorld); line.end.applyMatrix4(matrixWorld); var pointOnLine = new THREE.Vector3(); var point = new THREE.Vector3(); ray.distanceSqToSegment(line.start, line.end, point, pointOnLine); intersects.push({ point: point, pointOnLine: pointOnLine, distance: ray.origin.distanceTo(point), object: this, face: null, faceIndex: i, uv: null, uv2: null }); } } }; }() });