UNPKG

@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
/////////////////////////////////////////////////////////////////////////////// // 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 };