@inweb/viewer-three
Version:
JavaScript library for rendering CAD and BIM files in a browser using Three.js
50 lines (46 loc) • 1.88 kB
JavaScript
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
import { loaders, Loader, GLTFLoadingManager, ModelImpl } from "@inweb/viewer-three";
class GLTFCloudLoader extends Loader {
constructor(viewer) {
super();
this.viewer = viewer;
}
isSupport(file) {
return typeof file === "object" && typeof file.database === "string" && typeof file.downloadResource === "function" && /.gltf$/i.test(file.database);
}
async load(model) {
const url = `${model.httpClient.serverUrl}${model.path}/${model.database}`;
const manager = new GLTFLoadingManager(url);
const loader = new GLTFLoader(manager);
loader.setRequestHeader(model.httpClient.headers);
const progress = event => {
const {lengthComputable: lengthComputable, loaded: loaded, total: total} = event;
const progress = lengthComputable ? loaded / total : 1;
this.viewer.emitEvent({
type: "geometryprogress",
data: progress,
file: model.file,
model: model
});
};
const gltf = await loader.loadAsync(url, progress);
if (!this.viewer.scene) return this;
const modelImpl = new ModelImpl(gltf.scene);
modelImpl.loader = this;
modelImpl.viewer = this.viewer;
this.viewer.scene.add(modelImpl.scene);
this.viewer.models.push(modelImpl);
this.viewer.syncOptions();
this.viewer.syncOverlay();
this.viewer.update();
this.viewer.emitEvent({
type: "databasechunk",
data: gltf.scene,
file: model.file,
model: model
});
return this;
}
}
loaders.registerLoader("gltf-cloud", (viewer => new GLTFCloudLoader(viewer)));
//# sourceMappingURL=GLTFCloudLoader.module.js.map