@xviewer.js/core 1.0.0-alpha.55 → 1.0.0-alpha.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +267 -90
- package/dist/main.js.map +1 -1
- package/dist/module.js +266 -91
- package/dist/module.js.map +1 -1
- package/package.json +1 -1
- package/types/ObjectInstance.d.ts +2 -2
- package/types/Task.d.ts +2 -0
- package/types/Viewer.d.ts +13 -4
- package/types/asset/ResourceManager.d.ts +8 -14
- package/types/asset/aLoader.d.ts +6 -1
- package/types/index.d.ts +1 -1
- package/types/loaders/aEXRLoader.d.ts +2 -1
- package/types/loaders/aFBXLoader.d.ts +2 -1
- package/types/loaders/aGLTFLoader.d.ts +3 -1
- package/types/loaders/aHDRLoader.d.ts +2 -1
- package/types/loaders/aJSONLoader.d.ts +2 -1
- package/types/loaders/aTextureLoader.d.ts +2 -1
- package/types/plugins/DropFilePlugin.d.ts +16 -0
- package/types/plugins/index.d.ts +1 -0
package/dist/module.js
CHANGED
|
@@ -1104,10 +1104,14 @@ aLoader._texKeys = [
|
|
|
1104
1104
|
];
|
|
1105
1105
|
|
|
1106
1106
|
class aEXRLoader extends aLoader {
|
|
1107
|
-
load({ url, onLoad, onProgress, onError
|
|
1108
|
-
|
|
1109
|
-
loader
|
|
1110
|
-
|
|
1107
|
+
load({ url, path, resourcePath, manager, texSettings, onLoad, onProgress, onError }) {
|
|
1108
|
+
let loader = this._loader;
|
|
1109
|
+
if (loader === undefined) {
|
|
1110
|
+
loader = this._loader = new EXRLoader();
|
|
1111
|
+
}
|
|
1112
|
+
loader.manager = manager;
|
|
1113
|
+
loader.setPath(path);
|
|
1114
|
+
loader.setResourcePath(resourcePath);
|
|
1111
1115
|
loader.load(url, (tex)=>onLoad(Object.assign(tex, texSettings)), onProgress, onError);
|
|
1112
1116
|
}
|
|
1113
1117
|
constructor(...args){
|
|
@@ -1119,14 +1123,22 @@ class aEXRLoader extends aLoader {
|
|
|
1119
1123
|
}
|
|
1120
1124
|
|
|
1121
1125
|
class aFBXLoader extends aLoader {
|
|
1122
|
-
load({ url, onLoad, onProgress, onError }) {
|
|
1126
|
+
load({ url, buffer, path, resourcePath, manager, onLoad, onProgress, onError }) {
|
|
1127
|
+
let loader = this._loader;
|
|
1128
|
+
if (loader === undefined) {
|
|
1129
|
+
loader = this._loader = new FBXLoader();
|
|
1130
|
+
}
|
|
1131
|
+
loader.manager = manager;
|
|
1132
|
+
loader.setPath(path);
|
|
1133
|
+
loader.setResourcePath(resourcePath);
|
|
1123
1134
|
const loadCallback = (node)=>{
|
|
1124
1135
|
onLoad(aLoader._setUserData(node));
|
|
1125
1136
|
};
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1137
|
+
if (buffer) {
|
|
1138
|
+
loadCallback(loader.parse(buffer, path));
|
|
1139
|
+
} else {
|
|
1140
|
+
loader.load(url, loadCallback, onProgress, onError);
|
|
1141
|
+
}
|
|
1130
1142
|
}
|
|
1131
1143
|
constructor(...args){
|
|
1132
1144
|
super(...args);
|
|
@@ -1137,20 +1149,32 @@ class aFBXLoader extends aLoader {
|
|
|
1137
1149
|
}
|
|
1138
1150
|
|
|
1139
1151
|
class aGLTFLoader extends aLoader {
|
|
1140
|
-
load({ url, onLoad, onProgress, onError }) {
|
|
1152
|
+
load({ url, buffer, path, resourcePath, dracoPath, manager, onLoad, onProgress, onError }) {
|
|
1153
|
+
let dracoLoader = this._dracoLoader;
|
|
1154
|
+
if (dracoLoader === undefined) {
|
|
1155
|
+
dracoLoader = this._dracoLoader = new DRACOLoader();
|
|
1156
|
+
}
|
|
1157
|
+
dracoLoader.manager = manager;
|
|
1158
|
+
dracoLoader.setDecoderPath(dracoPath);
|
|
1159
|
+
let loader = this._loader;
|
|
1160
|
+
if (loader === undefined) {
|
|
1161
|
+
loader = this._loader = new GLTFLoader();
|
|
1162
|
+
loader.setDRACOLoader(dracoLoader);
|
|
1163
|
+
loader.setMeshoptDecoder(MeshoptDecoder);
|
|
1164
|
+
}
|
|
1165
|
+
loader.manager = manager;
|
|
1166
|
+
loader.setPath(path);
|
|
1167
|
+
loader.setResourcePath(resourcePath);
|
|
1141
1168
|
const loadCallback = (gltf)=>{
|
|
1142
1169
|
const node = gltf.scene;
|
|
1143
|
-
|
|
1170
|
+
node.animations.push(...gltf.animations);
|
|
1144
1171
|
onLoad(aLoader._setUserData(node));
|
|
1145
1172
|
};
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
gltfLoader.setDRACOLoader(dracoLoader);
|
|
1152
|
-
gltfLoader.setMeshoptDecoder(MeshoptDecoder);
|
|
1153
|
-
gltfLoader.load(url, loadCallback, onProgress, onError);
|
|
1173
|
+
if (buffer) {
|
|
1174
|
+
loader.parse(buffer, resourcePath, loadCallback, onError);
|
|
1175
|
+
} else {
|
|
1176
|
+
loader.load(url, loadCallback, onProgress, onError);
|
|
1177
|
+
}
|
|
1154
1178
|
}
|
|
1155
1179
|
constructor(...args){
|
|
1156
1180
|
super(...args);
|
|
@@ -1162,14 +1186,18 @@ class aGLTFLoader extends aLoader {
|
|
|
1162
1186
|
}
|
|
1163
1187
|
|
|
1164
1188
|
class aHDRLoader extends aLoader {
|
|
1165
|
-
load({ url, onLoad, onProgress, onError
|
|
1166
|
-
|
|
1189
|
+
load({ url, path, resourcePath, manager, texSettings, onLoad, onProgress, onError }) {
|
|
1190
|
+
let loader = this._loader;
|
|
1191
|
+
if (loader === undefined) {
|
|
1192
|
+
loader = this._loader = new RGBELoader();
|
|
1193
|
+
}
|
|
1194
|
+
loader.manager = manager;
|
|
1195
|
+
loader.setPath(path);
|
|
1196
|
+
loader.setResourcePath(resourcePath);
|
|
1197
|
+
const settings = Object.assign({
|
|
1167
1198
|
mapping: EquirectangularReflectionMapping
|
|
1168
1199
|
}, texSettings);
|
|
1169
|
-
|
|
1170
|
-
loader.setPath(this.manager.path);
|
|
1171
|
-
loader.setResourcePath(this.manager.resourcePath);
|
|
1172
|
-
loader.load(url, (tex)=>onLoad(Object.assign(tex, texSettings)), onProgress, onError);
|
|
1200
|
+
loader.load(url, (tex)=>onLoad(Object.assign(tex, settings)), onProgress, onError);
|
|
1173
1201
|
}
|
|
1174
1202
|
constructor(...args){
|
|
1175
1203
|
super(...args);
|
|
@@ -1180,10 +1208,14 @@ class aHDRLoader extends aLoader {
|
|
|
1180
1208
|
}
|
|
1181
1209
|
|
|
1182
1210
|
class aJSONLoader extends aLoader {
|
|
1183
|
-
load({ url, onLoad, onProgress, onError }) {
|
|
1184
|
-
|
|
1185
|
-
loader
|
|
1186
|
-
|
|
1211
|
+
load({ url, path, resourcePath, manager, onLoad, onProgress, onError }) {
|
|
1212
|
+
let loader = this._loader;
|
|
1213
|
+
if (loader === undefined) {
|
|
1214
|
+
loader = this._loader = new FileLoader();
|
|
1215
|
+
}
|
|
1216
|
+
loader.manager = manager;
|
|
1217
|
+
loader.setPath(path);
|
|
1218
|
+
loader.setResourcePath(resourcePath);
|
|
1187
1219
|
loader.load(url, (file)=>onLoad(JSON.parse(file)), onProgress, onError);
|
|
1188
1220
|
}
|
|
1189
1221
|
constructor(...args){
|
|
@@ -1195,14 +1227,18 @@ class aJSONLoader extends aLoader {
|
|
|
1195
1227
|
}
|
|
1196
1228
|
|
|
1197
1229
|
class aTextureLoader extends aLoader {
|
|
1198
|
-
load({ url, onLoad, onProgress, onError
|
|
1230
|
+
load({ url, path, resourcePath, manager, texSettings, onLoad, onProgress, onError }) {
|
|
1231
|
+
let loader = this._loader;
|
|
1232
|
+
if (loader === undefined) {
|
|
1233
|
+
loader = this._loader = new TextureLoader();
|
|
1234
|
+
}
|
|
1235
|
+
loader.manager = manager;
|
|
1236
|
+
loader.setPath(path);
|
|
1237
|
+
loader.setResourcePath(resourcePath);
|
|
1199
1238
|
const loadCallback = (tex)=>{
|
|
1200
1239
|
tex.colorSpace = SRGBColorSpace;
|
|
1201
1240
|
onLoad(Object.assign(tex, texSettings));
|
|
1202
1241
|
};
|
|
1203
|
-
const loader = new TextureLoader(this.manager.loadingManager);
|
|
1204
|
-
loader.setPath(this.manager.path);
|
|
1205
|
-
loader.setResourcePath(this.manager.resourcePath);
|
|
1206
1242
|
loader.load(url, loadCallback, onProgress, onError);
|
|
1207
1243
|
}
|
|
1208
1244
|
constructor(...args){
|
|
@@ -2864,13 +2900,13 @@ class FreelookVirtualCamera extends VirtualCamera {
|
|
|
2864
2900
|
this._touchID = -1;
|
|
2865
2901
|
this._preLoc0 = new Vector2();
|
|
2866
2902
|
this._preLoc1 = new Vector2();
|
|
2867
|
-
this._spherical = new Spherical(
|
|
2903
|
+
this._spherical = new Spherical(4, Math.PI / 2);
|
|
2868
2904
|
this._lookAt = new Vector3();
|
|
2869
2905
|
this._tempSmoothing = 6;
|
|
2870
2906
|
this._tempRotateSmoothing = 8;
|
|
2871
2907
|
this._targetTheta = 0;
|
|
2872
2908
|
this._targetPhi = 0;
|
|
2873
|
-
this._targetSpringLength =
|
|
2909
|
+
this._targetSpringLength = 4;
|
|
2874
2910
|
this._targetFov = this.fov;
|
|
2875
2911
|
this._targetLookAt = new Vector3();
|
|
2876
2912
|
this.forbidX = false;
|
|
@@ -4241,7 +4277,7 @@ class ResourceManager {
|
|
|
4241
4277
|
static extension(path) {
|
|
4242
4278
|
let str = path.split(".");
|
|
4243
4279
|
if (str.length > 1) {
|
|
4244
|
-
return str.pop();
|
|
4280
|
+
return str.pop().toLowerCase();
|
|
4245
4281
|
}
|
|
4246
4282
|
return "";
|
|
4247
4283
|
}
|
|
@@ -4253,15 +4289,6 @@ class ResourceManager {
|
|
|
4253
4289
|
let str = path.split("/").pop();
|
|
4254
4290
|
return ext ? str.replace("." + ext, "") : str;
|
|
4255
4291
|
}
|
|
4256
|
-
static _getTextureKey(url, settings) {
|
|
4257
|
-
let keys = [
|
|
4258
|
-
url
|
|
4259
|
-
];
|
|
4260
|
-
for(let k in settings){
|
|
4261
|
-
if (settings[k] !== undefined) keys.push(k + "=" + settings[k]);
|
|
4262
|
-
}
|
|
4263
|
-
return keys.join(",");
|
|
4264
|
-
}
|
|
4265
4292
|
static _splitTextureSettings(props) {
|
|
4266
4293
|
let settings = {};
|
|
4267
4294
|
for (let v of ResourceManager._texSettingKeys){
|
|
@@ -4276,55 +4303,43 @@ class ResourceManager {
|
|
|
4276
4303
|
return settings;
|
|
4277
4304
|
}
|
|
4278
4305
|
destroy() {
|
|
4279
|
-
this._caches.clear();
|
|
4280
4306
|
this._loaders.clear();
|
|
4281
4307
|
}
|
|
4308
|
+
getLoader(ext) {
|
|
4309
|
+
return this._loaders.get(ext);
|
|
4310
|
+
}
|
|
4282
4311
|
addLoader(Loader) {
|
|
4283
4312
|
let loader = new Loader(this);
|
|
4284
4313
|
for (let ext of loader.extension){
|
|
4285
4314
|
this._loaders.set(ext, loader);
|
|
4286
4315
|
}
|
|
4287
4316
|
}
|
|
4288
|
-
loadAsset({ url, ext, onProgress, ...props }) {
|
|
4317
|
+
loadAsset({ url, buffer, ext, path, resourcePath, dracoPath, manager, onProgress, ...props }) {
|
|
4289
4318
|
return new Promise((resolve, reject)=>{
|
|
4290
|
-
const
|
|
4319
|
+
const sel = ext || url && ResourceManager.extension(url) || "";
|
|
4291
4320
|
const texSettings = ResourceManager._splitTextureSettings(props);
|
|
4292
|
-
|
|
4293
|
-
|
|
4294
|
-
|
|
4295
|
-
|
|
4321
|
+
if (this._loaders.has(sel)) {
|
|
4322
|
+
this._loaders.get(sel).load({
|
|
4323
|
+
url,
|
|
4324
|
+
buffer,
|
|
4325
|
+
texSettings,
|
|
4326
|
+
path,
|
|
4327
|
+
resourcePath,
|
|
4328
|
+
dracoPath,
|
|
4329
|
+
manager,
|
|
4330
|
+
onProgress,
|
|
4331
|
+
onLoad: resolve,
|
|
4332
|
+
onError: (e)=>{
|
|
4333
|
+
console.error(`${url} not exist`, e);
|
|
4334
|
+
}
|
|
4335
|
+
});
|
|
4296
4336
|
} else {
|
|
4297
|
-
|
|
4298
|
-
this._caches.set(key, file);
|
|
4299
|
-
resolve(file);
|
|
4300
|
-
};
|
|
4301
|
-
let sel = ext || ext_;
|
|
4302
|
-
if (this._loaders.has(sel)) {
|
|
4303
|
-
this._loaders.get(sel).load({
|
|
4304
|
-
url,
|
|
4305
|
-
texSettings,
|
|
4306
|
-
onProgress,
|
|
4307
|
-
onLoad,
|
|
4308
|
-
onError: (e)=>{
|
|
4309
|
-
console.error(`${url} not exist`, e);
|
|
4310
|
-
}
|
|
4311
|
-
});
|
|
4312
|
-
} else {
|
|
4313
|
-
reject("ResourceManager.loadAsset: missing loader for " + ext);
|
|
4314
|
-
}
|
|
4337
|
+
reject("ResourceManager.loadAsset: missing loader for " + url);
|
|
4315
4338
|
}
|
|
4316
4339
|
});
|
|
4317
4340
|
}
|
|
4318
|
-
constructor(
|
|
4319
|
-
this.path = "";
|
|
4320
|
-
this.resourcePath = "";
|
|
4321
|
-
this.dracoPath = "";
|
|
4322
|
-
this._caches = new Map();
|
|
4341
|
+
constructor(){
|
|
4323
4342
|
this._loaders = new Map();
|
|
4324
|
-
this.path = props.path;
|
|
4325
|
-
this.resourcePath = props.resourcePath;
|
|
4326
|
-
this.dracoPath = props.dracoPath;
|
|
4327
|
-
this.loadingManager = props.loadingManager;
|
|
4328
4343
|
}
|
|
4329
4344
|
}
|
|
4330
4345
|
ResourceManager._texSettingKeys = [
|
|
@@ -4533,9 +4548,6 @@ class Viewer extends EventEmitter {
|
|
|
4533
4548
|
static getMesh(node, name, group = false) {
|
|
4534
4549
|
return Viewer._getObjectValue(node.userData.meshes, name, group);
|
|
4535
4550
|
}
|
|
4536
|
-
get instanceId() {
|
|
4537
|
-
return this._instanceId;
|
|
4538
|
-
}
|
|
4539
4551
|
get root() {
|
|
4540
4552
|
return this._root;
|
|
4541
4553
|
}
|
|
@@ -4587,6 +4599,18 @@ class Viewer extends EventEmitter {
|
|
|
4587
4599
|
set targetFrameRate(v) {
|
|
4588
4600
|
this._targetFrameRate = Math.max(0.001, v);
|
|
4589
4601
|
}
|
|
4602
|
+
get instanceId() {
|
|
4603
|
+
return this._instanceId;
|
|
4604
|
+
}
|
|
4605
|
+
get loadingManager() {
|
|
4606
|
+
return this._loadingManager;
|
|
4607
|
+
}
|
|
4608
|
+
get resourceManager() {
|
|
4609
|
+
return this._resourceManager;
|
|
4610
|
+
}
|
|
4611
|
+
get taskManager() {
|
|
4612
|
+
return this._taskManager;
|
|
4613
|
+
}
|
|
4590
4614
|
destroy() {
|
|
4591
4615
|
this.stop();
|
|
4592
4616
|
this._renderer.dispose();
|
|
@@ -4711,7 +4735,10 @@ class Viewer extends EventEmitter {
|
|
|
4711
4735
|
}
|
|
4712
4736
|
}
|
|
4713
4737
|
loadAsset(props) {
|
|
4714
|
-
return this._resourceManager.loadAsset(props);
|
|
4738
|
+
return this._resourceManager.loadAsset(Object.assign(Object.assign({}, this._defaultProps), props));
|
|
4739
|
+
}
|
|
4740
|
+
getLoader(ext) {
|
|
4741
|
+
return this._resourceManager.getLoader(ext);
|
|
4715
4742
|
}
|
|
4716
4743
|
addLoader(Loader) {
|
|
4717
4744
|
this._resourceManager.addLoader(Loader);
|
|
@@ -4756,6 +4783,9 @@ class Viewer extends EventEmitter {
|
|
|
4756
4783
|
removeComponent(node, component) {
|
|
4757
4784
|
return this._componentManager.removeComponent(node, component);
|
|
4758
4785
|
}
|
|
4786
|
+
addTask(task) {
|
|
4787
|
+
this._taskManager.add(task);
|
|
4788
|
+
}
|
|
4759
4789
|
addNode(object, { args, debug, scale, position, rotation, layer, shadowArgs, makeDefault, component, parent = this._scene, ...props } = {}) {
|
|
4760
4790
|
let node = null;
|
|
4761
4791
|
let ins = getClassInstance(object, args);
|
|
@@ -4901,6 +4931,7 @@ class Viewer extends EventEmitter {
|
|
|
4901
4931
|
factor: 1
|
|
4902
4932
|
};
|
|
4903
4933
|
this._orientation = Orientation.AUTO;
|
|
4934
|
+
this._defaultProps = {};
|
|
4904
4935
|
this._running = false;
|
|
4905
4936
|
this._rootRotated = false;
|
|
4906
4937
|
this._time = 0;
|
|
@@ -4934,17 +4965,18 @@ class Viewer extends EventEmitter {
|
|
|
4934
4965
|
this._renderer.shadowMap.enabled = !!shadows;
|
|
4935
4966
|
this._renderer.shadowMap.type = typeof shadows === "boolean" ? PCFSoftShadowMap : shadows;
|
|
4936
4967
|
this._renderer.info.autoReset = false;
|
|
4937
|
-
|
|
4938
|
-
this.
|
|
4939
|
-
path,
|
|
4940
|
-
resourcePath,
|
|
4941
|
-
dracoPath,
|
|
4942
|
-
loadingManager
|
|
4943
|
-
});
|
|
4968
|
+
this._resourceManager = new ResourceManager();
|
|
4969
|
+
this._loadingManager = new LoadingManager(loader.onLoad, loader.onProgress, loader.onError);
|
|
4944
4970
|
this._taskManager = new TaskManager(tasker.onComplete, tasker.onProgress, tasker.onError);
|
|
4945
4971
|
this._componentManager = new ComponentManager(this);
|
|
4946
4972
|
this._pluginManager = new PluginManager(this);
|
|
4947
4973
|
this._tweenManager = new TweenManager();
|
|
4974
|
+
this._defaultProps = {
|
|
4975
|
+
path,
|
|
4976
|
+
resourcePath,
|
|
4977
|
+
dracoPath,
|
|
4978
|
+
manager: this._loadingManager
|
|
4979
|
+
};
|
|
4948
4980
|
this._autoResize = autoResize;
|
|
4949
4981
|
this._targetFrameRate = targetFrameRate;
|
|
4950
4982
|
this._input = new DeviceInput(this);
|
|
@@ -5538,5 +5570,148 @@ class PerformanceMonitorPlugin extends Plugin {
|
|
|
5538
5570
|
}
|
|
5539
5571
|
}
|
|
5540
5572
|
|
|
5541
|
-
|
|
5573
|
+
class DropFilePlugin extends Plugin {
|
|
5574
|
+
install() {
|
|
5575
|
+
document.addEventListener("dragover", this._onDrogOver);
|
|
5576
|
+
document.addEventListener("drop", this._onDrop);
|
|
5577
|
+
}
|
|
5578
|
+
uninstall() {
|
|
5579
|
+
document.removeEventListener("dragover", this._onDrogOver);
|
|
5580
|
+
document.removeEventListener("drop", this._onDrop);
|
|
5581
|
+
}
|
|
5582
|
+
_loadItemList(items) {
|
|
5583
|
+
getFilesFromItemList(items, (files, filesMap, dirs)=>{
|
|
5584
|
+
this._loadFiles(files, filesMap, dirs);
|
|
5585
|
+
});
|
|
5586
|
+
}
|
|
5587
|
+
_loadFiles(files, filesMap, dirs) {
|
|
5588
|
+
if (files.length > 0) {
|
|
5589
|
+
filesMap = filesMap || createFilesMap(files);
|
|
5590
|
+
dirs = dirs || [];
|
|
5591
|
+
this.viewer.loadingManager.setURLModifier((url)=>{
|
|
5592
|
+
url = url.replace(/^(\.?\/)/, ''); // remove './'
|
|
5593
|
+
const file = filesMap[url];
|
|
5594
|
+
if (file) {
|
|
5595
|
+
console.log('Loading', url);
|
|
5596
|
+
return URL.createObjectURL(file);
|
|
5597
|
+
}
|
|
5598
|
+
return url;
|
|
5599
|
+
});
|
|
5600
|
+
for(let i = 0; i < files.length; i++){
|
|
5601
|
+
this._loadFile(files[i], dirs[i]);
|
|
5602
|
+
}
|
|
5603
|
+
}
|
|
5604
|
+
}
|
|
5605
|
+
_loadFile(file, dir = "") {
|
|
5606
|
+
const filename = file.name;
|
|
5607
|
+
const ext = ResourceManager.extension(filename);
|
|
5608
|
+
if (this._extensions.some((v)=>v === ext)) {
|
|
5609
|
+
const reader = new FileReader();
|
|
5610
|
+
reader.addEventListener("progress", (event)=>{
|
|
5611
|
+
const size = '(' + Math.floor(event.total / 1000) + ' KB)';
|
|
5612
|
+
const progress = Math.floor(event.loaded / event.total * 100) + '%';
|
|
5613
|
+
console.log('Loading', filename, size, progress);
|
|
5614
|
+
});
|
|
5615
|
+
const loadCallback = (asset)=>{
|
|
5616
|
+
asset.userData.ext = ext;
|
|
5617
|
+
this._onLoad && this._onLoad(asset);
|
|
5618
|
+
};
|
|
5619
|
+
if ([
|
|
5620
|
+
"fbx",
|
|
5621
|
+
"gltf",
|
|
5622
|
+
"glb"
|
|
5623
|
+
].some((v)=>v === ext)) {
|
|
5624
|
+
reader.addEventListener("load", (event)=>{
|
|
5625
|
+
this.viewer.loadAsset({
|
|
5626
|
+
ext,
|
|
5627
|
+
buffer: event.target.result,
|
|
5628
|
+
resourcePath: dir
|
|
5629
|
+
}).then(loadCallback);
|
|
5630
|
+
}, false);
|
|
5631
|
+
reader.readAsArrayBuffer(file);
|
|
5632
|
+
} else {
|
|
5633
|
+
reader.addEventListener("load", (event)=>{
|
|
5634
|
+
this.viewer.loadAsset({
|
|
5635
|
+
ext,
|
|
5636
|
+
url: event.target.result
|
|
5637
|
+
}).then(loadCallback);
|
|
5638
|
+
}, false);
|
|
5639
|
+
reader.readAsDataURL(file);
|
|
5640
|
+
}
|
|
5641
|
+
}
|
|
5642
|
+
}
|
|
5643
|
+
constructor({ onLoad, extension = [
|
|
5644
|
+
"glb",
|
|
5645
|
+
"gltf",
|
|
5646
|
+
"fbx",
|
|
5647
|
+
"hdr"
|
|
5648
|
+
] } = {}){
|
|
5649
|
+
super();
|
|
5650
|
+
this._onDrogOver = (e)=>{
|
|
5651
|
+
e.preventDefault();
|
|
5652
|
+
e.dataTransfer.dropEffect = "copy";
|
|
5653
|
+
};
|
|
5654
|
+
this._onDrop = (e)=>{
|
|
5655
|
+
e.preventDefault();
|
|
5656
|
+
if (e.dataTransfer.types[0] === "text/plain") return; // Outliner drop
|
|
5657
|
+
if (e.dataTransfer.items) {
|
|
5658
|
+
this._loadItemList(e.dataTransfer.items);
|
|
5659
|
+
} else {
|
|
5660
|
+
this._loadFiles(e.dataTransfer.files);
|
|
5661
|
+
}
|
|
5662
|
+
};
|
|
5663
|
+
this._onLoad = onLoad;
|
|
5664
|
+
this._extensions = Array.isArray(extension) ? extension : [
|
|
5665
|
+
extension
|
|
5666
|
+
];
|
|
5667
|
+
}
|
|
5668
|
+
}
|
|
5669
|
+
function createFilesMap(files) {
|
|
5670
|
+
const map = {};
|
|
5671
|
+
for(let i = 0; i < files.length; i++){
|
|
5672
|
+
const file = files[i];
|
|
5673
|
+
map[file.name] = file;
|
|
5674
|
+
}
|
|
5675
|
+
return map;
|
|
5676
|
+
}
|
|
5677
|
+
function getFilesFromItemList(items, onDone) {
|
|
5678
|
+
let itemsCount = 0;
|
|
5679
|
+
let itemsTotal = 0;
|
|
5680
|
+
const dirs = [];
|
|
5681
|
+
const files = [];
|
|
5682
|
+
const filesMap = {};
|
|
5683
|
+
function onEntryHandled() {
|
|
5684
|
+
itemsCount++;
|
|
5685
|
+
if (itemsCount === itemsTotal) {
|
|
5686
|
+
onDone(files, filesMap, dirs);
|
|
5687
|
+
}
|
|
5688
|
+
}
|
|
5689
|
+
function handleEntry(entry, dir = "") {
|
|
5690
|
+
if (entry.isDirectory) {
|
|
5691
|
+
const reader = entry.createReader();
|
|
5692
|
+
reader.readEntries((entries)=>{
|
|
5693
|
+
for(let i = 0; i < entries.length; i++){
|
|
5694
|
+
handleEntry(entries[i], dir + "/" + entry.name + "/");
|
|
5695
|
+
}
|
|
5696
|
+
onEntryHandled();
|
|
5697
|
+
});
|
|
5698
|
+
} else if (entry.isFile) {
|
|
5699
|
+
entry.file((file)=>{
|
|
5700
|
+
files.push(file);
|
|
5701
|
+
filesMap[entry.fullPath.slice(1)] = file;
|
|
5702
|
+
dirs.push(dir);
|
|
5703
|
+
onEntryHandled();
|
|
5704
|
+
});
|
|
5705
|
+
}
|
|
5706
|
+
itemsTotal++;
|
|
5707
|
+
}
|
|
5708
|
+
for(let i = 0; i < items.length; i++){
|
|
5709
|
+
const item = items[i];
|
|
5710
|
+
if (item.kind === 'file') {
|
|
5711
|
+
handleEntry(item.webkitGetAsEntry());
|
|
5712
|
+
}
|
|
5713
|
+
}
|
|
5714
|
+
}
|
|
5715
|
+
|
|
5716
|
+
export { AnimationCurve, Box, BoxProjectionPlugin, CinestationBlendDefinition, CinestationBrain, Component, DebugPlugin, DeviceInput, DropFilePlugin, Easing, EnvironmentPlugin, EventEmitter, FInterpConstantTo, FInterpTo, FreelookVirtualCamera, Logger, ObjectInstance, Orientation, PerformanceMonitorPlugin, Perlin, Plane, Plugin, PropertyManager, QInterpConstantTo, QInterpTo, Quat_AngularDistance, Quat_Equals, Quat_exponentialDamp, Quat_quarticDamp, Quat_smoothDamp, Reflector, ReflectorMaterial, ResourceManager, Sphere, SystemInfo, Tween, TweenChain, TweenManager, VInterpConstantTo, VInterpTo, Vec3_smoothDamp, Vector3_NEG_ONE, Vector3_ONE, Vector3_RIGHT, Vector3_UNIT_X, Vector3_UNIT_Y, Vector3_UNIT_Z, Vector3_UP, Vector3_ZERO, Viewer, VirtualCamera, aEXRLoader, aFBXLoader, aGLTFLoader, aHDRLoader, aJSONLoader, aLoader, aTextureLoader, exponentialDamp, frag_BoxfilterBlur, frag_cubeMapToPanorama, frag_panoramaToCubeMap, getClassInstance, getShaderMaterial, mixin, property, quarticDamp, smoothDamp, vert_fullscreen };
|
|
5542
5717
|
//# sourceMappingURL=module.js.map
|