UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

125 lines (124 loc) 4.82 kB
import Globe from "./globe/Globe.mjs"; import "../../../echarts/lib/echarts.mjs"; import { getLayoutRect } from "../../../echarts/lib/util/layout.mjs"; import ViewGL from "../core/ViewGL.mjs"; import retrieve from "../util/retrieve.mjs"; import graphicGL from "../util/graphicGL.mjs"; import { createScale } from "../../../echarts/lib/export/api/helper.mjs"; import Axis from "../../../echarts/lib/coord/Axis.mjs"; function getDisplacementData(img, displacementScale) { var canvas = document.createElement("canvas"); var ctx = canvas.getContext("2d"); var width = img.width; var height = img.height; canvas.width = width; canvas.height = height; ctx.drawImage(img, 0, 0, width, height); var rgbaArr = ctx.getImageData(0, 0, width, height).data; var displacementArr = new Float32Array(rgbaArr.length / 4); for (var i = 0; i < rgbaArr.length / 4; i++) { var x = rgbaArr[i * 4]; displacementArr[i] = x / 255 * displacementScale; } return { data: displacementArr, width, height }; } function resizeGlobe(globeModel, api) { var boxLayoutOption = globeModel.getBoxLayoutParams(); var viewport = getLayoutRect(boxLayoutOption, { width: api.getWidth(), height: api.getHeight() }); viewport.y = api.getHeight() - viewport.y - viewport.height; this.viewGL.setViewport(viewport.x, viewport.y, viewport.width, viewport.height, api.getDevicePixelRatio()); this.radius = globeModel.get("globeRadius"); var outerRadius = globeModel.get("globeOuterRadius"); if (this.altitudeAxis) { this.altitudeAxis.setExtent(0, outerRadius - this.radius); } } function updateGlobe(ecModel, api) { var altitudeDataExtent = [Infinity, -Infinity]; ecModel.eachSeries(function(seriesModel) { if (seriesModel.coordinateSystem !== this) { return; } var data = seriesModel.getData(); var altDims = seriesModel.coordDimToDataDim("alt"); var altDim = altDims && altDims[0]; if (altDim) { var dataExtent = data.getDataExtent(altDim, true); altitudeDataExtent[0] = Math.min(altitudeDataExtent[0], dataExtent[0]); altitudeDataExtent[1] = Math.max(altitudeDataExtent[1], dataExtent[1]); } }, this); if (altitudeDataExtent && isFinite(altitudeDataExtent[1] - altitudeDataExtent[0])) { var scale = createScale(altitudeDataExtent, { type: "value", min: "dataMin", max: "dataMax" }); this.altitudeAxis = new Axis("altitude", scale); this.resize(this.model, api); } } var globeCreator = { dimensions: Globe.prototype.dimensions, create: function(ecModel, api) { var globeList = []; ecModel.eachComponent("globe", function(globeModel) { globeModel.__viewGL = globeModel.__viewGL || new ViewGL(); var globe = new Globe(); globe.viewGL = globeModel.__viewGL; globeModel.coordinateSystem = globe; globe.model = globeModel; globeList.push(globe); globe.resize = resizeGlobe; globe.resize(globeModel, api); globe.update = updateGlobe; }); ecModel.eachSeries(function(seriesModel) { if (seriesModel.get("coordinateSystem") === "globe") { var globeModel = seriesModel.getReferringComponents("globe").models[0]; if (!globeModel) { globeModel = ecModel.getComponent("globe"); } if (!globeModel) { throw new Error('globe "' + retrieve.firstNotNull(seriesModel.get("globe3DIndex"), seriesModel.get("globe3DId"), 0) + '" not found'); } var coordSys = globeModel.coordinateSystem; seriesModel.coordinateSystem = coordSys; } }); ecModel.eachComponent("globe", function(globeModel, idx) { var globe = globeModel.coordinateSystem; var displacementTextureValue = globeModel.getDisplacementTexture(); var displacementScale = globeModel.getDisplacemenScale(); if (globeModel.isDisplacementChanged()) { if (globeModel.hasDisplacement()) { var immediateLoaded = true; graphicGL.loadTexture(displacementTextureValue, api, function(texture) { var img = texture.image; var displacementData = getDisplacementData(img, displacementScale); globeModel.setDisplacementData(displacementData.data, displacementData.width, displacementData.height); if (!immediateLoaded) { api.dispatchAction({ type: "globeUpdateDisplacment" }); } }); immediateLoaded = false; } else { globe.setDisplacementData(null, 0, 0); } globe.setDisplacementData(globeModel.displacementData, globeModel.displacementWidth, globeModel.displacementHeight); } }); return globeList; } }; var globeCreator$1 = globeCreator; export { globeCreator$1 as default };