bytev-charts
Version:
基于echarts和JavaScript及ES6封装的一个可以直接调用的图表组件库,内置主题设计,简单快捷,且支持用户自定义配置; npm 安装方式: npm install bytev-charts 若启动提示还需额外install插件,则运行 npm install @babel/runtime-corejs2 即可;
175 lines (151 loc) • 7.26 kB
JavaScript
import "core-js/modules/es.function.name.js";
import _Object$assign from "@babel/runtime-corejs2/core-js/object/assign";
import _Object$create from "@babel/runtime-corejs2/core-js/object/create";
/**
* Development repository: https://github.com/kaisalmen/WWOBJLoader
*/
// Imports only related to wrapper
import { Object3D } from "../../../build/three.module.js";
import { CodeBuilderInstructions, WorkerExecutionSupport } from "./obj2/worker/main/WorkerExecutionSupport.js";
import { CodeSerializer } from "./obj2/utils/CodeSerializer.js";
import { OBJLoader2 } from "./OBJLoader2.js"; // Imports only related to worker (when standard workers (modules aren't supported) are used)
import { OBJLoader2Parser } from "./obj2/OBJLoader2Parser.js";
import { WorkerRunner, DefaultWorkerPayloadHandler, ObjectManipulator } from "./obj2/worker/parallel/WorkerRunner.js";
/**
* Creates a new OBJLoader2Parallel. Use it to load OBJ data from files or to parse OBJ data from arraybuffer.
* It extends {@link OBJLoader2} with the capability to run the parser in a web worker.
*
* @param [LoadingManager] manager The loadingManager for the loader to use. Default is {@link LoadingManager}
* @constructor
*/
var OBJLoader2Parallel = function OBJLoader2Parallel(manager) {
OBJLoader2.call(this, manager);
this.preferJsmWorker = false;
this.jsmWorkerUrl = null;
this.executeParallel = true;
this.workerExecutionSupport = new WorkerExecutionSupport();
};
OBJLoader2Parallel.OBJLOADER2_PARALLEL_VERSION = '3.2.0';
console.info('Using OBJLoader2Parallel version: ' + OBJLoader2Parallel.OBJLOADER2_PARALLEL_VERSION);
OBJLoader2Parallel.DEFAULT_JSM_WORKER_PATH = './jsm/loaders/obj2/worker/parallel/OBJLoader2JsmWorker.js';
OBJLoader2Parallel.prototype = _Object$assign(_Object$create(OBJLoader2.prototype), {
constructor: OBJLoader2Parallel,
/**
* Execution of parse in parallel via Worker is default, but normal {OBJLoader2} parsing can be enforced via false here.
*
* @param {boolean} executeParallel True or False
* @return {OBJLoader2Parallel}
*/
setExecuteParallel: function setExecuteParallel(executeParallel) {
this.executeParallel = executeParallel === true;
return this;
},
/**
* Set whether jsm modules in workers should be used. This requires browser support which is currently only experimental.
* @param {boolean} preferJsmWorker True or False
* @param {URL} jsmWorkerUrl Provide complete jsm worker URL otherwise relative path to this module may not be correct
* @return {OBJLoader2Parallel}
*/
setJsmWorker: function setJsmWorker(preferJsmWorker, jsmWorkerUrl) {
this.preferJsmWorker = preferJsmWorker === true;
if (jsmWorkerUrl === undefined || jsmWorkerUrl === null) {
throw "The url to the jsm worker is not valid. Aborting...";
}
this.jsmWorkerUrl = jsmWorkerUrl;
return this;
},
/**
* Allow to get hold of {@link WorkerExecutionSupport} for configuration purposes.
* @return {WorkerExecutionSupport}
*/
getWorkerExecutionSupport: function getWorkerExecutionSupport() {
return this.workerExecutionSupport;
},
/**
* Provide instructions on what is to be contained in the worker.
* @return {CodeBuilderInstructions}
*/
buildWorkerCode: function buildWorkerCode() {
var codeBuilderInstructions = new CodeBuilderInstructions(true, true, this.preferJsmWorker);
if (codeBuilderInstructions.isSupportsJsmWorker()) {
codeBuilderInstructions.setJsmWorkerUrl(this.jsmWorkerUrl);
}
if (codeBuilderInstructions.isSupportsStandardWorker()) {
var objectManipulator = new ObjectManipulator();
var defaultWorkerPayloadHandler = new DefaultWorkerPayloadHandler(this.parser);
var workerRunner = new WorkerRunner({});
codeBuilderInstructions.addCodeFragment(CodeSerializer.serializeClass(OBJLoader2Parser, this.parser));
codeBuilderInstructions.addCodeFragment(CodeSerializer.serializeClass(ObjectManipulator, objectManipulator));
codeBuilderInstructions.addCodeFragment(CodeSerializer.serializeClass(DefaultWorkerPayloadHandler, defaultWorkerPayloadHandler));
codeBuilderInstructions.addCodeFragment(CodeSerializer.serializeClass(WorkerRunner, workerRunner));
var startCode = 'new ' + workerRunner.constructor.name + '( new ' + defaultWorkerPayloadHandler.constructor.name + '( new ' + this.parser.constructor.name + '() ) );';
codeBuilderInstructions.addStartCode(startCode);
}
return codeBuilderInstructions;
},
/**
* See {@link OBJLoader2.load}
*/
load: function load(content, onLoad, onFileLoadProgress, onError, onMeshAlter) {
var scope = this;
function interceptOnLoad(object3d, message) {
if (object3d.name === 'OBJLoader2ParallelDummy') {
if (scope.parser.logging.enabled && scope.parser.logging.debug) {
console.debug('Received dummy answer from OBJLoader2Parallel#parse');
}
} else {
onLoad(object3d, message);
}
}
OBJLoader2.prototype.load.call(this, content, interceptOnLoad, onFileLoadProgress, onError, onMeshAlter);
},
/**
* See {@link OBJLoader2.parse}
* The callback onLoad needs to be set to be able to receive the content if used in parallel mode.
* Fallback is possible via {@link OBJLoader2Parallel#setExecuteParallel}.
*/
parse: function parse(content) {
if (this.executeParallel) {
if (this.parser.callbacks.onLoad === this.parser._onLoad) {
throw "No callback other than the default callback was provided! Aborting!";
} // check if worker has been initialize before. If yes, skip init
if (!this.workerExecutionSupport.isWorkerLoaded(this.preferJsmWorker)) {
var scopedOnLoad = function scopedOnLoad(message) {
scope.parser.callbacks.onLoad(scope.baseObject3d, message);
};
this.workerExecutionSupport.buildWorker(this.buildWorkerCode());
var scope = this;
var scopedOnAssetAvailable = function scopedOnAssetAvailable(payload) {
scope._onAssetAvailable(payload);
};
this.workerExecutionSupport.updateCallbacks(scopedOnAssetAvailable, scopedOnLoad);
} // Create default materials beforehand, but do not override previously set materials (e.g. during init)
this.materialHandler.createDefaultMaterials(false);
this.workerExecutionSupport.executeParallel({
params: {
modelName: this.modelName,
instanceNo: this.instanceNo,
useIndices: this.parser.useIndices,
disregardNormals: this.parser.disregardNormals,
materialPerSmoothingGroup: this.parser.materialPerSmoothingGroup,
useOAsMesh: this.parser.useOAsMesh,
materials: this.materialHandler.getMaterialsJSON()
},
data: {
input: content,
options: null
},
logging: {
enabled: this.parser.logging.enabled,
debug: this.parser.logging.debug
}
});
var dummy = new Object3D();
dummy.name = 'OBJLoader2ParallelDummy';
return dummy;
} else {
return OBJLoader2.prototype.parse.call(this, content);
}
}
});
export { OBJLoader2Parallel };