UNPKG

echarts-gl

Version:

Extension pack of ECharts providing 3D plots and globe visualization

1,485 lines (1,290 loc) 1.9 MB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("echarts")); else if(typeof define === 'function' && define.amd) define(["echarts"], factory); else if(typeof exports === 'object') exports["echarts-gl"] = factory(require("echarts")); else root["echarts-gl"] = factory(root["echarts"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 106); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_0__; /***/ }), /* 1 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_claygl_src_Mesh__ = __webpack_require__(40); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_claygl_src_Renderer__ = __webpack_require__(52); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_claygl_src_Texture2D__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_claygl_src_Texture__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_claygl_src_Material__ = __webpack_require__(19); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_claygl_src_Node__ = __webpack_require__(35); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_claygl_src_Geometry__ = __webpack_require__(15); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_echarts_lib_echarts__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_echarts_lib_echarts___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_echarts_lib_echarts__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_claygl_src_Scene__ = __webpack_require__(36); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_zrender_lib_core_LRU__ = __webpack_require__(60); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_zrender_lib_core_LRU___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_zrender_lib_core_LRU__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_claygl_src_util_texture__ = __webpack_require__(61); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__EChartsSurface__ = __webpack_require__(124); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_claygl_src_light_AmbientCubemap__ = __webpack_require__(125); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_claygl_src_light_AmbientSH__ = __webpack_require__(129); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_claygl_src_util_sh__ = __webpack_require__(130); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__retrieve__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_claygl_src_geometry_Sphere__ = __webpack_require__(132); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_claygl_src_geometry_Plane__ = __webpack_require__(43); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_claygl_src_geometry_Cube__ = __webpack_require__(76); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_claygl_src_light_Ambient__ = __webpack_require__(133); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_claygl_src_light_Directional__ = __webpack_require__(134); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22_claygl_src_light_Point__ = __webpack_require__(135); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23_claygl_src_light_Spot__ = __webpack_require__(136); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_24_claygl_src_camera_Perspective__ = __webpack_require__(41); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_25_claygl_src_camera_Orthographic__ = __webpack_require__(37); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_26_claygl_src_math_Vector2__ = __webpack_require__(26); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_27_claygl_src_math_Vector3__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_28_claygl_src_math_Vector4__ = __webpack_require__(137); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_29_claygl_src_math_Quaternion__ = __webpack_require__(56); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_30_claygl_src_math_Matrix2__ = __webpack_require__(138); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_31_claygl_src_math_Matrix2d__ = __webpack_require__(139); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_32_claygl_src_math_Matrix3__ = __webpack_require__(140); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_33_claygl_src_math_Matrix4__ = __webpack_require__(9); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_34_claygl_src_math_Plane__ = __webpack_require__(74); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_35_claygl_src_math_Ray__ = __webpack_require__(54); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_36_claygl_src_math_BoundingBox__ = __webpack_require__(18); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_37_claygl_src_math_Frustum__ = __webpack_require__(59); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__animatableMixin__ = __webpack_require__(141); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_39_claygl_src_shader_source_util_glsl_js__ = __webpack_require__(146); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_40_claygl_src_shader_source_prez_glsl_js__ = __webpack_require__(71); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_41__shader_common_glsl_js__ = __webpack_require__(147); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_42__shader_color_glsl_js__ = __webpack_require__(148); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_43__shader_lambert_glsl_js__ = __webpack_require__(149); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_44__shader_realistic_glsl_js__ = __webpack_require__(150); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_45__shader_hatching_glsl_js__ = __webpack_require__(151); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__shader_shadow_glsl_js__ = __webpack_require__(152); // Math // Some common shaders __WEBPACK_IMPORTED_MODULE_8_echarts_lib_echarts___default.a.util.extend(__WEBPACK_IMPORTED_MODULE_6_claygl_src_Node__["a" /* default */].prototype, __WEBPACK_IMPORTED_MODULE_38__animatableMixin__["a" /* default */]); __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].import(__WEBPACK_IMPORTED_MODULE_39_claygl_src_shader_source_util_glsl_js__["a" /* default */]); __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].import(__WEBPACK_IMPORTED_MODULE_40_claygl_src_shader_source_prez_glsl_js__["a" /* default */]); __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].import(__WEBPACK_IMPORTED_MODULE_41__shader_common_glsl_js__["a" /* default */]); __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].import(__WEBPACK_IMPORTED_MODULE_42__shader_color_glsl_js__["a" /* default */]); __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].import(__WEBPACK_IMPORTED_MODULE_43__shader_lambert_glsl_js__["a" /* default */]); __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].import(__WEBPACK_IMPORTED_MODULE_44__shader_realistic_glsl_js__["a" /* default */]); __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].import(__WEBPACK_IMPORTED_MODULE_45__shader_hatching_glsl_js__["a" /* default */]); __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].import(__WEBPACK_IMPORTED_MODULE_46__shader_shadow_glsl_js__["a" /* default */]); function isValueNone(value) { return !value || value === 'none'; } function isValueImage(value) { return value instanceof HTMLCanvasElement || value instanceof HTMLImageElement || value instanceof Image; } function isECharts(value) { return value.getZr && value.setOption; } // Overwrite addToScene and removeFromScene var oldAddToScene = __WEBPACK_IMPORTED_MODULE_9_claygl_src_Scene__["a" /* default */].prototype.addToScene; var oldRemoveFromScene = __WEBPACK_IMPORTED_MODULE_9_claygl_src_Scene__["a" /* default */].prototype.removeFromScene; __WEBPACK_IMPORTED_MODULE_9_claygl_src_Scene__["a" /* default */].prototype.addToScene = function (node) { oldAddToScene.call(this, node); if (this.__zr) { var zr = this.__zr; node.traverse(function (child) { child.__zr = zr; if (child.addAnimatorsToZr) { child.addAnimatorsToZr(zr); } }); } }; __WEBPACK_IMPORTED_MODULE_9_claygl_src_Scene__["a" /* default */].prototype.removeFromScene = function (node) { oldRemoveFromScene.call(this, node); node.traverse(function (child) { var zr = child.__zr; child.__zr = null; if (zr && child.removeAnimatorsFromZr) { child.removeAnimatorsFromZr(zr); } }); }; /** * @param {string} textureName * @param {string|HTMLImageElement|HTMLCanvasElement} imgValue * @param {module:echarts/ExtensionAPI} api * @param {Object} [textureOpts] */ __WEBPACK_IMPORTED_MODULE_5_claygl_src_Material__["a" /* default */].prototype.setTextureImage = function (textureName, imgValue, api, textureOpts) { if (!this.shader) { return; } var zr = api.getZr(); var material = this; var texture; material.autoUpdateTextureStatus = false; // disableTexture first material.disableTexture(textureName); if (!isValueNone(imgValue)) { texture = graphicGL.loadTexture(imgValue, api, textureOpts, function (texture) { material.enableTexture(textureName); zr && zr.refresh(); }); // Set texture immediately for other code to verify if have this texture. material.set(textureName, texture); } return texture; }; var graphicGL = {}; graphicGL.Renderer = __WEBPACK_IMPORTED_MODULE_1_claygl_src_Renderer__["a" /* default */]; graphicGL.Node = __WEBPACK_IMPORTED_MODULE_6_claygl_src_Node__["a" /* default */]; graphicGL.Mesh = __WEBPACK_IMPORTED_MODULE_0_claygl_src_Mesh__["a" /* default */]; graphicGL.Shader = __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */]; graphicGL.Material = __WEBPACK_IMPORTED_MODULE_5_claygl_src_Material__["a" /* default */]; graphicGL.Texture = __WEBPACK_IMPORTED_MODULE_3_claygl_src_Texture__["a" /* default */]; graphicGL.Texture2D = __WEBPACK_IMPORTED_MODULE_2_claygl_src_Texture2D__["a" /* default */]; // Geometries graphicGL.Geometry = __WEBPACK_IMPORTED_MODULE_7_claygl_src_Geometry__["a" /* default */]; graphicGL.SphereGeometry = __WEBPACK_IMPORTED_MODULE_17_claygl_src_geometry_Sphere__["a" /* default */]; graphicGL.PlaneGeometry = __WEBPACK_IMPORTED_MODULE_18_claygl_src_geometry_Plane__["a" /* default */]; graphicGL.CubeGeometry = __WEBPACK_IMPORTED_MODULE_19_claygl_src_geometry_Cube__["a" /* default */]; // Lights graphicGL.AmbientLight = __WEBPACK_IMPORTED_MODULE_20_claygl_src_light_Ambient__["a" /* default */]; graphicGL.DirectionalLight = __WEBPACK_IMPORTED_MODULE_21_claygl_src_light_Directional__["a" /* default */]; graphicGL.PointLight = __WEBPACK_IMPORTED_MODULE_22_claygl_src_light_Point__["a" /* default */]; graphicGL.SpotLight = __WEBPACK_IMPORTED_MODULE_23_claygl_src_light_Spot__["a" /* default */]; // Cameras graphicGL.PerspectiveCamera = __WEBPACK_IMPORTED_MODULE_24_claygl_src_camera_Perspective__["a" /* default */]; graphicGL.OrthographicCamera = __WEBPACK_IMPORTED_MODULE_25_claygl_src_camera_Orthographic__["a" /* default */]; // Math graphicGL.Vector2 = __WEBPACK_IMPORTED_MODULE_26_claygl_src_math_Vector2__["a" /* default */]; graphicGL.Vector3 = __WEBPACK_IMPORTED_MODULE_27_claygl_src_math_Vector3__["a" /* default */]; graphicGL.Vector4 = __WEBPACK_IMPORTED_MODULE_28_claygl_src_math_Vector4__["a" /* default */]; graphicGL.Quaternion = __WEBPACK_IMPORTED_MODULE_29_claygl_src_math_Quaternion__["a" /* default */]; graphicGL.Matrix2 = __WEBPACK_IMPORTED_MODULE_30_claygl_src_math_Matrix2__["a" /* default */]; graphicGL.Matrix2d = __WEBPACK_IMPORTED_MODULE_31_claygl_src_math_Matrix2d__["a" /* default */]; graphicGL.Matrix3 = __WEBPACK_IMPORTED_MODULE_32_claygl_src_math_Matrix3__["a" /* default */]; graphicGL.Matrix4 = __WEBPACK_IMPORTED_MODULE_33_claygl_src_math_Matrix4__["a" /* default */]; graphicGL.Plane = __WEBPACK_IMPORTED_MODULE_34_claygl_src_math_Plane__["a" /* default */]; graphicGL.Ray = __WEBPACK_IMPORTED_MODULE_35_claygl_src_math_Ray__["a" /* default */]; graphicGL.BoundingBox = __WEBPACK_IMPORTED_MODULE_36_claygl_src_math_BoundingBox__["a" /* default */]; graphicGL.Frustum = __WEBPACK_IMPORTED_MODULE_37_claygl_src_math_Frustum__["a" /* default */]; // Texture utilities var blankImage = __WEBPACK_IMPORTED_MODULE_11_claygl_src_util_texture__["a" /* default */].createBlank('rgba(255,255,255,0)').image; function nearestPowerOfTwo(val) { return Math.pow(2, Math.round(Math.log(val) / Math.LN2)); } function convertTextureToPowerOfTwo(texture) { if ((texture.wrapS === __WEBPACK_IMPORTED_MODULE_3_claygl_src_Texture__["a" /* default */].REPEAT || texture.wrapT === __WEBPACK_IMPORTED_MODULE_3_claygl_src_Texture__["a" /* default */].REPEAT) && texture.image ) { // var canvas = document.createElement('canvas'); var width = nearestPowerOfTwo(texture.width); var height = nearestPowerOfTwo(texture.height); if (width !== texture.width || height !== texture.height) { var canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; var ctx = canvas.getContext('2d'); ctx.drawImage(texture.image, 0, 0, width, height); texture.image = canvas; } } } /** * @param {string|HTMLImageElement|HTMLCanvasElement} imgValue * @param {module:echarts/ExtensionAPI} api * @param {Object} [textureOpts] * @param {Function} cb */ // TODO Promise, test graphicGL.loadTexture = function (imgValue, api, textureOpts, cb) { if (typeof textureOpts === 'function') { cb = textureOpts; textureOpts = {}; } textureOpts = textureOpts || {}; var keys = Object.keys(textureOpts).sort(); var prefix = ''; for (var i = 0; i < keys.length; i++) { prefix += keys[i] + '_' + textureOpts[keys[i]] + '_'; } var textureCache = api.__textureCache = api.__textureCache || new __WEBPACK_IMPORTED_MODULE_10_zrender_lib_core_LRU___default.a(20); if (isECharts(imgValue)) { var id = imgValue.__textureid__; var textureObj = textureCache.get(prefix + id); if (!textureObj) { var surface = new __WEBPACK_IMPORTED_MODULE_12__EChartsSurface__["a" /* default */](imgValue); surface.onupdate = function () { api.getZr().refresh(); }; textureObj = { texture: surface.getTexture() }; for (var i = 0; i < keys.length; i++) { textureObj.texture[keys[i]] = textureOpts[keys[i]]; } id = imgValue.__textureid__ || '__ecgl_ec__' + textureObj.texture.__uid__; imgValue.__textureid__ = id; textureCache.put(prefix + id, textureObj); cb && cb(textureObj.texture); } else { textureObj.texture.surface.setECharts(imgValue); cb && cb(textureObj.texture); } return textureObj.texture; } else if (isValueImage(imgValue)) { var id = imgValue.__textureid__; var textureObj = textureCache.get(prefix + id); if (!textureObj) { textureObj = { texture: new graphicGL.Texture2D({ image: imgValue }) }; for (var i = 0; i < keys.length; i++) { textureObj.texture[keys[i]] = textureOpts[keys[i]]; } id = imgValue.__textureid__ || '__ecgl_image__' + textureObj.texture.__uid__; imgValue.__textureid__ = id; textureCache.put(prefix + id, textureObj); convertTextureToPowerOfTwo(textureObj.texture); // TODO Next tick? cb && cb(textureObj.texture); } return textureObj.texture; } else { var textureObj = textureCache.get(prefix + imgValue); if (textureObj) { if (textureObj.callbacks) { // Add to pending callbacks textureObj.callbacks.push(cb); } else { // TODO Next tick? cb && cb(textureObj.texture); } } else { // Maybe base64 if (imgValue.match(/.hdr$|^data:application\/octet-stream/)) { textureObj = { callbacks: [cb] }; var texture = __WEBPACK_IMPORTED_MODULE_11_claygl_src_util_texture__["a" /* default */].loadTexture(imgValue, { exposure: textureOpts.exposure, fileType: 'hdr' }, function () { texture.dirty(); textureObj.callbacks.forEach(function (cb) { cb && cb(texture); }); textureObj.callbacks = null; }); textureObj.texture = texture; textureCache.put(prefix + imgValue, textureObj); } else { var texture = new graphicGL.Texture2D({ image: new Image() }); for (var i = 0; i < keys.length; i++) { texture[keys[i]] = textureOpts[keys[i]]; } textureObj = { texture: texture, callbacks: [cb] }; var originalImage = texture.image; originalImage.onload = function () { texture.image = originalImage; convertTextureToPowerOfTwo(texture); texture.dirty(); textureObj.callbacks.forEach(function (cb) { cb && cb(texture); }); textureObj.callbacks = null; }; originalImage.src = imgValue; // Use blank image as place holder. texture.image = blankImage; textureCache.put(prefix + imgValue, textureObj); } } return textureObj.texture; } }; /** * Create ambientCubemap and ambientSH light. respectively to have specular and diffuse light * @return {Object} { specular, diffuse } */ graphicGL.createAmbientCubemap = function (opt, renderer, api, cb) { opt = opt || {}; var textureUrl = opt.texture; var exposure = __WEBPACK_IMPORTED_MODULE_16__retrieve__["a" /* default */].firstNotNull(opt.exposure, 1.0); var ambientCubemap = new __WEBPACK_IMPORTED_MODULE_13_claygl_src_light_AmbientCubemap__["a" /* default */]({ intensity: __WEBPACK_IMPORTED_MODULE_16__retrieve__["a" /* default */].firstNotNull(opt.specularIntensity, 1.0) }); var ambientSH = new __WEBPACK_IMPORTED_MODULE_14_claygl_src_light_AmbientSH__["a" /* default */]({ intensity: __WEBPACK_IMPORTED_MODULE_16__retrieve__["a" /* default */].firstNotNull(opt.diffuseIntensity, 1.0), coefficients: [0.844, 0.712, 0.691, -0.037, 0.083, 0.167, 0.343, 0.288, 0.299, -0.041, -0.021, -0.009, -0.003, -0.041, -0.064, -0.011, -0.007, -0.004, -0.031, 0.034, 0.081, -0.060, -0.049, -0.060, 0.046, 0.056, 0.050] }); ambientCubemap.cubemap = graphicGL.loadTexture(textureUrl, api, { exposure: exposure }, function () { // TODO Performance when multiple view ambientCubemap.cubemap.flipY = false; if (true) { var time = Date.now(); } ambientCubemap.prefilter(renderer, 32); if (true) { var dTime = Date.now() - time; console.log('Prefilter environment map: ' + dTime + 'ms'); } ambientSH.coefficients = __WEBPACK_IMPORTED_MODULE_15_claygl_src_util_sh__["a" /* default */].projectEnvironmentMap(renderer, ambientCubemap.cubemap, { lod: 1 }); cb && cb(); // TODO Refresh ? }); return { specular: ambientCubemap, diffuse: ambientSH }; }; /** * Create a blank texture for placeholder */ graphicGL.createBlankTexture = __WEBPACK_IMPORTED_MODULE_11_claygl_src_util_texture__["a" /* default */].createBlank; /** * If value is image * @param {*} * @return {boolean} */ graphicGL.isImage = isValueImage; graphicGL.additiveBlend = function (gl) { gl.blendEquation(gl.FUNC_ADD); gl.blendFunc(gl.SRC_ALPHA, gl.ONE); }; /** * @param {string|Array.<number>} colorStr * @param {Array.<number>} [rgba] * @return {Array.<number>} rgba */ graphicGL.parseColor = function (colorStr, rgba) { if (colorStr instanceof Array) { if (!rgba) { rgba = []; } // Color has been parsed. rgba[0] = colorStr[0]; rgba[1] = colorStr[1]; rgba[2] = colorStr[2]; if (colorStr.length > 3) { rgba[3] = colorStr[3]; } else { rgba[3] = 1; } return rgba; } rgba = __WEBPACK_IMPORTED_MODULE_8_echarts_lib_echarts___default.a.color.parse(colorStr || '#000', rgba) || [0, 0, 0, 0]; rgba[0] /= 255; rgba[1] /= 255; rgba[2] /= 255; return rgba; }; /** * Convert alpha beta rotation to direction. * @param {number} alpha * @param {number} beta * @return {Array.<number>} */ graphicGL.directionFromAlphaBeta = function (alpha, beta) { var theta = alpha / 180 * Math.PI + Math.PI / 2; var phi = -beta / 180 * Math.PI + Math.PI / 2; var dir = []; var r = Math.sin(theta); dir[0] = r * Math.cos(phi); dir[1] = -Math.cos(theta); dir[2] = r * Math.sin(phi); return dir; }; /** * Get shadow resolution from shadowQuality configuration */ graphicGL.getShadowResolution = function (shadowQuality) { var shadowResolution = 1024; switch (shadowQuality) { case 'low': shadowResolution = 512; break; case 'medium': break; case 'high': shadowResolution = 2048; break; case 'ultra': shadowResolution = 4096; break; } return shadowResolution; }; /** * Shading utilities */ graphicGL.COMMON_SHADERS = ['lambert', 'color', 'realistic', 'hatching']; /** * Create shader including vertex and fragment * @param {string} prefix. */ graphicGL.createShader = function (prefix) { var vertexShaderStr = __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].source(prefix + '.vertex'); var fragmentShaderStr = __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */].source(prefix + '.fragment'); if (!vertexShaderStr) { console.error('Vertex shader of \'%s\' not exits', prefix); } if (!fragmentShaderStr) { console.error('Fragment shader of \'%s\' not exits', prefix); } var shader = new __WEBPACK_IMPORTED_MODULE_4_claygl_src_Shader__["a" /* default */](vertexShaderStr, fragmentShaderStr); shader.name = prefix; return shader; }; graphicGL.createMaterial = function (prefix, defines) { if (!(defines instanceof Array)) { defines = [defines]; } var shader = graphicGL.createShader(prefix); var material = new __WEBPACK_IMPORTED_MODULE_5_claygl_src_Material__["a" /* default */]({ shader: shader }); defines.forEach(function (defineName) { if (typeof defineName === 'string') { material.define(defineName); } }); return material; }; /** * Set material from model. * @param {clay.Material} material * @param {module:echarts/model/Model} model * @param {module:echarts/ExtensionAPI} api */ graphicGL.setMaterialFromModel = function (shading, material, model, api) { material.autoUpdateTextureStatus = false; var materialModel = model.getModel(shading + 'Material'); var detailTexture = materialModel.get('detailTexture'); var uvRepeat = __WEBPACK_IMPORTED_MODULE_16__retrieve__["a" /* default */].firstNotNull(materialModel.get('textureTiling'), 1.0); var uvOffset = __WEBPACK_IMPORTED_MODULE_16__retrieve__["a" /* default */].firstNotNull(materialModel.get('textureOffset'), 0.0); if (typeof uvRepeat === 'number') { uvRepeat = [uvRepeat, uvRepeat]; } if (typeof uvOffset === 'number') { uvOffset = [uvOffset, uvOffset]; } var repeatParam = (uvRepeat[0] > 1 || uvRepeat[1] > 1) ? graphicGL.Texture.REPEAT : graphicGL.Texture.CLAMP_TO_EDGE; var textureOpt = { anisotropic: 8, wrapS: repeatParam, wrapT: repeatParam }; if (shading === 'realistic') { var roughness = materialModel.get('roughness'); var metalness = materialModel.get('metalness'); if (metalness != null) { // Try to treat as a texture, TODO More check if (isNaN(metalness)) { material.setTextureImage('metalnessMap', metalness, api, textureOpt); metalness = __WEBPACK_IMPORTED_MODULE_16__retrieve__["a" /* default */].firstNotNull(materialModel.get('metalnessAdjust'), 0.5); } } else { // Default metalness. metalness = 0; } if (roughness != null) { // Try to treat as a texture, TODO More check if (isNaN(roughness)) { material.setTextureImage('roughnessMap', roughness, api, textureOpt); roughness = __WEBPACK_IMPORTED_MODULE_16__retrieve__["a" /* default */].firstNotNull(materialModel.get('roughnessAdjust'), 0.5); } } else { // Default roughness. roughness = 0.5; } var normalTextureVal = materialModel.get('normalTexture'); material.setTextureImage('detailMap', detailTexture, api, textureOpt); material.setTextureImage('normalMap', normalTextureVal, api, textureOpt); material.set({ roughness: roughness, metalness: metalness, detailUvRepeat: uvRepeat, detailUvOffset: uvOffset }); // var normalTexture = material.get('normalMap'); // if (normalTexture) { // PENDING // normalTexture.format = Texture.SRGB; // } } else if (shading === 'lambert') { material.setTextureImage('detailMap', detailTexture, api, textureOpt); material.set({ detailUvRepeat: uvRepeat, detailUvOffset: uvOffset }); } else if (shading === 'color') { material.setTextureImage('detailMap', detailTexture, api, textureOpt); material.set({ detailUvRepeat: uvRepeat, detailUvOffset: uvOffset }); } else if (shading === 'hatching') { var tams = materialModel.get('hatchingTextures') || []; if (tams.length < 6) { if (true) { console.error('Invalid hatchingTextures.'); } } for (var i = 0; i < 6; i++) { material.setTextureImage('hatch' + (i + 1), tams[i], api, { anisotropic: 8, wrapS: graphicGL.Texture.REPEAT, wrapT: graphicGL.Texture.REPEAT }); } material.set({ detailUvRepeat: uvRepeat, detailUvOffset: uvOffset }); } }; graphicGL.updateVertexAnimation = function ( mappingAttributes, previousMesh, currentMesh, seriesModel ) { var enableAnimation = seriesModel.get('animation'); var duration = seriesModel.get('animationDurationUpdate'); var easing = seriesModel.get('animationEasingUpdate'); var shadowDepthMaterial = currentMesh.shadowDepthMaterial; if (enableAnimation && previousMesh && duration > 0 // Only animate when bar count are not changed && previousMesh.geometry.vertexCount === currentMesh.geometry.vertexCount ) { currentMesh.material.define('vertex', 'VERTEX_ANIMATION'); currentMesh.ignorePreZ = true; if (shadowDepthMaterial) { shadowDepthMaterial.define('vertex', 'VERTEX_ANIMATION'); } for (var i = 0; i < mappingAttributes.length; i++) { currentMesh.geometry.attributes[mappingAttributes[i][0]].value = previousMesh.geometry.attributes[mappingAttributes[i][1]].value; } currentMesh.geometry.dirty(); currentMesh.__percent = 0; currentMesh.material.set('percent', 0); currentMesh.stopAnimation(); currentMesh.animate() .when(duration, { __percent: 1 }) .during(function () { currentMesh.material.set('percent', currentMesh.__percent); if (shadowDepthMaterial) { shadowDepthMaterial.set('percent', currentMesh.__percent); } }) .done(function () { currentMesh.ignorePreZ = false; currentMesh.material.undefine('vertex', 'VERTEX_ANIMATION'); if (shadowDepthMaterial) { shadowDepthMaterial.undefine('vertex', 'VERTEX_ANIMATION'); } }) .start(easing); } else { currentMesh.material.undefine('vertex', 'VERTEX_ANIMATION'); if (shadowDepthMaterial) { shadowDepthMaterial.undefine('vertex', 'VERTEX_ANIMATION'); } } }; /* harmony default export */ __webpack_exports__["a"] = (graphicGL); /***/ }), /* 2 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_echarts_lib_echarts__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_echarts_lib_echarts___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_echarts_lib_echarts__); var retrieve = { firstNotNull: function () { for (var i = 0, len = arguments.length; i < len; i++) { if (arguments[i] != null) { return arguments[i]; } } }, /** * @param {module:echarts/data/List} data * @param {Object} payload Contains dataIndex (means rawIndex) / dataIndexInside / name * each of which can be Array or primary type. * @return {number|Array.<number>} dataIndex If not found, return undefined/null. */ queryDataIndex: function (data, payload) { if (payload.dataIndexInside != null) { return payload.dataIndexInside; } else if (payload.dataIndex != null) { return __WEBPACK_IMPORTED_MODULE_0_echarts_lib_echarts___default.a.util.isArray(payload.dataIndex) ? __WEBPACK_IMPORTED_MODULE_0_echarts_lib_echarts___default.a.util.map(payload.dataIndex, function (value) { return data.indexOfRawIndex(value); }) : data.indexOfRawIndex(payload.dataIndex); } else if (payload.name != null) { return __WEBPACK_IMPORTED_MODULE_0_echarts_lib_echarts___default.a.util.isArray(payload.name) ? __WEBPACK_IMPORTED_MODULE_0_echarts_lib_echarts___default.a.util.map(payload.name, function (value) { return data.indexOfName(value); }) : data.indexOfName(payload.name); } } }; /* harmony default export */ __webpack_exports__["a"] = (retrieve); /***/ }), /* 3 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__ = __webpack_require__(12); /** * @constructor * @alias clay.Vector3 * @param {number} x * @param {number} y * @param {number} z */ var Vector3 = function(x, y, z) { x = x || 0; y = y || 0; z = z || 0; /** * Storage of Vector3, read and write of x, y, z will change the values in array * All methods also operate on the array instead of x, y, z components * @name array * @type {Float32Array} * @memberOf clay.Vector3# */ this.array = __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].fromValues(x, y, z); /** * Dirty flag is used by the Node to determine * if the matrix is updated to latest * @name _dirty * @type {boolean} * @memberOf clay.Vector3# */ this._dirty = true; }; Vector3.prototype = { constructor: Vector3, /** * Add b to self * @param {clay.Vector3} b * @return {clay.Vector3} */ add: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].add(this.array, this.array, b.array); this._dirty = true; return this; }, /** * Set x, y and z components * @param {number} x * @param {number} y * @param {number} z * @return {clay.Vector3} */ set: function (x, y, z) { this.array[0] = x; this.array[1] = y; this.array[2] = z; this._dirty = true; return this; }, /** * Set x, y and z components from array * @param {Float32Array|number[]} arr * @return {clay.Vector3} */ setArray: function (arr) { this.array[0] = arr[0]; this.array[1] = arr[1]; this.array[2] = arr[2]; this._dirty = true; return this; }, /** * Clone a new Vector3 * @return {clay.Vector3} */ clone: function () { return new Vector3(this.x, this.y, this.z); }, /** * Copy from b * @param {clay.Vector3} b * @return {clay.Vector3} */ copy: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].copy(this.array, b.array); this._dirty = true; return this; }, /** * Cross product of self and b, written to a Vector3 out * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {clay.Vector3} */ cross: function (a, b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].cross(this.array, a.array, b.array); this._dirty = true; return this; }, /** * Alias for distance * @param {clay.Vector3} b * @return {number} */ dist: function (b) { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].dist(this.array, b.array); }, /** * Distance between self and b * @param {clay.Vector3} b * @return {number} */ distance: function (b) { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].distance(this.array, b.array); }, /** * Alias for divide * @param {clay.Vector3} b * @return {clay.Vector3} */ div: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].div(this.array, this.array, b.array); this._dirty = true; return this; }, /** * Divide self by b * @param {clay.Vector3} b * @return {clay.Vector3} */ divide: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].divide(this.array, this.array, b.array); this._dirty = true; return this; }, /** * Dot product of self and b * @param {clay.Vector3} b * @return {number} */ dot: function (b) { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].dot(this.array, b.array); }, /** * Alias of length * @return {number} */ len: function () { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].len(this.array); }, /** * Calculate the length * @return {number} */ length: function () { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].length(this.array); }, /** * Linear interpolation between a and b * @param {clay.Vector3} a * @param {clay.Vector3} b * @param {number} t * @return {clay.Vector3} */ lerp: function (a, b, t) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].lerp(this.array, a.array, b.array, t); this._dirty = true; return this; }, /** * Minimum of self and b * @param {clay.Vector3} b * @return {clay.Vector3} */ min: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].min(this.array, this.array, b.array); this._dirty = true; return this; }, /** * Maximum of self and b * @param {clay.Vector3} b * @return {clay.Vector3} */ max: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].max(this.array, this.array, b.array); this._dirty = true; return this; }, /** * Alias for multiply * @param {clay.Vector3} b * @return {clay.Vector3} */ mul: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].mul(this.array, this.array, b.array); this._dirty = true; return this; }, /** * Mutiply self and b * @param {clay.Vector3} b * @return {clay.Vector3} */ multiply: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].multiply(this.array, this.array, b.array); this._dirty = true; return this; }, /** * Negate self * @return {clay.Vector3} */ negate: function () { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].negate(this.array, this.array); this._dirty = true; return this; }, /** * Normalize self * @return {clay.Vector3} */ normalize: function () { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].normalize(this.array, this.array); this._dirty = true; return this; }, /** * Generate random x, y, z components with a given scale * @param {number} scale * @return {clay.Vector3} */ random: function (scale) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].random(this.array, scale); this._dirty = true; return this; }, /** * Scale self * @param {number} scale * @return {clay.Vector3} */ scale: function (s) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].scale(this.array, this.array, s); this._dirty = true; return this; }, /** * Scale b and add to self * @param {clay.Vector3} b * @param {number} scale * @return {clay.Vector3} */ scaleAndAdd: function (b, s) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].scaleAndAdd(this.array, this.array, b.array, s); this._dirty = true; return this; }, /** * Alias for squaredDistance * @param {clay.Vector3} b * @return {number} */ sqrDist: function (b) { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].sqrDist(this.array, b.array); }, /** * Squared distance between self and b * @param {clay.Vector3} b * @return {number} */ squaredDistance: function (b) { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].squaredDistance(this.array, b.array); }, /** * Alias for squaredLength * @return {number} */ sqrLen: function () { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].sqrLen(this.array); }, /** * Squared length of self * @return {number} */ squaredLength: function () { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].squaredLength(this.array); }, /** * Alias for subtract * @param {clay.Vector3} b * @return {clay.Vector3} */ sub: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].sub(this.array, this.array, b.array); this._dirty = true; return this; }, /** * Subtract b from self * @param {clay.Vector3} b * @return {clay.Vector3} */ subtract: function (b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].subtract(this.array, this.array, b.array); this._dirty = true; return this; }, /** * Transform self with a Matrix3 m * @param {clay.Matrix3} m * @return {clay.Vector3} */ transformMat3: function (m) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].transformMat3(this.array, this.array, m.array); this._dirty = true; return this; }, /** * Transform self with a Matrix4 m * @param {clay.Matrix4} m * @return {clay.Vector3} */ transformMat4: function (m) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].transformMat4(this.array, this.array, m.array); this._dirty = true; return this; }, /** * Transform self with a Quaternion q * @param {clay.Quaternion} q * @return {clay.Vector3} */ transformQuat: function (q) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].transformQuat(this.array, this.array, q.array); this._dirty = true; return this; }, /** * Trasnform self into projection space with m * @param {clay.Matrix4} m * @return {clay.Vector3} */ applyProjection: function (m) { var v = this.array; m = m.array; // Perspective projection if (m[15] === 0) { var w = -1 / v[2]; v[0] = m[0] * v[0] * w; v[1] = m[5] * v[1] * w; v[2] = (m[10] * v[2] + m[14]) * w; } else { v[0] = m[0] * v[0] + m[12]; v[1] = m[5] * v[1] + m[13]; v[2] = m[10] * v[2] + m[14]; } this._dirty = true; return this; }, eulerFromQuat: function(q, order) { Vector3.eulerFromQuat(this, q, order); }, eulerFromMat3: function (m, order) { Vector3.eulerFromMat3(this, m, order); }, toString: function() { return '[' + Array.prototype.join.call(this.array, ',') + ']'; }, toArray: function () { return Array.prototype.slice.call(this.array); } }; var defineProperty = Object.defineProperty; // Getter and Setter if (defineProperty) { var proto = Vector3.prototype; /** * @name x * @type {number} * @memberOf clay.Vector3 * @instance */ defineProperty(proto, 'x', { get: function () { return this.array[0]; }, set: function (value) { this.array[0] = value; this._dirty = true; } }); /** * @name y * @type {number} * @memberOf clay.Vector3 * @instance */ defineProperty(proto, 'y', { get: function () { return this.array[1]; }, set: function (value) { this.array[1] = value; this._dirty = true; } }); /** * @name z * @type {number} * @memberOf clay.Vector3 * @instance */ defineProperty(proto, 'z', { get: function () { return this.array[2]; }, set: function (value) { this.array[2] = value; this._dirty = true; } }); } // Supply methods that are not in place /** * @param {clay.Vector3} out * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {clay.Vector3} */ Vector3.add = function(out, a, b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].add(out.array, a.array, b.array); out._dirty = true; return out; }; /** * @param {clay.Vector3} out * @param {number} x * @param {number} y * @param {number} z * @return {clay.Vector3} */ Vector3.set = function(out, x, y, z) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].set(out.array, x, y, z); out._dirty = true; }; /** * @param {clay.Vector3} out * @param {clay.Vector3} b * @return {clay.Vector3} */ Vector3.copy = function(out, b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].copy(out.array, b.array); out._dirty = true; return out; }; /** * @param {clay.Vector3} out * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {clay.Vector3} */ Vector3.cross = function(out, a, b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].cross(out.array, a.array, b.array); out._dirty = true; return out; }; /** * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {number} */ Vector3.dist = function(a, b) { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].distance(a.array, b.array); }; /** * @function * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {number} */ Vector3.distance = Vector3.dist; /** * @param {clay.Vector3} out * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {clay.Vector3} */ Vector3.div = function(out, a, b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].divide(out.array, a.array, b.array); out._dirty = true; return out; }; /** * @function * @param {clay.Vector3} out * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {clay.Vector3} */ Vector3.divide = Vector3.div; /** * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {number} */ Vector3.dot = function(a, b) { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].dot(a.array, b.array); }; /** * @param {clay.Vector3} a * @return {number} */ Vector3.len = function(b) { return __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].length(b.array); }; // Vector3.length = Vector3.len; /** * @param {clay.Vector3} out * @param {clay.Vector3} a * @param {clay.Vector3} b * @param {number} t * @return {clay.Vector3} */ Vector3.lerp = function(out, a, b, t) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].lerp(out.array, a.array, b.array, t); out._dirty = true; return out; }; /** * @param {clay.Vector3} out * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {clay.Vector3} */ Vector3.min = function(out, a, b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].min(out.array, a.array, b.array); out._dirty = true; return out; }; /** * @param {clay.Vector3} out * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {clay.Vector3} */ Vector3.max = function(out, a, b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].max(out.array, a.array, b.array); out._dirty = true; return out; }; /** * @param {clay.Vector3} out * @param {clay.Vector3} a * @param {clay.Vector3} b * @return {clay.Vector3} */ Vector3.mul = function(out, a, b) { __WEBPACK_IMPORTED_MODULE_0__glmatrix_vec3__["a" /* default */].multiply(out.array