UNPKG

bytev-charts-beta

Version:

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

149 lines (137 loc) 6.2 kB
import _Number$EPSILON from "@babel/runtime-corejs2/core-js/number/epsilon"; import "core-js/modules/es.number.constructor.js"; import "core-js/modules/es.string.sub.js"; console.warn("THREE.SelectionBox: 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."); /** * This is a class to check whether objects are in a selection area in 3D space */ THREE.SelectionBox = function () { var frustum = new THREE.Frustum(); var center = new THREE.Vector3(); var tmpPoint = new THREE.Vector3(); var vecNear = new THREE.Vector3(); var vecTopLeft = new THREE.Vector3(); var vecTopRight = new THREE.Vector3(); var vecDownRight = new THREE.Vector3(); var vecDownLeft = new THREE.Vector3(); var vecFarTopLeft = new THREE.Vector3(); var vecFarTopRight = new THREE.Vector3(); var vecFarDownRight = new THREE.Vector3(); var vecFarDownLeft = new THREE.Vector3(); var vectemp1 = new THREE.Vector3(); var vectemp2 = new THREE.Vector3(); var vectemp3 = new THREE.Vector3(); function SelectionBox(camera, scene, deep) { this.camera = camera; this.scene = scene; this.startPoint = new THREE.Vector3(); this.endPoint = new THREE.Vector3(); this.collection = []; this.deep = deep || Number.MAX_VALUE; } SelectionBox.prototype.select = function (startPoint, endPoint) { this.startPoint = startPoint || this.startPoint; this.endPoint = endPoint || this.endPoint; this.collection = []; this.updateFrustum(this.startPoint, this.endPoint); this.searchChildInFrustum(frustum, this.scene); return this.collection; }; SelectionBox.prototype.updateFrustum = function (startPoint, endPoint) { startPoint = startPoint || this.startPoint; endPoint = endPoint || this.endPoint; // Avoid invalid frustum if (startPoint.x === endPoint.x) { endPoint.x += _Number$EPSILON; } if (startPoint.y === endPoint.y) { endPoint.y += _Number$EPSILON; } this.camera.updateProjectionMatrix(); this.camera.updateMatrixWorld(); if (this.camera.isPerspectiveCamera) { tmpPoint.copy(startPoint); tmpPoint.x = Math.min(startPoint.x, endPoint.x); tmpPoint.y = Math.max(startPoint.y, endPoint.y); endPoint.x = Math.max(startPoint.x, endPoint.x); endPoint.y = Math.min(startPoint.y, endPoint.y); vecNear.setFromMatrixPosition(this.camera.matrixWorld); vecTopLeft.copy(tmpPoint); vecTopRight.set(endPoint.x, tmpPoint.y, 0); vecDownRight.copy(endPoint); vecDownLeft.set(tmpPoint.x, endPoint.y, 0); vecTopLeft.unproject(this.camera); vecTopRight.unproject(this.camera); vecDownRight.unproject(this.camera); vecDownLeft.unproject(this.camera); vectemp1.copy(vecTopLeft).sub(vecNear); vectemp2.copy(vecTopRight).sub(vecNear); vectemp3.copy(vecDownRight).sub(vecNear); vectemp1.normalize(); vectemp2.normalize(); vectemp3.normalize(); vectemp1.multiplyScalar(this.deep); vectemp2.multiplyScalar(this.deep); vectemp3.multiplyScalar(this.deep); vectemp1.add(vecNear); vectemp2.add(vecNear); vectemp3.add(vecNear); var planes = frustum.planes; planes[0].setFromCoplanarPoints(vecNear, vecTopLeft, vecTopRight); planes[1].setFromCoplanarPoints(vecNear, vecTopRight, vecDownRight); planes[2].setFromCoplanarPoints(vecDownRight, vecDownLeft, vecNear); planes[3].setFromCoplanarPoints(vecDownLeft, vecTopLeft, vecNear); planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft); planes[5].setFromCoplanarPoints(vectemp3, vectemp2, vectemp1); planes[5].normal.multiplyScalar(-1); } else if (this.camera.isOrthographicCamera) { var left = Math.min(startPoint.x, endPoint.x); var top = Math.max(startPoint.y, endPoint.y); var right = Math.max(startPoint.x, endPoint.x); var down = Math.min(startPoint.y, endPoint.y); vecTopLeft.set(left, top, -1); vecTopRight.set(right, top, -1); vecDownRight.set(right, down, -1); vecDownLeft.set(left, down, -1); vecFarTopLeft.set(left, top, 1); vecFarTopRight.set(right, top, 1); vecFarDownRight.set(right, down, 1); vecFarDownLeft.set(left, down, 1); vecTopLeft.unproject(this.camera); vecTopRight.unproject(this.camera); vecDownRight.unproject(this.camera); vecDownLeft.unproject(this.camera); vecFarTopLeft.unproject(this.camera); vecFarTopRight.unproject(this.camera); vecFarDownRight.unproject(this.camera); vecFarDownLeft.unproject(this.camera); var planes = frustum.planes; planes[0].setFromCoplanarPoints(vecTopLeft, vecFarTopLeft, vecFarTopRight); planes[1].setFromCoplanarPoints(vecTopRight, vecFarTopRight, vecFarDownRight); planes[2].setFromCoplanarPoints(vecFarDownRight, vecFarDownLeft, vecDownLeft); planes[3].setFromCoplanarPoints(vecFarDownLeft, vecFarTopLeft, vecTopLeft); planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft); planes[5].setFromCoplanarPoints(vecFarDownRight, vecFarTopRight, vecFarTopLeft); planes[5].normal.multiplyScalar(-1); } else { console.error('THREE.SelectionBox: Unsupported camera type.'); } }; SelectionBox.prototype.searchChildInFrustum = function (frustum, object) { if (object.isMesh || object.isLine || object.isPoints) { if (object.material !== undefined) { if (object.geometry.boundingSphere === null) object.geometry.computeBoundingSphere(); center.copy(object.geometry.boundingSphere.center); center.applyMatrix4(object.matrixWorld); if (frustum.containsPoint(center)) { this.collection.push(object); } } } if (object.children.length > 0) { for (var x = 0; x < object.children.length; x++) { this.searchChildInFrustum(frustum, object.children[x]); } } }; return SelectionBox; }();