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