bytev-charts
Version:
基于echarts和JavaScript及ES6封装的一个可以直接调用的图表组件库,内置主题设计,简单快捷,且支持用户自定义配置; npm 安装方式: npm install bytev-charts 若启动提示还需额外install插件,则运行 npm install @babel/runtime-corejs2 即可;
216 lines (185 loc) • 7.05 kB
JavaScript
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 };