@inweb/viewer-three
Version:
JavaScript library for rendering CAD and BIM files in a browser using Three.js
69 lines (58 loc) • 2.43 kB
text/typescript
///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2002-2024, Open Design Alliance (the "Alliance").
// All rights reserved.
//
// This software and its documentation and related materials are owned by
// the Alliance. The software may only be incorporated into application
// programs owned by members of the Alliance, subject to a signed
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable
// trade secrets of the Alliance and its suppliers. The software is also
// protected by copyright law and international treaty provisions. Application
// programs incorporating this software must include the following statement
// with their copyright notices:
//
// This application incorporates Open Design Alliance software pursuant to a
// license agreement with Open Design Alliance.
// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.
// All rights reserved.
//
// By use of this software, its documentation or related materials, you
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
import { FileLoader, Loader, Scene } from "three";
import { parse, clear } from "./render.js";
class IFCXLoader extends Loader<Scene> {
override load(
url: string,
onLoad: (data: Scene) => void,
onProgress?: (event: ProgressEvent) => void,
onError?: (err: unknown) => void
) {
const manager = this.manager;
manager.itemStart(url);
const _onLoad = (scene: Scene) => {
onLoad(scene);
manager.itemEnd(url);
};
const _onError = (e: unknown) => {
if (onError) onError(e);
else console.error(e);
manager.itemError(url);
manager.itemEnd(url);
};
const loader = new FileLoader(this.manager);
loader.setPath(this.path);
loader.setResponseType("json");
loader.setRequestHeader(this.requestHeader);
loader.setWithCredentials(this.withCredentials);
loader.load(url, (json) => this.parse(json, _onLoad, _onError), onProgress, onError);
}
parse(json: any, onLoad: (scene: Scene) => void, onError: (err: unknown) => void) {
parse(json)
.then((scene: Scene) => onLoad(scene))
.catch((err: unknown) => onError(err))
.finally(() => clear());
}
}
export { IFCXLoader };