UNPKG

bytev-charts

Version:

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

216 lines (185 loc) 7.05 kB
import _Object$assign from "@babel/runtime-corejs2/core-js/object/assign"; import _Object$keys from "@babel/runtime-corejs2/core-js/object/keys"; import "core-js/modules/es.function.name.js"; import "core-js/modules/es.date.to-json.js"; import "core-js/modules/web.url.to-json.js"; /** * Development repository: https://github.com/kaisalmen/WWOBJLoader */ import { LineBasicMaterial, MaterialLoader, MeshStandardMaterial, PointsMaterial } from "../../../../../build/three.module.js"; var MaterialHandler = function MaterialHandler() { this.logging = { enabled: false, debug: false }; this.callbacks = { onLoadMaterials: null }; this.materials = {}; }; MaterialHandler.prototype = { constructor: MaterialHandler, /** * Enable or disable logging in general (except warn and error), plus enable or disable debug logging. * * @param {boolean} enabled True or false. * @param {boolean} debug True or false. */ setLogging: function setLogging(enabled, debug) { this.logging.enabled = enabled === true; this.logging.debug = debug === true; }, _setCallbacks: function _setCallbacks(onLoadMaterials) { if (onLoadMaterials !== undefined && onLoadMaterials !== null && onLoadMaterials instanceof Function) { this.callbacks.onLoadMaterials = onLoadMaterials; } }, /** * Creates default materials and adds them to the materials object. * * @param overrideExisting boolean Override existing material */ createDefaultMaterials: function createDefaultMaterials(overrideExisting) { var defaultMaterial = new MeshStandardMaterial({ color: 0xDCF1FF }); defaultMaterial.name = 'defaultMaterial'; var defaultVertexColorMaterial = new MeshStandardMaterial({ color: 0xDCF1FF }); defaultVertexColorMaterial.name = 'defaultVertexColorMaterial'; defaultVertexColorMaterial.vertexColors = true; var defaultLineMaterial = new LineBasicMaterial(); defaultLineMaterial.name = 'defaultLineMaterial'; var defaultPointMaterial = new PointsMaterial({ size: 0.1 }); defaultPointMaterial.name = 'defaultPointMaterial'; var runtimeMaterials = {}; runtimeMaterials[defaultMaterial.name] = defaultMaterial; runtimeMaterials[defaultVertexColorMaterial.name] = defaultVertexColorMaterial; runtimeMaterials[defaultLineMaterial.name] = defaultLineMaterial; runtimeMaterials[defaultPointMaterial.name] = defaultPointMaterial; this.addMaterials(runtimeMaterials, overrideExisting); }, /** * Updates the materials with contained material objects (sync) or from alteration instructions (async). * * @param {Object} materialPayload Material update instructions * @returns {Object} Map of {@link Material} */ addPayloadMaterials: function addPayloadMaterials(materialPayload) { var material, materialName; var materialCloneInstructions = materialPayload.materials.materialCloneInstructions; var newMaterials = {}; if (materialCloneInstructions !== undefined && materialCloneInstructions !== null) { var materialNameOrg = materialCloneInstructions.materialNameOrg; materialNameOrg = materialNameOrg !== undefined && materialNameOrg !== null ? materialNameOrg : ""; var materialOrg = this.materials[materialNameOrg]; if (materialOrg) { material = materialOrg.clone(); materialName = materialCloneInstructions.materialName; material.name = materialName; _Object$assign(material, materialCloneInstructions.materialProperties); this.materials[materialName] = material; newMaterials[materialName] = material; } else { if (this.logging.enabled) { console.info('Requested material "' + materialNameOrg + '" is not available!'); } } } var materials = materialPayload.materials.serializedMaterials; if (materials !== undefined && materials !== null && _Object$keys(materials).length > 0) { var loader = new MaterialLoader(); var materialJson; for (materialName in materials) { materialJson = materials[materialName]; if (materialJson !== undefined && materialJson !== null) { material = loader.parse(materialJson); if (this.logging.enabled) { console.info('De-serialized material with name "' + materialName + '" will be added.'); } this.materials[materialName] = material; newMaterials[materialName] = material; } } } materials = materialPayload.materials.runtimeMaterials; newMaterials = this.addMaterials(materials, true, newMaterials); return newMaterials; }, /** * Set materials loaded by any supplier of an Array of {@link Material}. * * @param materials Object with named {@link Material} * @param overrideExisting boolean Override existing material * @param newMaterials [Object] with named {@link Material} */ addMaterials: function addMaterials(materials, overrideExisting, newMaterials) { if (newMaterials === undefined || newMaterials === null) { newMaterials = {}; } if (materials !== undefined && materials !== null && _Object$keys(materials).length > 0) { var material; var existingMaterial; var add; for (var materialName in materials) { material = materials[materialName]; add = overrideExisting === true; if (!add) { existingMaterial = this.materials[materialName]; add = existingMaterial === null || existingMaterial === undefined; } if (add) { this.materials[materialName] = material; newMaterials[materialName] = material; } if (this.logging.enabled && this.logging.debug) { console.info('Material with name "' + materialName + '" was added.'); } } } if (this.callbacks.onLoadMaterials) { this.callbacks.onLoadMaterials(newMaterials); } return newMaterials; }, /** * Returns the mapping object of material name and corresponding material. * * @returns {Object} Map of {@link Material} */ getMaterials: function getMaterials() { return this.materials; }, /** * * @param {String} materialName * @returns {Material} */ getMaterial: function getMaterial(materialName) { return this.materials[materialName]; }, /** * Returns the mapping object of material name and corresponding jsonified material. * * @returns {Object} Map of Materials in JSON representation */ getMaterialsJSON: function getMaterialsJSON() { var materialsJSON = {}; var material; for (var materialName in this.materials) { material = this.materials[materialName]; materialsJSON[materialName] = material.toJSON(); } return materialsJSON; }, /** * Removes all materials */ clearMaterials: function clearMaterials() { this.materials = {}; } }; export { MaterialHandler };