@inweb/viewer-three 26.10.1 → 26.10.2
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/plugins/loaders/IFCXLoader.js.map +1 -1
- package/dist/plugins/loaders/IFCXLoader.module.js.map +1 -1
- package/dist/viewer-three.js +132 -44
- package/dist/viewer-three.js.map +1 -1
- package/dist/viewer-three.min.js +3 -3
- package/dist/viewer-three.module.js +125 -45
- package/dist/viewer-three.module.js.map +1 -1
- package/lib/Viewer/components/CameraComponent.d.ts +5 -1
- package/lib/Viewer/draggers/CuttingPlaneDragger.d.ts +1 -0
- package/lib/Viewer/draggers/FlyDragger.d.ts +1 -0
- package/lib/Viewer/draggers/MeasureLineDragger.d.ts +1 -0
- package/lib/Viewer/draggers/OrbitDragger.d.ts +1 -0
- package/lib/Viewer/draggers/WalkDragger.d.ts +1 -0
- package/package.json +5 -5
- package/plugins/loaders/IFCX/render.js +2 -2
- package/src/Viewer/Viewer.ts +4 -0
- package/src/Viewer/components/CameraComponent.ts +86 -25
- package/src/Viewer/controls/WalkControls.ts +1 -1
- package/src/Viewer/draggers/CuttingPlaneDragger.ts +12 -6
- package/src/Viewer/draggers/FlyDragger.ts +10 -4
- package/src/Viewer/draggers/MeasureLineDragger.ts +21 -7
- package/src/Viewer/draggers/OrbitDragger.ts +7 -1
- package/src/Viewer/draggers/WalkDragger.ts +10 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IFCXLoader.js","sources":["../../../../../node_modules/three/examples/jsm/loaders/PCDLoader.js","../../../plugins/loaders/IFCX/render.js","../../../plugins/loaders/IFCX/IFCXLoader.ts","../../../plugins/loaders/IFCX/IFCXFileLoader.ts","../../../plugins/loaders/IFCX/IFCXCloudLoader.ts","../../../plugins/loaders/IFCX/index.ts"],"sourcesContent":["import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tInt32BufferAttribute,\n\tLoader,\n\tPoints,\n\tPointsMaterial,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * A loader for the Point Cloud Data (PCD) format.\n *\n * PCDLoader supports ASCII and (compressed) binary files as well as the following PCD fields:\n * - x y z\n * - rgb\n * - normal_x normal_y normal_z\n * - intensity\n * - label\n *\n * ```js\n * const loader = new PCDLoader();\n *\n * const points = await loader.loadAsync( './models/pcd/binary/Zaghetto.pcd' );\n * points.geometry.center(); // optional\n * points.geometry.rotateX( Math.PI ); // optional\n * scene.add( points );\n * ```\n *\n * @augments Loader\n * @three_import import { PCDLoader } from 'three/addons/loaders/PCDLoader.js';\n */\nclass PCDLoader extends Loader {\n\n\t/**\n\t * Constructs a new PCD loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * Whether to use little Endian or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.littleEndian = true;\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded PCD asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Points)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Get dataview value by field type and size.\n\t *\n\t * @param {DataView} dataview - The DataView to read from.\n\t * @param {number} offset - The offset to start reading from.\n\t * @param {'F' | 'U' | 'I'} type - Field type.\n\t * @param {number} size - Field size.\n\t * @returns {number} Field value.\n\t */\n\t_getDataView( dataview, offset, type, size ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'F': {\n\n\t\t\t\tif ( size === 8 ) {\n\n\t\t\t\t\treturn dataview.getFloat64( offset, this.littleEndian );\n\n\t\t\t\t}\n\n\t\t\t\treturn dataview.getFloat32( offset, this.littleEndian );\n\n\t\t\t}\n\n\t\t\tcase 'I': {\n\n\t\t\t\tif ( size === 1 ) {\n\n\t\t\t\t\treturn dataview.getInt8( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( size === 2 ) {\n\n\t\t\t\t\treturn dataview.getInt16( offset, this.littleEndian );\n\n\t\t\t\t}\n\n\t\t\t\treturn dataview.getInt32( offset, this.littleEndian );\n\n\t\t\t}\n\n\t\t\tcase 'U': {\n\n\t\t\t\tif ( size === 1 ) {\n\n\t\t\t\t\treturn dataview.getUint8( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( size === 2 ) {\n\n\t\t\t\t\treturn dataview.getUint16( offset, this.littleEndian );\n\n\t\t\t\t}\n\n\t\t\t\treturn dataview.getUint32( offset, this.littleEndian );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Parses the given PCD data and returns a point cloud.\n\t *\n\t * @param {ArrayBuffer} data - The raw PCD data as an array buffer.\n\t * @return {Points} The parsed point cloud.\n\t */\n\tparse( data ) {\n\n\t\t// from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n\t\tfunction decompressLZF( inData, outLength ) {\n\n\t\t\tconst inLength = inData.length;\n\t\t\tconst outData = new Uint8Array( outLength );\n\t\t\tlet inPtr = 0;\n\t\t\tlet outPtr = 0;\n\t\t\tlet ctrl;\n\t\t\tlet len;\n\t\t\tlet ref;\n\t\t\tdo {\n\n\t\t\t\tctrl = inData[ inPtr ++ ];\n\t\t\t\tif ( ctrl < ( 1 << 5 ) ) {\n\n\t\t\t\t\tctrl ++;\n\t\t\t\t\tif ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = inData[ inPtr ++ ];\n\n\t\t\t\t\t} while ( -- ctrl );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlen = ctrl >> 5;\n\t\t\t\t\tref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;\n\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( len === 7 ) {\n\n\t\t\t\t\t\tlen += inData[ inPtr ++ ];\n\t\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tref -= inData[ inPtr ++ ];\n\t\t\t\t\tif ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( ref < 0 ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = outData[ ref ++ ];\n\n\t\t\t\t\t} while ( -- len + 2 );\n\n\t\t\t\t}\n\n\t\t\t} while ( inPtr < inLength );\n\n\t\t\treturn outData;\n\n\t\t}\n\n\t\tfunction parseHeader( binaryData ) {\n\n\t\t\tconst PCDheader = {};\n\n\t\t\tconst buffer = new Uint8Array( binaryData );\n\n\t\t\tlet data = '', line = '', i = 0, end = false;\n\n\t\t\tconst max = buffer.length;\n\n\t\t\twhile ( i < max && end === false ) {\n\n\t\t\t\tconst char = String.fromCharCode( buffer[ i ++ ] );\n\n\t\t\t\tif ( char === '\\n' || char === '\\r' ) {\n\n\t\t\t\t\tif ( line.trim().toLowerCase().startsWith( 'data' ) ) {\n\n\t\t\t\t\t\tend = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tline = '';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tline += char;\n\n\t\t\t\t}\n\n\t\t\t\tdata += char;\n\n\t\t\t}\n\n\t\t\tconst result1 = data.search( /[\\r\\n]DATA\\s(\\S*)\\s/i );\n\t\t\tconst result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec( data.slice( result1 - 1 ) );\n\n\t\t\tPCDheader.data = result2[ 1 ];\n\t\t\tPCDheader.headerLen = result2[ 0 ].length + result1;\n\t\t\tPCDheader.str = data.slice( 0, PCDheader.headerLen );\n\n\t\t\t// remove comments\n\n\t\t\tPCDheader.str = PCDheader.str.replace( /#.*/gi, '' );\n\n\t\t\t// parse\n\n\t\t\tPCDheader.version = /^VERSION (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.fields = /^FIELDS (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.size = /^SIZE (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.type = /^TYPE (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.count = /^COUNT (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.width = /^WIDTH (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.height = /^HEIGHT (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.viewpoint = /^VIEWPOINT (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.points = /^POINTS (.*)/im.exec( PCDheader.str );\n\n\t\t\t// evaluate\n\n\t\t\tif ( PCDheader.version !== null )\n\t\t\t\tPCDheader.version = parseFloat( PCDheader.version[ 1 ] );\n\n\t\t\tPCDheader.fields = ( PCDheader.fields !== null ) ? PCDheader.fields[ 1 ].split( ' ' ) : [];\n\n\t\t\tif ( PCDheader.type !== null )\n\t\t\t\tPCDheader.type = PCDheader.type[ 1 ].split( ' ' );\n\n\t\t\tif ( PCDheader.width !== null )\n\t\t\t\tPCDheader.width = parseInt( PCDheader.width[ 1 ] );\n\n\t\t\tif ( PCDheader.height !== null )\n\t\t\t\tPCDheader.height = parseInt( PCDheader.height[ 1 ] );\n\n\t\t\tif ( PCDheader.viewpoint !== null )\n\t\t\t\tPCDheader.viewpoint = PCDheader.viewpoint[ 1 ];\n\n\t\t\tif ( PCDheader.points !== null )\n\t\t\t\tPCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );\n\n\t\t\tif ( PCDheader.points === null )\n\t\t\t\tPCDheader.points = PCDheader.width * PCDheader.height;\n\n\t\t\tif ( PCDheader.size !== null ) {\n\n\t\t\t\tPCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( PCDheader.count !== null ) {\n\n\t\t\t\tPCDheader.count = PCDheader.count[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tPCDheader.count = [];\n\n\t\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tPCDheader.count.push( 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tPCDheader.offset = {};\n\n\t\t\tlet sizeSum = 0;\n\n\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = i;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = sizeSum;\n\t\t\t\t\tsizeSum += PCDheader.size[ i ] * PCDheader.count[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// for binary only\n\n\t\t\tPCDheader.rowSize = sizeSum;\n\n\t\t\treturn PCDheader;\n\n\t\t}\n\n\t\t// parse header\n\n\t\tconst PCDheader = parseHeader( data );\n\n\t\t// parse data\n\n\t\tconst position = [];\n\t\tconst normal = [];\n\t\tconst color = [];\n\t\tconst intensity = [];\n\t\tconst label = [];\n\n\t\tconst c = new Color();\n\n\t\t// ascii\n\n\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\tconst offset = PCDheader.offset;\n\t\t\tconst textData = new TextDecoder().decode( data );\n\t\t\tconst pcdData = textData.slice( PCDheader.headerLen );\n\t\t\tconst lines = pcdData.split( '\\n' );\n\n\t\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\t\tif ( lines[ i ] === '' ) continue;\n\n\t\t\t\tconst line = lines[ i ].split( ' ' );\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( parseFloat( line[ offset.x ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.y ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgb_field_index = PCDheader.fields.findIndex( ( field ) => field === 'rgb' );\n\t\t\t\t\tconst rgb_type = PCDheader.type[ rgb_field_index ];\n\n\t\t\t\t\tconst float = parseFloat( line[ offset.rgb ] );\n\t\t\t\t\tlet rgb = float;\n\n\t\t\t\t\tif ( rgb_type === 'F' ) {\n\n\t\t\t\t\t\t// treat float values as int\n\t\t\t\t\t\t// https://github.com/daavoo/pyntcloud/pull/204/commits/7b4205e64d5ed09abe708b2e91b615690c24d518\n\t\t\t\t\t\tconst farr = new Float32Array( 1 );\n\t\t\t\t\t\tfarr[ 0 ] = float;\n\t\t\t\t\t\trgb = new Int32Array( farr.buffer )[ 0 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst r = ( ( rgb >> 16 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst g = ( ( rgb >> 8 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst b = ( ( rgb >> 0 ) & 0x0000ff ) / 255;\n\n\t\t\t\t\tc.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_x ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_y ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tintensity.push( parseFloat( line[ offset.intensity ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( parseInt( line[ offset.label ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary-compressed\n\n\t\t// normally data in PCD files are organized as array of structures: XYZRGBXYZRGB\n\t\t// binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB\n\t\t// that requires a totally different parsing approach compared to non-compressed data\n\n\t\tif ( PCDheader.data === 'binary_compressed' ) {\n\n\t\t\tconst sizes = new Uint32Array( data.slice( PCDheader.headerLen, PCDheader.headerLen + 8 ) );\n\t\t\tconst compressedSize = sizes[ 0 ];\n\t\t\tconst decompressedSize = sizes[ 1 ];\n\t\t\tconst decompressed = decompressLZF( new Uint8Array( data, PCDheader.headerLen + 8, compressedSize ), decompressedSize );\n\t\t\tconst dataview = new DataView( decompressed.buffer );\n\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0; i < PCDheader.points; i ++ ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'z' );\n\t\t\t\t\tposition.push( this._getDataView( dataview, ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgbIndex = PCDheader.fields.indexOf( 'rgb' );\n\n\t\t\t\t\tconst r = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 0 ) / 255.0;\n\n\t\t\t\t\tc.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'normal_x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'normal_y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'normal_z' );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tconst intensityIndex = PCDheader.fields.indexOf( 'intensity' );\n\t\t\t\t\tintensity.push( this._getDataView( dataview, ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, PCDheader.type[ intensityIndex ], PCDheader.size[ intensityIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tconst labelIndex = PCDheader.fields.indexOf( 'label' );\n\t\t\t\t\tlabel.push( dataview.getInt32( ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary\n\n\t\tif ( PCDheader.data === 'binary' ) {\n\n\t\t\tconst dataview = new DataView( data, PCDheader.headerLen );\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0, row = 0; i < PCDheader.points; i ++, row += PCDheader.rowSize ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'z' );\n\t\t\t\t\tposition.push( this._getDataView( dataview, row + offset.x, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, row + offset.y, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, row + offset.z, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst r = dataview.getUint8( row + offset.rgb + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( row + offset.rgb + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( row + offset.rgb + 0 ) / 255.0;\n\n\t\t\t\t\tc.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'normal_x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'normal_y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'normal_z' );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, row + offset.normal_x, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, row + offset.normal_y, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, row + offset.normal_z, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tconst intensityIndex = PCDheader.fields.indexOf( 'intensity' );\n\t\t\t\t\tintensity.push( this._getDataView( dataview, row + offset.intensity, PCDheader.type[ intensityIndex ], PCDheader.size[ intensityIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( dataview.getInt32( row + offset.label, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( position.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( normal.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( color.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\t\tif ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new Float32BufferAttribute( intensity, 1 ) );\n\t\tif ( label.length > 0 ) geometry.setAttribute( 'label', new Int32BufferAttribute( label, 1 ) );\n\n\t\tgeometry.computeBoundingSphere();\n\n\t\t// build material\n\n\t\tconst material = new PointsMaterial( { size: 0.005 } );\n\n\t\tif ( color.length > 0 ) {\n\n\t\t\tmaterial.vertexColors = true;\n\n\t\t}\n\n\t\t// build point cloud\n\n\t\treturn new Points( geometry, material );\n\n\t}\n\n}\n\nexport { PCDLoader };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\n// Repository: https://github.com/buildingSMART/IFC5-development\n// Original File: docs/viewer/render.mjs\n// Commit SHA-1: 83a7ae862232c90065d1bd03fcd538315e7d2563\n// Commit Date: 20.05.2025 21:00:52\n\n// (C) buildingSMART International\n// published under MIT license\n\n/* eslint-disable lines-between-class-members */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable prefer-const */\n/* eslint-disable no-useless-catch */\n\nimport {\n Box3,\n BufferAttribute,\n BufferGeometry,\n Color,\n Euler,\n Float32BufferAttribute,\n Group,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshLambertMaterial,\n MeshStandardMaterial,\n Points,\n PointsMaterial,\n PerspectiveCamera,\n Scene,\n Vector3,\n} from \"three\";\n\nconst THREE = {\n Box3,\n BufferAttribute,\n BufferGeometry,\n Color,\n Euler,\n Float32BufferAttribute,\n Group,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshLambertMaterial,\n MeshStandardMaterial,\n Points,\n PointsMaterial,\n PerspectiveCamera,\n Scene,\n Vector3,\n};\n\n// ifcx-core/layers/layer-providers.ts\nvar StackedLayerProvider = class {\n providers;\n constructor(providers) {\n this.providers = providers;\n }\n async GetLayerByURI(uri) {\n let errorStack = [];\n for (let provider of this.providers) {\n let layer = await provider.GetLayerByURI(uri);\n if (!(layer instanceof Error)) {\n return layer;\n } else {\n errorStack.push(layer);\n }\n }\n return new Error(JSON.stringify(errorStack));\n }\n};\nvar InMemoryLayerProvider = class {\n layers;\n constructor() {\n this.layers = /* @__PURE__ */ new Map();\n }\n GetLayerByURI(uri) {\n if (!this.layers.has(uri)) {\n return new Error(`File with uri \"${uri}\" not found`);\n }\n return Promise.resolve(this.layers.get(uri));\n }\n add(file) {\n if (this.layers.has(file.header.id)) {\n throw new Error(`Inserting file with duplicate ID \"${file.header.id}\"`);\n }\n this.layers.set(file.header.id, file);\n return this;\n }\n AddAll(files) {\n files.forEach((f) => this.add(f));\n return this;\n }\n};\n\n// ifcx-core/util/log.ts\nvar LOG_ENABLED = true;\nfunction log(bla) {\n if (LOG_ENABLED) {\n console.log(`${JSON.stringify(arguments)}`);\n }\n}\n\n// ifcx-core/layers/fetch-layer-provider.ts\nvar FetchLayerProvider = class {\n layers;\n constructor() {\n this.layers = /* @__PURE__ */ new Map();\n }\n async FetchJson(url) {\n let result = await fetch(url);\n if (!result.ok) {\n return new Error(`Failed to fetch ${url}: ${result.status}`);\n }\n try {\n return await result.json();\n } catch (e) {\n log(url);\n return new Error(`Failed to parse json at ${url}: ${e}`);\n }\n }\n async GetLayerByURI(uri) {\n if (!this.layers.has(uri)) {\n let fetched = await this.FetchJson(uri);\n if (fetched instanceof Error) {\n return new Error(`File with id \"${uri}\" not found`);\n }\n let file = fetched;\n this.layers.set(uri, file);\n return file;\n }\n return this.layers.get(uri);\n }\n};\n\n// ifcx-core/util/mm.ts\nfunction MMSet(map, key, value) {\n if (map.has(key)) {\n map.get(key)?.push(value);\n } else {\n map.set(key, [value]);\n }\n}\n\n// ifcx-core/composition/cycles.ts\nvar CycleError = class extends Error {};\nfunction FindRootsOrCycles(nodes) {\n let dependencies = /* @__PURE__ */ new Map();\n let dependents = /* @__PURE__ */ new Map();\n nodes.forEach((node, path) => {\n Object.keys(node.inherits).forEach((inheritName) => {\n MMSet(dependencies, path, node.inherits[inheritName]);\n MMSet(dependents, node.inherits[inheritName], path);\n });\n Object.keys(node.children).forEach((childName) => {\n MMSet(dependencies, path, node.children[childName]);\n MMSet(dependents, node.children[childName], path);\n });\n });\n let paths = [...nodes.keys()];\n let perm = {};\n let temp = {};\n function visit(path) {\n if (perm[path]) return;\n if (temp[path]) throw new Error(`CYCLE!`);\n temp[path] = true;\n let deps = dependencies.get(path);\n if (deps) {\n deps.forEach((dep) => visit(dep));\n }\n perm[path] = true;\n }\n let roots = /* @__PURE__ */ new Set();\n try {\n paths.forEach((path) => {\n if (!dependents.has(path) && path.indexOf(\"/\") === -1) {\n roots.add(path);\n }\n visit(path);\n });\n } catch (e) {\n return null;\n }\n return roots;\n}\n\n// ifcx-core/composition/path.ts\nfunction GetHead(path) {\n return path.split(\"/\")[0];\n}\nfunction GetTail(path) {\n let parts = path.split(\"/\");\n parts.shift();\n return parts.join(\"/\");\n}\n\n// ifcx-core/composition/node.ts\nfunction MakePostCompositionNode(node) {\n return {\n node,\n children: /* @__PURE__ */ new Map(),\n attributes: /* @__PURE__ */ new Map(),\n };\n}\nfunction GetChildNodeWithPath(node, path) {\n if (path === \"\") return node;\n let parts = path.split(\"/\");\n let child = node.children.get(parts[0]);\n if (child) {\n if (parts.length === 1) {\n return child;\n }\n return GetChildNodeWithPath(child, GetTail(path));\n } else {\n return null;\n }\n}\n\n// ifcx-core/composition/compose.ts\nfunction FlattenPathToPreCompositionNode(path, inputNodes) {\n let compositionNode = {\n path,\n children: {},\n inherits: {},\n attributes: {},\n };\n inputNodes.forEach((node) => {\n Object.keys(node.children).forEach((childName) => {\n compositionNode.children[childName] = node.children[childName];\n });\n Object.keys(node.inherits).forEach((inheritName) => {\n let ih = node.inherits[inheritName];\n if (ih === null) {\n delete compositionNode.inherits[inheritName];\n } else {\n compositionNode.inherits[inheritName] = ih;\n }\n });\n Object.keys(node.attributes).forEach((attrName) => {\n compositionNode.attributes[attrName] = node.attributes[attrName];\n });\n });\n return compositionNode;\n}\nfunction FlattenCompositionInput(input) {\n let compositionNodes = /* @__PURE__ */ new Map();\n for (let [path, inputNodes] of input) {\n compositionNodes.set(path, FlattenPathToPreCompositionNode(path, inputNodes));\n }\n return compositionNodes;\n}\nfunction ExpandFirstRootInInput(nodes) {\n let roots = FindRootsOrCycles(nodes);\n if (!roots) {\n throw new CycleError();\n }\n return ComposeNodeFromPath([...roots.values()][0], nodes);\n}\nfunction CreateArtificialRoot(nodes) {\n let roots = FindRootsOrCycles(nodes);\n if (!roots) {\n throw new CycleError();\n }\n let pseudoRoot = {\n node: \"\",\n attributes: /* @__PURE__ */ new Map(),\n children: /* @__PURE__ */ new Map(),\n };\n roots.forEach((root) => {\n pseudoRoot.children.set(root, ComposeNodeFromPath(root, nodes));\n });\n return pseudoRoot;\n}\nfunction ComposeNodeFromPath(path, preCompositionNodes) {\n return ComposeNode(path, MakePostCompositionNode(path), preCompositionNodes);\n}\nfunction ComposeNode(path, postCompositionNode, preCompositionNodes) {\n let preCompositionNode = preCompositionNodes.get(path);\n if (preCompositionNode) {\n AddDataFromPreComposition(preCompositionNode, postCompositionNode, preCompositionNodes);\n }\n postCompositionNode.children.forEach((child, name) => {\n ComposeNode(`${path}/${name}`, child, preCompositionNodes);\n });\n return postCompositionNode;\n}\nfunction AddDataFromPreComposition(input, node, nodes) {\n Object.values(input.inherits).forEach((inheritPath) => {\n let classNode = ComposeNodeFromPath(GetHead(inheritPath), nodes);\n let subnode = GetChildNodeWithPath(classNode, GetTail(inheritPath));\n if (!subnode) throw new Error(`Unknown node ${inheritPath}`);\n subnode.children.forEach((child, childName) => {\n node.children.set(childName, child);\n });\n for (let [attrID, attr] of subnode.attributes) {\n node.attributes.set(attrID, attr);\n }\n });\n Object.entries(input.children).forEach(([childName, child]) => {\n if (child !== null) {\n let classNode = ComposeNodeFromPath(GetHead(child), nodes);\n let subnode = GetChildNodeWithPath(classNode, GetTail(child));\n if (!subnode) throw new Error(`Unknown node ${child}`);\n node.children.set(childName, subnode);\n } else {\n node.children.delete(childName);\n }\n });\n Object.entries(input.attributes).forEach(([attrID, attr]) => {\n node.attributes.set(attrID, attr);\n });\n}\n\n// ifcx-core/schema/schema-validation.ts\nvar SchemaValidationError = class extends Error {};\nfunction ValidateAttributeValue(desc, value, path, schemas) {\n if (desc.optional && value === void 0) {\n return;\n }\n if (desc.inherits) {\n desc.inherits.forEach((inheritedSchemaID) => {\n let inheritedSchema = schemas[inheritedSchemaID];\n if (!inheritedSchema) {\n throw new SchemaValidationError(`Unknown inherited schema id \"${desc.inherits}\"`);\n }\n ValidateAttributeValue(inheritedSchema.value, value, path, schemas);\n });\n }\n if (desc.dataType === \"Boolean\") {\n if (typeof value !== \"boolean\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type boolean`);\n }\n } else if (desc.dataType === \"String\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n } else if (desc.dataType === \"DateTime\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type date`);\n }\n } else if (desc.dataType === \"Enum\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n let found = desc.enumRestrictions.options.filter((option) => option === value).length === 1;\n if (!found) {\n throw new SchemaValidationError(`Expected \"${value}\" to be one of [${desc.enumRestrictions.options.join(\",\")}]`);\n }\n } else if (desc.dataType === \"Integer\") {\n if (typeof value !== \"number\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type int`);\n }\n } else if (desc.dataType === \"Real\") {\n if (typeof value !== \"number\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type real`);\n }\n } else if (desc.dataType === \"Reference\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n } else if (desc.dataType === \"Object\") {\n if (typeof value !== \"object\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type object`);\n }\n if (desc.objectRestrictions) {\n Object.keys(desc.objectRestrictions.values).forEach((key) => {\n let optional = desc.objectRestrictions.values[key].optional;\n let hasOwn = Object.hasOwn(value, key);\n if (optional && !hasOwn) return;\n if (!hasOwn) {\n throw new SchemaValidationError(`Expected \"${value}\" to have key ${key}`);\n }\n ValidateAttributeValue(desc.objectRestrictions.values[key], value[key], path + \".\" + key, schemas);\n });\n }\n } else if (desc.dataType === \"Array\") {\n if (!Array.isArray(value)) {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type array`);\n }\n value.forEach((entry) => {\n ValidateAttributeValue(desc.arrayRestrictions.value, entry, path + \".<array>.\", schemas);\n });\n } else {\n throw new SchemaValidationError(`Unexpected datatype ${desc.dataType}`);\n }\n}\nfunction Validate(schemas, inputNodes) {\n inputNodes.forEach((node) => {\n Object.keys(node.attributes)\n .filter((v) => !v.startsWith(\"__internal\"))\n .forEach((schemaID) => {\n if (!schemas[schemaID]) {\n throw new SchemaValidationError(`Missing schema \"${schemaID}\" referenced by [\"${node.path}\"].attributes`);\n }\n let schema = schemas[schemaID];\n let value = node.attributes[schemaID];\n try {\n ValidateAttributeValue(schema.value, value, \"\", schemas);\n } catch (e) {\n if (e instanceof SchemaValidationError) {\n throw new SchemaValidationError(\n `Error validating [\"${node.path}\"].attributes[\"${schemaID}\"]: ${e.message}`\n );\n } else {\n throw e;\n }\n }\n });\n });\n}\n\n// ifcx-core/workflows.ts\nfunction ToInputNodes(data) {\n let inputNodes = /* @__PURE__ */ new Map();\n data.forEach((ifcxNode) => {\n let node = {\n path: ifcxNode.path,\n children: ifcxNode.children ? ifcxNode.children : {},\n inherits: ifcxNode.inherits ? ifcxNode.inherits : {},\n attributes: ifcxNode.attributes ? ifcxNode.attributes : {},\n };\n MMSet(inputNodes, node.path, node);\n });\n return inputNodes;\n}\nfunction LoadIfcxFile(file, checkSchemas = true, createArtificialRoot = true) {\n let inputNodes = ToInputNodes(file.data);\n let compositionNodes = FlattenCompositionInput(inputNodes);\n try {\n if (checkSchemas) {\n Validate(file.schemas, compositionNodes);\n }\n } catch (e) {\n throw e;\n }\n if (createArtificialRoot) {\n return CreateArtificialRoot(compositionNodes);\n } else {\n return ExpandFirstRootInInput(compositionNodes);\n }\n}\nfunction Federate(files) {\n if (files.length === 0) {\n throw new Error(`Trying to federate empty set of files`);\n }\n let result = {\n header: files[0].header,\n imports: [],\n schemas: {},\n data: [],\n };\n files.forEach((file) => {\n Object.keys(file.schemas).forEach((schemaID) => (result.schemas[schemaID] = file.schemas[schemaID]));\n });\n files.forEach((file) => {\n file.data.forEach((node) => result.data.push(node));\n });\n return Prune(result);\n}\nfunction Collapse(nodes, deleteEmpty = false) {\n let result = {\n path: nodes[0].path,\n children: {},\n inherits: {},\n attributes: {},\n };\n nodes.forEach((node) => {\n Object.keys(node.children).forEach((name) => {\n result.children[name] = node.children[name];\n });\n Object.keys(node.inherits).forEach((name) => {\n result.inherits[name] = node.inherits[name];\n });\n Object.keys(node.attributes).forEach((name) => {\n result.attributes[name] = node.attributes[name];\n });\n });\n if (deleteEmpty) {\n let empty = true;\n Object.keys(result.children).forEach((name) => {\n if (result.children[name] !== null) empty = false;\n });\n Object.keys(result.inherits).forEach((name) => {\n if (result.inherits[name] !== null) empty = false;\n });\n Object.keys(result.attributes).forEach((name) => {\n if (result.attributes[name] !== null) empty = false;\n });\n if (empty) return null;\n }\n return result;\n}\nfunction Prune(file, deleteEmpty = false) {\n let result = {\n header: file.header,\n imports: [],\n schemas: file.schemas,\n data: [],\n };\n let inputNodes = ToInputNodes(file.data);\n inputNodes.forEach((nodes) => {\n let collapsed = Collapse(nodes, deleteEmpty);\n if (collapsed)\n result.data.push({\n path: collapsed.path,\n children: collapsed.children,\n inherits: collapsed.inherits,\n attributes: collapsed.attributes,\n });\n });\n return result;\n}\n\n// ifcx-core/layers/layer-stack.ts\nvar IfcxLayerStack = class {\n // main layer at 0\n layers;\n tree;\n schemas;\n federated;\n constructor(layers) {\n this.layers = layers;\n this.Compose();\n }\n GetLayerIds() {\n return this.layers.map((l) => l.header.id);\n }\n Compose() {\n this.federated = Federate(this.layers);\n this.schemas = this.federated.schemas;\n this.tree = LoadIfcxFile(this.federated);\n }\n GetFullTree() {\n this.Compose();\n return this.tree;\n }\n GetFederatedLayer() {\n return this.federated;\n }\n GetSchemas() {\n return this.schemas;\n }\n};\nvar IfcxLayerStackBuilder = class {\n provider;\n mainLayerId = null;\n constructor(provider) {\n this.provider = provider;\n }\n FromId(id) {\n this.mainLayerId = id;\n return this;\n }\n async Build() {\n if (!this.mainLayerId) throw new Error(`no main layer ID specified`);\n let layers = await this.BuildLayerSet(this.mainLayerId);\n if (layers instanceof Error) {\n return layers;\n }\n try {\n return new IfcxLayerStack(layers);\n } catch (e) {\n return e;\n }\n }\n async SatisfyDependencies(activeLayer, placed, orderedLayers) {\n let pending = [];\n for (const impt of activeLayer.imports) {\n if (!placed.has(impt.uri)) {\n let layer = await this.provider.GetLayerByURI(impt.uri);\n if (layer instanceof Error) {\n return layer;\n }\n pending.push(layer);\n placed.set(impt.uri, true);\n }\n }\n let temp = [];\n for (const layer of pending) {\n temp.push(layer);\n let layers = await this.SatisfyDependencies(layer, placed, orderedLayers);\n if (layers instanceof Error) {\n return layers;\n }\n temp.push(...layers);\n }\n temp.forEach((t) => orderedLayers.push(t));\n return temp;\n }\n async BuildLayerSet(activeLayerID) {\n let activeLayer = await this.provider.GetLayerByURI(activeLayerID);\n if (activeLayer instanceof Error) {\n return activeLayer;\n }\n let layerSet = [activeLayer];\n let placed = /* @__PURE__ */ new Map();\n placed.set(activeLayer.header.id, true);\n let result = await this.SatisfyDependencies(activeLayer, placed, layerSet);\n if (result instanceof Error) {\n return result;\n }\n return layerSet;\n }\n};\n\n// viewer/compose-flattened.ts\nfunction TreeNodeToComposedObject(path, node, schemas) {\n let co = {\n name: path,\n attributes: {},\n children: [],\n };\n node.children.forEach((childNode, childName) => {\n co.children?.push(TreeNodeToComposedObject(`${path}/${childName}`, childNode, schemas));\n });\n node.attributes.forEach((attr, attrName) => {\n if (attr && typeof attr === \"object\" && !Array.isArray(attr)) {\n Object.keys(attr).forEach((compname) => {\n co.attributes[`${attrName}::${compname}`] = attr[compname];\n });\n } else {\n let schema = schemas[attrName];\n if (schema && schema.value.quantityKind) {\n let postfix = \"\";\n let quantityKind = schema.value.quantityKind;\n if (quantityKind === \"Length\") {\n postfix = \"m\";\n } else if (quantityKind === \"Volume\") {\n postfix = \"m\" + String.fromCodePoint(179);\n }\n co.attributes[attrName] = `${attr} ${postfix}`;\n } else {\n co.attributes[attrName] = attr;\n }\n }\n });\n if (Object.keys(co.attributes).length === 0) delete co.attributes;\n return co;\n}\nasync function compose3(files) {\n let userDefinedOrder = {\n header: { ...files[0].header },\n imports: files.map((f) => {\n return { uri: f.header.id };\n }),\n schemas: {},\n data: [],\n };\n userDefinedOrder.header.id = \"USER_DEF\";\n let provider = new StackedLayerProvider([\n new InMemoryLayerProvider().AddAll([userDefinedOrder, ...files]),\n new FetchLayerProvider(),\n ]);\n let layerStack = await new IfcxLayerStackBuilder(provider).FromId(userDefinedOrder.header.id).Build();\n if (layerStack instanceof Error) {\n throw layerStack;\n }\n layerStack.GetFederatedLayer().data.forEach((n, i) => {\n n.attributes = n.attributes || {};\n n.attributes[`__internal_${i}`] = n.path;\n });\n return TreeNodeToComposedObject(\"\", layerStack.GetFullTree(), layerStack.GetSchemas());\n}\n\n// viewer/render.ts\n// import * as THREE from \"three\";\n// import { OrbitControls } from \"three/addons/controls/OrbitControls.js\";\n// import { RGBELoader } from \"three/addons/loaders/RGBELoader.js\";\nimport { PCDLoader } from \"three/examples/jsm/loaders/PCDLoader.js\";\n// var controls;\n// var renderer;\nvar scene;\nvar camera;\nvar datas = [];\nvar autoCamera = true;\nvar objectMap = {};\n// var domMap = {};\nvar primMap = {};\n// var currentPathMapping = null;\n// var rootPrim = null;\n// var selectedObject = null;\n// var selectedDom = null;\n// var raycaster = new THREE.Raycaster();\n// var mouse = new THREE.Vector2();\nvar envMap;\nfunction init() {\n scene = new THREE.Scene();\n // const ambient = new THREE.AmbientLight(14544639, 0.4);\n // scene.add(ambient);\n // const keyLight = new THREE.DirectionalLight(16777215, 1);\n // keyLight.position.set(5, -10, 7.5);\n // scene.add(keyLight);\n // const fillLight = new THREE.DirectionalLight(16777215, 0.5);\n // fillLight.position.set(-5, 5, 5);\n // scene.add(fillLight);\n // const rimLight = new THREE.DirectionalLight(16777215, 0.3);\n // rimLight.position.set(0, 8, -10);\n // scene.add(rimLight);\n camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100);\n camera.up.set(0, 0, 1);\n camera.position.set(50, 50, 50);\n camera.lookAt(0, 0, 0);\n scene.add(camera);\n // const nd = document.querySelector(\".viewport\");\n // renderer = new THREE.WebGLRenderer({\n // alpha: true,\n // logarithmicDepthBuffer: true,\n // });\n // const pmremGenerator = new THREE.PMREMGenerator(renderer);\n // pmremGenerator.compileEquirectangularShader();\n // new RGBELoader().load(\"images/wildflower_field_1k.hdr\", function (texture) {\n // envMap = pmremGenerator.fromEquirectangular(texture).texture;\n // scene.environment = envMap;\n // texture.dispose();\n // pmremGenerator.dispose();\n // });\n // renderer.setSize(nd.offsetWidth, nd.offsetHeight);\n // controls = new OrbitControls(camera, renderer.domElement);\n // controls.enableDamping = true;\n // controls.dampingFactor = 0.25;\n // nd.appendChild(renderer.domElement);\n // renderer.domElement.addEventListener(\"click\", onCanvasClick);\n return scene;\n}\nfunction HasAttr(node, attrName) {\n if (!node || !node.attributes) return false;\n return !!node.attributes[attrName];\n}\n// function setHighlight(obj, highlight) {\n// if (!obj) return;\n// obj.traverse((o) => {\n// const mat = o.material;\n// if (mat && mat.color) {\n// if (highlight) {\n// if (!o.userData._origColor) {\n// o.userData._origColor = mat.color.clone();\n// }\n// o.material = mat.clone();\n// o.material.color.set(16711680);\n// } else if (o.userData._origColor) {\n// mat.color.copy(o.userData._origColor);\n// delete o.userData._origColor;\n// }\n// }\n// });\n// }\n// function selectPath(path) {\n// if (!path) {\n// if (selectedObject) setHighlight(selectedObject, false);\n// if (selectedDom) selectedDom.classList.remove(\"selected\");\n// selectedObject = null;\n// selectedDom = null;\n// return;\n// }\n// if (selectedObject) {\n// setHighlight(selectedObject, false);\n// }\n// if (selectedDom) {\n// selectedDom.classList.remove(\"selected\");\n// }\n// selectedObject = objectMap[path] || null;\n// selectedDom = domMap[path] || null;\n// if (selectedObject) setHighlight(selectedObject, true);\n// if (selectedDom) selectedDom.classList.add(\"selected\");\n// }\n// function onCanvasClick(event) {\n// const rect = renderer.domElement.getBoundingClientRect();\n// mouse.x = ((event.clientX - rect.left) / rect.width) * 2 - 1;\n// mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;\n// raycaster.setFromCamera(mouse, camera);\n// const intersects = raycaster.intersectObjects(Object.values(objectMap), true);\n// if (intersects.length > 0) {\n// let obj = intersects[0].object;\n// while (obj && !obj.userData.path) obj = obj.parent;\n// if (obj && obj.userData.path) {\n// const path = obj.userData.path;\n// const prim = primMap[path];\n// if (prim) {\n// handleClick(prim, currentPathMapping, rootPrim || prim);\n// }\n// selectPath(path);\n// }\n// } else {\n// selectPath(null);\n// }\n// }\nfunction tryCreateMeshGltfMaterial(path) {\n for (let p of path) {\n if (!p.attributes) {\n continue;\n }\n const pbrMetallicRoughness = p.attributes[\"gltf::material::pbrMetallicRoughness\"];\n const normalTexture = p.attributes[\"gltf::material::normalTexture\"];\n const occlusionTexture = p.attributes[\"gltf::material::occlusionTexture\"];\n const emissiveTexture = p.attributes[\"gltf::material::emissiveTexture\"];\n const emissiveFactor = p.attributes[\"gltf::material::emissiveFactor\"];\n const alphaMode = p.attributes[\"gltf::material::alphaMode\"];\n const alphaCutoff = p.attributes[\"gltf::material::alphaCutoff\"];\n const doubleSided = p.attributes[\"gltf::material::doubleSided\"];\n if (\n !pbrMetallicRoughness &&\n !normalTexture &&\n !occlusionTexture &&\n !emissiveTexture &&\n !emissiveFactor &&\n !alphaMode &&\n !alphaCutoff &&\n !doubleSided\n ) {\n continue;\n }\n let material = new THREE.MeshStandardMaterial();\n material.color = new THREE.Color(1, 1, 1);\n material.metalness = 1;\n material.roughness = 1;\n if (pbrMetallicRoughness) {\n let baseColorFactor = pbrMetallicRoughness[\"baseColorFactor\"];\n if (baseColorFactor) {\n material.color = new THREE.Color(baseColorFactor[0], baseColorFactor[1], baseColorFactor[2]);\n }\n let metallicFactor = pbrMetallicRoughness[\"metallicFactor\"];\n if (metallicFactor !== void 0) {\n material.metalness = metallicFactor;\n }\n let roughnessFactor = pbrMetallicRoughness[\"roughnessFactor\"];\n if (roughnessFactor !== void 0) {\n material.roughness = roughnessFactor;\n }\n }\n material.envMap = envMap;\n material.needsUpdate = true;\n material.envMapRotation = new THREE.Euler(0.5 * Math.PI, 0, 0);\n return material;\n }\n return void 0;\n}\nfunction createMaterialFromParent(path) {\n let material = {\n color: new THREE.Color(0.6, 0.6, 0.6),\n transparent: false,\n opacity: 1,\n };\n for (let p of path) {\n const color = p.attributes ? p.attributes[\"bsi::ifc::presentation::diffuseColor\"] : null;\n if (color) {\n material.color = new THREE.Color(...color);\n const opacity = p.attributes[\"bsi::ifc::presentation::opacity\"];\n if (opacity) {\n material.transparent = true;\n material.opacity = opacity;\n }\n break;\n }\n }\n return material;\n}\nfunction createCurveFromJson(path) {\n let points = new Float32Array(path[0].attributes[\"usd::usdgeom::basiscurves::points\"].flat());\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(points, 3));\n const material = createMaterialFromParent(path);\n let lineMaterial = new THREE.LineBasicMaterial({ ...material });\n lineMaterial.color.multiplyScalar(0.8);\n return new THREE.Line(geometry, lineMaterial);\n}\nfunction createMeshFromJson(path) {\n let points = new Float32Array(path[0].attributes[\"usd::usdgeom::mesh::points\"].flat());\n let indices = new Uint16Array(path[0].attributes[\"usd::usdgeom::mesh::faceVertexIndices\"]);\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(points, 3));\n geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n geometry.computeVertexNormals();\n var meshMaterial;\n let gltfPbrMaterial = tryCreateMeshGltfMaterial(path);\n if (gltfPbrMaterial) {\n meshMaterial = gltfPbrMaterial;\n } else {\n const m = createMaterialFromParent(path);\n meshMaterial = new THREE.MeshLambertMaterial({ ...m });\n }\n return new THREE.Mesh(geometry, meshMaterial);\n}\nfunction createPointsFromJsonPcdBase64(path) {\n const base64_string = path[0].attributes[\"pcd::base64\"];\n const decoded = atob(base64_string);\n const len = decoded.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = decoded.charCodeAt(i);\n }\n const loader = new PCDLoader();\n const points = loader.parse(bytes.buffer);\n points.material.sizeAttenuation = false;\n points.material.size = 2;\n return points;\n}\nfunction createPoints(geometry, withColors) {\n const material = new THREE.PointsMaterial();\n material.sizeAttenuation = false;\n material.fog = true;\n material.size = 5;\n material.color = new THREE.Color(withColors ? 16777215 : 0);\n if (withColors) {\n material.vertexColors = true;\n }\n return new THREE.Points(geometry, material);\n}\nfunction createPointsFromJsonArray(path) {\n const geometry = new THREE.BufferGeometry();\n const positions = new Float32Array(path[0].attributes[\"points::array::positions\"].flat());\n geometry.setAttribute(\"position\", new THREE.Float32BufferAttribute(positions, 3));\n const colors = path[0].attributes[\"points::array::colors\"];\n if (colors) {\n const colors_ = new Float32Array(colors.flat());\n geometry.setAttribute(\"color\", new THREE.Float32BufferAttribute(colors_, 3));\n }\n return createPoints(geometry, colors);\n}\nfunction base64ToArrayBuffer(str) {\n let binary;\n try {\n binary = atob(str);\n } catch (e) {\n throw new Error(\"base64 encoded string is invalid\");\n }\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; ++i) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes.buffer;\n}\nfunction createPointsFromJsonPositionBase64(path) {\n const geometry = new THREE.BufferGeometry();\n const positions_base64 = path[0].attributes[\"points::base64::positions\"];\n const positions_bytes = base64ToArrayBuffer(positions_base64);\n if (!positions_bytes) {\n return null;\n }\n const positions = new Float32Array(positions_bytes);\n geometry.setAttribute(\"position\", new THREE.Float32BufferAttribute(positions, 3));\n const colors_base64 = path[0].attributes[\"points::base64::colors\"];\n if (colors_base64) {\n const colors_bytes = base64ToArrayBuffer(colors_base64);\n if (colors_bytes) {\n const colors = new Float32Array(colors_bytes);\n geometry.setAttribute(\"color\", new THREE.Float32BufferAttribute(colors, 3));\n }\n }\n return createPoints(geometry, colors_base64);\n}\nfunction traverseTree(path, parent, pathMapping) {\n const node = path[0];\n let elem = new THREE.Group();\n if (HasAttr(node, \"usd::usdgeom::visibility::visibility\")) {\n if (node.attributes[\"usd::usdgeom::visibility::visibility\"] === \"invisible\") {\n return;\n }\n } else if (HasAttr(node, \"usd::usdgeom::mesh::points\")) {\n elem = createMeshFromJson(path);\n } else if (HasAttr(node, \"usd::usdgeom::basiscurves::points\")) {\n elem = createCurveFromJson(path);\n } else if (HasAttr(node, \"pcd::base64\")) {\n elem = createPointsFromJsonPcdBase64(path);\n } else if (HasAttr(node, \"points::array::positions\")) {\n elem = createPointsFromJsonArray(path);\n } else if (HasAttr(node, \"points::base64::positions\")) {\n elem = createPointsFromJsonPositionBase64(path);\n }\n objectMap[node.name] = elem;\n primMap[node.name] = node;\n elem.userData.path = node.name;\n for (let path2 of Object.entries(node.attributes || {})\n .filter(([k, _]) => k.startsWith(\"__internal_\"))\n .map(([_, v]) => v)) {\n (pathMapping[String(path2)] = pathMapping[String(path2)] || []).push(node.name);\n }\n parent.add(elem);\n if (path.length > 1) {\n elem.matrixAutoUpdate = false;\n let matrixNode =\n node.attributes && node.attributes[\"usd::xformop::transform\"]\n ? node.attributes[\"usd::xformop::transform\"].flat()\n : null;\n if (matrixNode) {\n let matrix = new THREE.Matrix4();\n matrix.set(...matrixNode);\n matrix.transpose();\n elem.matrix = matrix;\n }\n }\n (node.children || []).forEach((child) => traverseTree([child, ...path], elem || parent, pathMapping));\n}\n// function encodeHtmlEntities(str) {\n// const div = document.createElement(\"div\");\n// div.textContent = str;\n// return div.innerHTML;\n// }\n// var icons = {\n// \"usd::usdgeom::mesh::points\": \"deployed_code\",\n// \"usd::usdgeom::basiscurves::points\": \"line_curve\",\n// \"usd::usdshade::material::outputs::surface.connect\": \"line_style\",\n// \"pcd::base64\": \"grain\",\n// \"points::array::positions\": \"grain\",\n// \"points::base64::positions\": \"grain\",\n// };\n// function handleClick(prim, pathMapping, root) {\n// const container = document.querySelector(\".attributes .table\");\n// if (container !== null) {\n// container.innerHTML = \"\";\n// const table = document.createElement(\"table\");\n// table.setAttribute(\"border\", \"0\");\n// const entries = [\n// [\"name\", prim.name],\n// ...Object.entries(prim.attributes).filter(([k, _]) => !k.startsWith(\"__internal_\")),\n// ];\n// const format = (value) => {\n// if (Array.isArray(value)) {\n// let N = document.createElement(\"span\");\n// N.appendChild(document.createTextNode(\"(\"));\n// let first = true;\n// for (let n of value.map(format)) {\n// if (!first) {\n// N.appendChild(document.createTextNode(\",\"));\n// }\n// N.appendChild(n);\n// first = false;\n// }\n// N.appendChild(document.createTextNode(\")\"));\n// return N;\n// } else if (typeof value === \"object\") {\n// const ks = Object.keys(value);\n// if (ks.length == 1 && ks[0] === \"ref\" && pathMapping[value.ref] && pathMapping[value.ref].length == 1) {\n// let a = document.createElement(\"a\");\n// let resolvedRefAsPath = pathMapping[value.ref][0];\n// a.setAttribute(\"href\", \"#\");\n// a.textContent = resolvedRefAsPath;\n// a.onclick = () => {\n// let prim2 = null;\n// const recurse = (n) => {\n// if (n.name === resolvedRefAsPath) {\n// prim2 = n;\n// } else {\n// (n.children || []).forEach(recurse);\n// }\n// };\n// recurse(root);\n// if (prim2) {\n// handleClick(prim2, pathMapping, root);\n// }\n// };\n// return a;\n// } else {\n// return document.createTextNode(JSON.stringify(value));\n// }\n// } else {\n// return document.createTextNode(value);\n// }\n// };\n// entries.forEach(([key, value]) => {\n// const tr = document.createElement(\"tr\");\n// const tdKey = document.createElement(\"td\");\n// tdKey.textContent = encodeHtmlEntities(key);\n// const tdValue = document.createElement(\"td\");\n// tdValue.appendChild(format(value));\n// tr.appendChild(tdKey);\n// tr.appendChild(tdValue);\n// table.appendChild(tr);\n// });\n// container.appendChild(table);\n// }\n// }\n// function buildDomTree(prim, node, pathMapping, root = null) {\n// const elem = document.createElement(\"div\");\n// let span;\n// elem.appendChild(document.createTextNode(prim.name ? prim.name.split(\"/\").reverse()[0] : \"root\"));\n// elem.appendChild((span = document.createElement(\"span\")));\n// Object.entries(icons).forEach(([k, v]) => (span.innerText += (prim.attributes || {})[k] ? v : \" \"));\n// span.className = \"material-symbols-outlined\";\n// domMap[prim.name] = elem;\n// elem.dataset.path = prim.name;\n// elem.onclick = (evt) => {\n// handleClick(prim, pathMapping, root || prim);\n// selectPath(prim.name);\n// evt.stopPropagation();\n// };\n// node.appendChild(elem);\n// (prim.children || []).forEach((p) => buildDomTree(p, elem, pathMapping, root || prim));\n// }\nasync function composeAndRender() {\n if (scene) {\n scene.children = [];\n }\n objectMap = {};\n // domMap = {};\n primMap = {};\n // currentPathMapping = null;\n // rootPrim = null;\n // document.querySelector(\".tree\").innerHTML = \"\";\n if (datas.length === 0) {\n return;\n }\n let tree = null;\n let dataArray = datas.map((arr) => arr[1]);\n tree = await compose3(dataArray);\n if (!tree) {\n console.error(\"No result from composition\");\n return;\n }\n if (!scene) {\n init();\n }\n let pathMapping = {};\n traverseTree([tree], scene, pathMapping);\n // currentPathMapping = pathMapping;\n // rootPrim = tree;\n if (autoCamera) {\n const boundingBox = new THREE.Box3();\n boundingBox.setFromObject(scene);\n if (!boundingBox.isEmpty()) {\n let avg = boundingBox.min.clone().add(boundingBox.max).multiplyScalar(0.5);\n let ext = boundingBox.max.clone().sub(boundingBox.min).length();\n camera.position.copy(avg.clone().add(new THREE.Vector3(1, 1, 1).normalize().multiplyScalar(ext)));\n camera.far = ext * 3;\n camera.updateProjectionMatrix();\n // controls.target.copy(avg);\n // controls.update();\n autoCamera = false;\n }\n }\n // buildDomTree(tree, document.querySelector(\".tree\"), pathMapping);\n // animate();\n}\n// function createLayerDom() {\n// document.querySelector(\".layers div\").innerHTML = \"\";\n// datas.forEach(([name, _], index) => {\n// const elem = document.createElement(\"div\");\n// elem.appendChild(document.createTextNode(name));\n// [\"\\u25B3\", \"\\u25BD\", \"\\xD7\"].reverse().forEach((lbl, cmd) => {\n// const btn = document.createElement(\"span\");\n// btn.onclick = (evt) => {\n// evt.stopPropagation();\n// if (cmd === 2) {\n// if (index > 0) {\n// [datas[index], datas[index - 1]] = [datas[index - 1], datas[index]];\n// }\n// } else if (cmd === 1) {\n// if (index < datas.length - 1) {\n// [datas[index], datas[index + 1]] = [datas[index + 1], datas[index]];\n// }\n// } else if (cmd === 0) {\n// datas.splice(index, 1);\n// }\n// composeAndRender();\n// createLayerDom();\n// };\n// btn.appendChild(document.createTextNode(lbl));\n// elem.appendChild(btn);\n// });\n// document.querySelector(\".layers div\").appendChild(elem);\n// });\n// }\n// async function addModel(name, m) {\n// datas.push([name, m]);\n// createLayerDom();\n// await composeAndRender();\n// }\n// function animate() {\n// requestAnimationFrame(animate);\n// controls.update();\n// renderer.render(scene, camera);\n// }\n// export { composeAndRender, addModel as default };\n\nexport async function parse(m, name) {\n datas.push([name, m]);\n await composeAndRender();\n return scene;\n}\nexport function clear() {\n scene = undefined;\n datas.length = 0;\n autoCamera = true;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { FileLoader, Loader, Scene } from \"three\";\nimport { parse, clear } from \"./render.js\";\n\nclass IFCXLoader extends Loader<Scene> {\n override load(\n url: string,\n onLoad: (data: Scene) => void,\n onProgress?: (event: ProgressEvent) => void,\n onError?: (err: unknown) => void\n ) {\n const manager = this.manager;\n\n manager.itemStart(url);\n\n const _onLoad = (scene: Scene) => {\n onLoad(scene);\n manager.itemEnd(url);\n };\n\n const _onError = (e: unknown) => {\n if (onError) onError(e);\n else console.error(e);\n manager.itemError(url);\n manager.itemEnd(url);\n };\n\n const loader = new FileLoader(this.manager);\n\n loader.setPath(this.path);\n loader.setResponseType(\"json\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n\n loader.load(url, (json) => this.parse(json, _onLoad, _onError), onProgress, onError);\n }\n\n parse(json: any, onLoad: (scene: Scene) => void, onError: (err: unknown) => void) {\n parse(json)\n .then((scene: Scene) => onLoad(scene))\n .catch((err: unknown) => onError(err))\n .finally(() => clear());\n }\n}\n\nexport { IFCXLoader };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { GLTFLoadingManager, GLTFLoadParams, Loader, ModelImpl, Viewer } from \"@inweb/viewer-three\";\nimport { IFCXLoader } from \"./IFCXLoader\";\n\nexport class IFCXFileLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n (typeof file === \"string\" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&\n /(ifcx)$/i.test(format)\n );\n }\n\n override async load(file: any, format?: string, params?: GLTFLoadParams): Promise<this> {\n const manager = new GLTFLoadingManager(file, params);\n\n const loader = new IFCXLoader(manager);\n loader.setPath(manager.path);\n loader.setCrossOrigin(params.crossOrigin || loader.crossOrigin);\n loader.setWithCredentials(params.withCredentials || loader.withCredentials);\n\n const progress = (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const scene = await loader.loadAsync(manager.fileURL, progress);\n if (!this.viewer.scene) return this;\n\n let handle = 0;\n scene.traverse((object) => {\n object.userData = { handle, ...object.userData };\n handle++;\n });\n\n const modelImpl = new ModelImpl(scene);\n modelImpl.loader = this;\n modelImpl.viewer = this.viewer;\n\n this.viewer.scene.add(scene);\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: scene, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Loader, ModelImpl, Viewer } from \"@inweb/viewer-three\";\nimport { parse, clear } from \"./render.js\";\n\nexport class IFCXCloudLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.type === \"string\" &&\n typeof file.download === \"function\" &&\n /.ifcx$/i.test(file.type)\n );\n }\n\n override async load(file: any): Promise<this> {\n const progress = (progress: number) => {\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const arrayBuffer = await file.download(progress, this.abortController.signal);\n if (!this.viewer.scene) return this;\n\n const textDecoder = new TextDecoder();\n const json = JSON.parse(textDecoder.decode(arrayBuffer));\n\n const scene = await parse(json);\n clear();\n\n let handle = 0;\n scene.traverse((object: any) => {\n object.userData = { handle, ...object.userData };\n handle++;\n });\n\n const modelImpl = new ModelImpl(scene);\n modelImpl.loader = this;\n modelImpl.viewer = this.viewer;\n\n this.viewer.scene.add(scene);\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: scene, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { loaders } from \"@inweb/viewer-three\";\n\nimport { IFCXFileLoader } from \"./IFCXFileLoader\";\nimport { IFCXCloudLoader } from \"./IFCXCloudLoader\";\n\nloaders.registerLoader(\"ifcx-file\", (viewer: any) => new IFCXFileLoader(viewer));\nloaders.registerLoader(\"ifcx-cloud\", (viewer: any) => new IFCXCloudLoader(viewer));\n"],"names":["Loader","FileLoader","Color","SRGBColorSpace","BufferGeometry","Float32BufferAttribute","Int32BufferAttribute","PointsMaterial","Points","Box3","BufferAttribute","Euler","Group","Line","LineBasicMaterial","Matrix4","Mesh","MeshLambertMaterial","MeshStandardMaterial","PerspectiveCamera","Scene","Vector3","GLTFLoadingManager","ModelImpl","loaders"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"IFCXLoader.js","sources":["../../../../../node_modules/three/examples/jsm/loaders/PCDLoader.js","../../../plugins/loaders/IFCX/render.js","../../../plugins/loaders/IFCX/IFCXLoader.ts","../../../plugins/loaders/IFCX/IFCXFileLoader.ts","../../../plugins/loaders/IFCX/IFCXCloudLoader.ts","../../../plugins/loaders/IFCX/index.ts"],"sourcesContent":["import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tInt32BufferAttribute,\n\tLoader,\n\tPoints,\n\tPointsMaterial,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * A loader for the Point Cloud Data (PCD) format.\n *\n * PCDLoader supports ASCII and (compressed) binary files as well as the following PCD fields:\n * - x y z\n * - rgb\n * - normal_x normal_y normal_z\n * - intensity\n * - label\n *\n * ```js\n * const loader = new PCDLoader();\n *\n * const points = await loader.loadAsync( './models/pcd/binary/Zaghetto.pcd' );\n * points.geometry.center(); // optional\n * points.geometry.rotateX( Math.PI ); // optional\n * scene.add( points );\n * ```\n *\n * @augments Loader\n * @three_import import { PCDLoader } from 'three/addons/loaders/PCDLoader.js';\n */\nclass PCDLoader extends Loader {\n\n\t/**\n\t * Constructs a new PCD loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * Whether to use little Endian or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.littleEndian = true;\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded PCD asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Points)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Get dataview value by field type and size.\n\t *\n\t * @param {DataView} dataview - The DataView to read from.\n\t * @param {number} offset - The offset to start reading from.\n\t * @param {'F' | 'U' | 'I'} type - Field type.\n\t * @param {number} size - Field size.\n\t * @returns {number} Field value.\n\t */\n\t_getDataView( dataview, offset, type, size ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'F': {\n\n\t\t\t\tif ( size === 8 ) {\n\n\t\t\t\t\treturn dataview.getFloat64( offset, this.littleEndian );\n\n\t\t\t\t}\n\n\t\t\t\treturn dataview.getFloat32( offset, this.littleEndian );\n\n\t\t\t}\n\n\t\t\tcase 'I': {\n\n\t\t\t\tif ( size === 1 ) {\n\n\t\t\t\t\treturn dataview.getInt8( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( size === 2 ) {\n\n\t\t\t\t\treturn dataview.getInt16( offset, this.littleEndian );\n\n\t\t\t\t}\n\n\t\t\t\treturn dataview.getInt32( offset, this.littleEndian );\n\n\t\t\t}\n\n\t\t\tcase 'U': {\n\n\t\t\t\tif ( size === 1 ) {\n\n\t\t\t\t\treturn dataview.getUint8( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( size === 2 ) {\n\n\t\t\t\t\treturn dataview.getUint16( offset, this.littleEndian );\n\n\t\t\t\t}\n\n\t\t\t\treturn dataview.getUint32( offset, this.littleEndian );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Parses the given PCD data and returns a point cloud.\n\t *\n\t * @param {ArrayBuffer} data - The raw PCD data as an array buffer.\n\t * @return {Points} The parsed point cloud.\n\t */\n\tparse( data ) {\n\n\t\t// from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n\t\tfunction decompressLZF( inData, outLength ) {\n\n\t\t\tconst inLength = inData.length;\n\t\t\tconst outData = new Uint8Array( outLength );\n\t\t\tlet inPtr = 0;\n\t\t\tlet outPtr = 0;\n\t\t\tlet ctrl;\n\t\t\tlet len;\n\t\t\tlet ref;\n\t\t\tdo {\n\n\t\t\t\tctrl = inData[ inPtr ++ ];\n\t\t\t\tif ( ctrl < ( 1 << 5 ) ) {\n\n\t\t\t\t\tctrl ++;\n\t\t\t\t\tif ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = inData[ inPtr ++ ];\n\n\t\t\t\t\t} while ( -- ctrl );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlen = ctrl >> 5;\n\t\t\t\t\tref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;\n\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( len === 7 ) {\n\n\t\t\t\t\t\tlen += inData[ inPtr ++ ];\n\t\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tref -= inData[ inPtr ++ ];\n\t\t\t\t\tif ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( ref < 0 ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = outData[ ref ++ ];\n\n\t\t\t\t\t} while ( -- len + 2 );\n\n\t\t\t\t}\n\n\t\t\t} while ( inPtr < inLength );\n\n\t\t\treturn outData;\n\n\t\t}\n\n\t\tfunction parseHeader( binaryData ) {\n\n\t\t\tconst PCDheader = {};\n\n\t\t\tconst buffer = new Uint8Array( binaryData );\n\n\t\t\tlet data = '', line = '', i = 0, end = false;\n\n\t\t\tconst max = buffer.length;\n\n\t\t\twhile ( i < max && end === false ) {\n\n\t\t\t\tconst char = String.fromCharCode( buffer[ i ++ ] );\n\n\t\t\t\tif ( char === '\\n' || char === '\\r' ) {\n\n\t\t\t\t\tif ( line.trim().toLowerCase().startsWith( 'data' ) ) {\n\n\t\t\t\t\t\tend = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tline = '';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tline += char;\n\n\t\t\t\t}\n\n\t\t\t\tdata += char;\n\n\t\t\t}\n\n\t\t\tconst result1 = data.search( /[\\r\\n]DATA\\s(\\S*)\\s/i );\n\t\t\tconst result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec( data.slice( result1 - 1 ) );\n\n\t\t\tPCDheader.data = result2[ 1 ];\n\t\t\tPCDheader.headerLen = result2[ 0 ].length + result1;\n\t\t\tPCDheader.str = data.slice( 0, PCDheader.headerLen );\n\n\t\t\t// remove comments\n\n\t\t\tPCDheader.str = PCDheader.str.replace( /#.*/gi, '' );\n\n\t\t\t// parse\n\n\t\t\tPCDheader.version = /^VERSION (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.fields = /^FIELDS (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.size = /^SIZE (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.type = /^TYPE (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.count = /^COUNT (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.width = /^WIDTH (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.height = /^HEIGHT (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.viewpoint = /^VIEWPOINT (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.points = /^POINTS (.*)/im.exec( PCDheader.str );\n\n\t\t\t// evaluate\n\n\t\t\tif ( PCDheader.version !== null )\n\t\t\t\tPCDheader.version = parseFloat( PCDheader.version[ 1 ] );\n\n\t\t\tPCDheader.fields = ( PCDheader.fields !== null ) ? PCDheader.fields[ 1 ].split( ' ' ) : [];\n\n\t\t\tif ( PCDheader.type !== null )\n\t\t\t\tPCDheader.type = PCDheader.type[ 1 ].split( ' ' );\n\n\t\t\tif ( PCDheader.width !== null )\n\t\t\t\tPCDheader.width = parseInt( PCDheader.width[ 1 ] );\n\n\t\t\tif ( PCDheader.height !== null )\n\t\t\t\tPCDheader.height = parseInt( PCDheader.height[ 1 ] );\n\n\t\t\tif ( PCDheader.viewpoint !== null )\n\t\t\t\tPCDheader.viewpoint = PCDheader.viewpoint[ 1 ];\n\n\t\t\tif ( PCDheader.points !== null )\n\t\t\t\tPCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );\n\n\t\t\tif ( PCDheader.points === null )\n\t\t\t\tPCDheader.points = PCDheader.width * PCDheader.height;\n\n\t\t\tif ( PCDheader.size !== null ) {\n\n\t\t\t\tPCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( PCDheader.count !== null ) {\n\n\t\t\t\tPCDheader.count = PCDheader.count[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tPCDheader.count = [];\n\n\t\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tPCDheader.count.push( 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tPCDheader.offset = {};\n\n\t\t\tlet sizeSum = 0;\n\n\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = i;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = sizeSum;\n\t\t\t\t\tsizeSum += PCDheader.size[ i ] * PCDheader.count[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// for binary only\n\n\t\t\tPCDheader.rowSize = sizeSum;\n\n\t\t\treturn PCDheader;\n\n\t\t}\n\n\t\t// parse header\n\n\t\tconst PCDheader = parseHeader( data );\n\n\t\t// parse data\n\n\t\tconst position = [];\n\t\tconst normal = [];\n\t\tconst color = [];\n\t\tconst intensity = [];\n\t\tconst label = [];\n\n\t\tconst c = new Color();\n\n\t\t// ascii\n\n\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\tconst offset = PCDheader.offset;\n\t\t\tconst textData = new TextDecoder().decode( data );\n\t\t\tconst pcdData = textData.slice( PCDheader.headerLen );\n\t\t\tconst lines = pcdData.split( '\\n' );\n\n\t\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\t\tif ( lines[ i ] === '' ) continue;\n\n\t\t\t\tconst line = lines[ i ].split( ' ' );\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( parseFloat( line[ offset.x ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.y ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgb_field_index = PCDheader.fields.findIndex( ( field ) => field === 'rgb' );\n\t\t\t\t\tconst rgb_type = PCDheader.type[ rgb_field_index ];\n\n\t\t\t\t\tconst float = parseFloat( line[ offset.rgb ] );\n\t\t\t\t\tlet rgb = float;\n\n\t\t\t\t\tif ( rgb_type === 'F' ) {\n\n\t\t\t\t\t\t// treat float values as int\n\t\t\t\t\t\t// https://github.com/daavoo/pyntcloud/pull/204/commits/7b4205e64d5ed09abe708b2e91b615690c24d518\n\t\t\t\t\t\tconst farr = new Float32Array( 1 );\n\t\t\t\t\t\tfarr[ 0 ] = float;\n\t\t\t\t\t\trgb = new Int32Array( farr.buffer )[ 0 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst r = ( ( rgb >> 16 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst g = ( ( rgb >> 8 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst b = ( ( rgb >> 0 ) & 0x0000ff ) / 255;\n\n\t\t\t\t\tc.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_x ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_y ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tintensity.push( parseFloat( line[ offset.intensity ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( parseInt( line[ offset.label ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary-compressed\n\n\t\t// normally data in PCD files are organized as array of structures: XYZRGBXYZRGB\n\t\t// binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB\n\t\t// that requires a totally different parsing approach compared to non-compressed data\n\n\t\tif ( PCDheader.data === 'binary_compressed' ) {\n\n\t\t\tconst sizes = new Uint32Array( data.slice( PCDheader.headerLen, PCDheader.headerLen + 8 ) );\n\t\t\tconst compressedSize = sizes[ 0 ];\n\t\t\tconst decompressedSize = sizes[ 1 ];\n\t\t\tconst decompressed = decompressLZF( new Uint8Array( data, PCDheader.headerLen + 8, compressedSize ), decompressedSize );\n\t\t\tconst dataview = new DataView( decompressed.buffer );\n\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0; i < PCDheader.points; i ++ ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'z' );\n\t\t\t\t\tposition.push( this._getDataView( dataview, ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgbIndex = PCDheader.fields.indexOf( 'rgb' );\n\n\t\t\t\t\tconst r = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 0 ) / 255.0;\n\n\t\t\t\t\tc.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'normal_x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'normal_y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'normal_z' );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tconst intensityIndex = PCDheader.fields.indexOf( 'intensity' );\n\t\t\t\t\tintensity.push( this._getDataView( dataview, ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, PCDheader.type[ intensityIndex ], PCDheader.size[ intensityIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tconst labelIndex = PCDheader.fields.indexOf( 'label' );\n\t\t\t\t\tlabel.push( dataview.getInt32( ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary\n\n\t\tif ( PCDheader.data === 'binary' ) {\n\n\t\t\tconst dataview = new DataView( data, PCDheader.headerLen );\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0, row = 0; i < PCDheader.points; i ++, row += PCDheader.rowSize ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'z' );\n\t\t\t\t\tposition.push( this._getDataView( dataview, row + offset.x, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, row + offset.y, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, row + offset.z, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst r = dataview.getUint8( row + offset.rgb + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( row + offset.rgb + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( row + offset.rgb + 0 ) / 255.0;\n\n\t\t\t\t\tc.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'normal_x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'normal_y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'normal_z' );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, row + offset.normal_x, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, row + offset.normal_y, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, row + offset.normal_z, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tconst intensityIndex = PCDheader.fields.indexOf( 'intensity' );\n\t\t\t\t\tintensity.push( this._getDataView( dataview, row + offset.intensity, PCDheader.type[ intensityIndex ], PCDheader.size[ intensityIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( dataview.getInt32( row + offset.label, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( position.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( normal.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( color.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\t\tif ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new Float32BufferAttribute( intensity, 1 ) );\n\t\tif ( label.length > 0 ) geometry.setAttribute( 'label', new Int32BufferAttribute( label, 1 ) );\n\n\t\tgeometry.computeBoundingSphere();\n\n\t\t// build material\n\n\t\tconst material = new PointsMaterial( { size: 0.005 } );\n\n\t\tif ( color.length > 0 ) {\n\n\t\t\tmaterial.vertexColors = true;\n\n\t\t}\n\n\t\t// build point cloud\n\n\t\treturn new Points( geometry, material );\n\n\t}\n\n}\n\nexport { PCDLoader };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\n// Repository: https://github.com/buildingSMART/IFC5-development\n// Original File: docs/viewer/render.mjs\n// Commit SHA-1: 7a2b39e56324d892b78b476944ec0e557d50b236\n// Commit Date: 30.07.2025 08:20:14\n\n// (C) buildingSMART International\n// published under MIT license\n\n/* eslint-disable lines-between-class-members */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable prefer-const */\n/* eslint-disable no-useless-catch */\n\nimport {\n Box3,\n BufferAttribute,\n BufferGeometry,\n Color,\n Euler,\n Float32BufferAttribute,\n Group,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshLambertMaterial,\n MeshStandardMaterial,\n Points,\n PointsMaterial,\n PerspectiveCamera,\n Scene,\n Vector3,\n} from \"three\";\n\nconst THREE = {\n Box3,\n BufferAttribute,\n BufferGeometry,\n Color,\n Euler,\n Float32BufferAttribute,\n Group,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshLambertMaterial,\n MeshStandardMaterial,\n Points,\n PointsMaterial,\n PerspectiveCamera,\n Scene,\n Vector3,\n};\n\n// ifcx-core/layers/layer-providers.ts\nvar StackedLayerProvider = class {\n providers;\n constructor(providers) {\n this.providers = providers;\n }\n async GetLayerByURI(uri) {\n let errorStack = [];\n for (let provider of this.providers) {\n let layer = await provider.GetLayerByURI(uri);\n if (!(layer instanceof Error)) {\n return layer;\n } else {\n errorStack.push(layer);\n }\n }\n return new Error(JSON.stringify(errorStack));\n }\n};\nvar InMemoryLayerProvider = class {\n layers;\n constructor() {\n this.layers = /* @__PURE__ */ new Map();\n }\n GetLayerByURI(uri) {\n if (!this.layers.has(uri)) {\n return new Error(`File with uri \"${uri}\" not found`);\n }\n return Promise.resolve(this.layers.get(uri));\n }\n add(file) {\n if (this.layers.has(file.header.id)) {\n throw new Error(`Inserting file with duplicate ID \"${file.header.id}\"`);\n }\n this.layers.set(file.header.id, file);\n return this;\n }\n AddAll(files) {\n files.forEach((f) => this.add(f));\n return this;\n }\n};\n\n// ifcx-core/util/log.ts\nvar LOG_ENABLED = true;\nfunction log(bla) {\n if (LOG_ENABLED) {\n console.log(`${JSON.stringify(arguments)}`);\n }\n}\n\n// ifcx-core/layers/fetch-layer-provider.ts\nvar FetchLayerProvider = class {\n layers;\n constructor() {\n this.layers = /* @__PURE__ */ new Map();\n }\n async FetchJson(url) {\n let result = await fetch(url);\n if (!result.ok) {\n return new Error(`Failed to fetch ${url}: ${result.status}`);\n }\n try {\n return await result.json();\n } catch (e) {\n log(url);\n return new Error(`Failed to parse json at ${url}: ${e}`);\n }\n }\n async GetLayerByURI(uri) {\n if (!this.layers.has(uri)) {\n let fetched = await this.FetchJson(uri);\n if (fetched instanceof Error) {\n return new Error(`File with id \"${uri}\" not found`);\n }\n let file = fetched;\n this.layers.set(uri, file);\n return file;\n }\n return this.layers.get(uri);\n }\n};\n\n// ifcx-core/util/mm.ts\nfunction MMSet(map, key, value) {\n if (map.has(key)) {\n map.get(key)?.push(value);\n } else {\n map.set(key, [value]);\n }\n}\n\n// ifcx-core/composition/cycles.ts\nvar CycleError = class extends Error {};\nfunction FindRootsOrCycles(nodes) {\n let dependencies = /* @__PURE__ */ new Map();\n let dependents = /* @__PURE__ */ new Map();\n nodes.forEach((node, path) => {\n Object.keys(node.inherits).forEach((inheritName) => {\n MMSet(dependencies, path, node.inherits[inheritName]);\n MMSet(dependents, node.inherits[inheritName], path);\n });\n Object.keys(node.children).forEach((childName) => {\n MMSet(dependencies, path, node.children[childName]);\n MMSet(dependents, node.children[childName], path);\n });\n });\n let paths = [...nodes.keys()];\n let perm = {};\n let temp = {};\n function visit(path) {\n if (perm[path]) return;\n if (temp[path]) throw new Error(`CYCLE!`);\n temp[path] = true;\n let deps = dependencies.get(path);\n if (deps) {\n deps.forEach((dep) => visit(dep));\n }\n perm[path] = true;\n }\n let roots = /* @__PURE__ */ new Set();\n try {\n paths.forEach((path) => {\n if (!dependents.has(path) && path.indexOf(\"/\") === -1) {\n roots.add(path);\n }\n visit(path);\n });\n } catch (e) {\n return null;\n }\n return roots;\n}\n\n// ifcx-core/composition/path.ts\nfunction GetHead(path) {\n return path.split(\"/\")[0];\n}\nfunction GetTail(path) {\n let parts = path.split(\"/\");\n parts.shift();\n return parts.join(\"/\");\n}\n\n// ifcx-core/composition/node.ts\nfunction MakePostCompositionNode(node) {\n return {\n node,\n children: /* @__PURE__ */ new Map(),\n attributes: /* @__PURE__ */ new Map(),\n };\n}\nfunction GetChildNodeWithPath(node, path) {\n if (path === \"\") return node;\n let parts = path.split(\"/\");\n let child = node.children.get(parts[0]);\n if (child) {\n if (parts.length === 1) {\n return child;\n }\n return GetChildNodeWithPath(child, GetTail(path));\n } else {\n return null;\n }\n}\n\n// ifcx-core/composition/compose.ts\nfunction FlattenPathToPreCompositionNode(path, inputNodes) {\n let compositionNode = {\n path,\n children: {},\n inherits: {},\n attributes: {},\n };\n inputNodes.forEach((node) => {\n Object.keys(node.children).forEach((childName) => {\n compositionNode.children[childName] = node.children[childName];\n });\n Object.keys(node.inherits).forEach((inheritName) => {\n let ih = node.inherits[inheritName];\n if (ih === null) {\n delete compositionNode.inherits[inheritName];\n } else {\n compositionNode.inherits[inheritName] = ih;\n }\n });\n Object.keys(node.attributes).forEach((attrName) => {\n compositionNode.attributes[attrName] = node.attributes[attrName];\n });\n });\n return compositionNode;\n}\nfunction FlattenCompositionInput(input) {\n let compositionNodes = /* @__PURE__ */ new Map();\n for (let [path, inputNodes] of input) {\n compositionNodes.set(path, FlattenPathToPreCompositionNode(path, inputNodes));\n }\n return compositionNodes;\n}\nfunction ExpandFirstRootInInput(nodes) {\n let roots = FindRootsOrCycles(nodes);\n if (!roots) {\n throw new CycleError();\n }\n return ComposeNodeFromPath([...roots.values()][0], nodes);\n}\nfunction CreateArtificialRoot(nodes) {\n let roots = FindRootsOrCycles(nodes);\n if (!roots) {\n throw new CycleError();\n }\n let pseudoRoot = {\n node: \"\",\n attributes: /* @__PURE__ */ new Map(),\n children: /* @__PURE__ */ new Map(),\n };\n roots.forEach((root) => {\n pseudoRoot.children.set(root, ComposeNodeFromPath(root, nodes));\n });\n return pseudoRoot;\n}\nfunction ComposeNodeFromPath(path, preCompositionNodes) {\n return ComposeNode(path, MakePostCompositionNode(path), preCompositionNodes);\n}\nfunction ComposeNode(path, postCompositionNode, preCompositionNodes) {\n let preCompositionNode = preCompositionNodes.get(path);\n if (preCompositionNode) {\n AddDataFromPreComposition(preCompositionNode, postCompositionNode, preCompositionNodes);\n }\n postCompositionNode.children.forEach((child, name) => {\n ComposeNode(`${path}/${name}`, child, preCompositionNodes);\n });\n return postCompositionNode;\n}\nfunction AddDataFromPreComposition(input, node, nodes) {\n Object.values(input.inherits).forEach((inheritPath) => {\n let classNode = ComposeNodeFromPath(GetHead(inheritPath), nodes);\n let subnode = GetChildNodeWithPath(classNode, GetTail(inheritPath));\n if (!subnode) throw new Error(`Unknown node ${inheritPath}`);\n subnode.children.forEach((child, childName) => {\n node.children.set(childName, child);\n });\n for (let [attrID, attr] of subnode.attributes) {\n node.attributes.set(attrID, attr);\n }\n });\n Object.entries(input.children).forEach(([childName, child]) => {\n if (child !== null) {\n let classNode = ComposeNodeFromPath(GetHead(child), nodes);\n let subnode = GetChildNodeWithPath(classNode, GetTail(child));\n if (!subnode) throw new Error(`Unknown node ${child}`);\n node.children.set(childName, subnode);\n } else {\n node.children.delete(childName);\n }\n });\n Object.entries(input.attributes).forEach(([attrID, attr]) => {\n node.attributes.set(attrID, attr);\n });\n}\n\n// ifcx-core/schema/schema-validation.ts\nvar SchemaValidationError = class extends Error {};\nfunction ValidateAttributeValue(desc, value, path, schemas) {\n if (desc.optional && value === void 0) {\n return;\n }\n if (desc.inherits) {\n desc.inherits.forEach((inheritedSchemaID) => {\n let inheritedSchema = schemas[inheritedSchemaID];\n if (!inheritedSchema) {\n throw new SchemaValidationError(`Unknown inherited schema id \"${desc.inherits}\"`);\n }\n ValidateAttributeValue(inheritedSchema.value, value, path, schemas);\n });\n }\n if (desc.dataType === \"Boolean\") {\n if (typeof value !== \"boolean\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type boolean`);\n }\n } else if (desc.dataType === \"String\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n } else if (desc.dataType === \"DateTime\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type date`);\n }\n } else if (desc.dataType === \"Enum\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n let found = desc.enumRestrictions.options.filter((option) => option === value).length === 1;\n if (!found) {\n throw new SchemaValidationError(`Expected \"${value}\" to be one of [${desc.enumRestrictions.options.join(\",\")}]`);\n }\n } else if (desc.dataType === \"Integer\") {\n if (typeof value !== \"number\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type int`);\n }\n } else if (desc.dataType === \"Real\") {\n if (typeof value !== \"number\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type real`);\n }\n } else if (desc.dataType === \"Reference\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n } else if (desc.dataType === \"Object\") {\n if (typeof value !== \"object\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type object`);\n }\n if (desc.objectRestrictions) {\n Object.keys(desc.objectRestrictions.values).forEach((key) => {\n let optional = desc.objectRestrictions.values[key].optional;\n let hasOwn = Object.hasOwn(value, key);\n if (optional && !hasOwn) return;\n if (!hasOwn) {\n throw new SchemaValidationError(`Expected \"${value}\" to have key ${key}`);\n }\n ValidateAttributeValue(desc.objectRestrictions.values[key], value[key], path + \".\" + key, schemas);\n });\n }\n } else if (desc.dataType === \"Array\") {\n if (!Array.isArray(value)) {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type array`);\n }\n value.forEach((entry) => {\n ValidateAttributeValue(desc.arrayRestrictions.value, entry, path + \".<array>.\", schemas);\n });\n } else {\n throw new SchemaValidationError(`Unexpected datatype ${desc.dataType}`);\n }\n}\nfunction Validate(schemas, inputNodes) {\n inputNodes.forEach((node) => {\n Object.keys(node.attributes)\n .filter((v) => !v.startsWith(\"__internal\"))\n .forEach((schemaID) => {\n if (!schemas[schemaID]) {\n throw new SchemaValidationError(`Missing schema \"${schemaID}\" referenced by [\"${node.path}\"].attributes`);\n }\n let schema = schemas[schemaID];\n let value = node.attributes[schemaID];\n try {\n ValidateAttributeValue(schema.value, value, \"\", schemas);\n } catch (e) {\n if (e instanceof SchemaValidationError) {\n throw new SchemaValidationError(\n `Error validating [\"${node.path}\"].attributes[\"${schemaID}\"]: ${e.message}`\n );\n } else {\n throw e;\n }\n }\n });\n });\n}\n\n// ifcx-core/workflows.ts\nfunction ToInputNodes(data) {\n let inputNodes = /* @__PURE__ */ new Map();\n data.forEach((ifcxNode) => {\n let node = {\n path: ifcxNode.path,\n children: ifcxNode.children ? ifcxNode.children : {},\n inherits: ifcxNode.inherits ? ifcxNode.inherits : {},\n attributes: ifcxNode.attributes ? ifcxNode.attributes : {},\n };\n MMSet(inputNodes, node.path, node);\n });\n return inputNodes;\n}\nfunction LoadIfcxFile(file, checkSchemas = true, createArtificialRoot = true) {\n let inputNodes = ToInputNodes(file.data);\n let compositionNodes = FlattenCompositionInput(inputNodes);\n try {\n if (checkSchemas) {\n Validate(file.schemas, compositionNodes);\n }\n } catch (e) {\n throw e;\n }\n if (createArtificialRoot) {\n return CreateArtificialRoot(compositionNodes);\n } else {\n return ExpandFirstRootInInput(compositionNodes);\n }\n}\nfunction Federate(files) {\n if (files.length === 0) {\n throw new Error(`Trying to federate empty set of files`);\n }\n let result = {\n header: files[0].header,\n imports: [],\n schemas: {},\n data: [],\n };\n files.forEach((file) => {\n Object.keys(file.schemas).forEach((schemaID) => (result.schemas[schemaID] = file.schemas[schemaID]));\n });\n files.forEach((file) => {\n file.data.forEach((node) => result.data.push(node));\n });\n return Prune(result);\n}\nfunction Collapse(nodes, deleteEmpty = false) {\n let result = {\n path: nodes[0].path,\n children: {},\n inherits: {},\n attributes: {},\n };\n nodes.forEach((node) => {\n Object.keys(node.children).forEach((name) => {\n result.children[name] = node.children[name];\n });\n Object.keys(node.inherits).forEach((name) => {\n result.inherits[name] = node.inherits[name];\n });\n Object.keys(node.attributes).forEach((name) => {\n result.attributes[name] = node.attributes[name];\n });\n });\n if (deleteEmpty) {\n let empty = true;\n Object.keys(result.children).forEach((name) => {\n if (result.children[name] !== null) empty = false;\n });\n Object.keys(result.inherits).forEach((name) => {\n if (result.inherits[name] !== null) empty = false;\n });\n Object.keys(result.attributes).forEach((name) => {\n if (result.attributes[name] !== null) empty = false;\n });\n if (empty) return null;\n }\n return result;\n}\nfunction Prune(file, deleteEmpty = false) {\n let result = {\n header: file.header,\n imports: [],\n schemas: file.schemas,\n data: [],\n };\n let inputNodes = ToInputNodes(file.data);\n inputNodes.forEach((nodes) => {\n let collapsed = Collapse(nodes, deleteEmpty);\n if (collapsed)\n result.data.push({\n path: collapsed.path,\n children: collapsed.children,\n inherits: collapsed.inherits,\n attributes: collapsed.attributes,\n });\n });\n return result;\n}\n\n// ifcx-core/layers/layer-stack.ts\nvar IfcxLayerStack = class {\n // main layer at 0\n layers;\n tree;\n schemas;\n federated;\n constructor(layers) {\n this.layers = layers;\n this.Compose();\n }\n GetLayerIds() {\n return this.layers.map((l) => l.header.id);\n }\n Compose() {\n this.federated = Federate(this.layers);\n this.schemas = this.federated.schemas;\n this.tree = LoadIfcxFile(this.federated);\n }\n GetFullTree() {\n this.Compose();\n return this.tree;\n }\n GetFederatedLayer() {\n return this.federated;\n }\n GetSchemas() {\n return this.schemas;\n }\n};\nvar IfcxLayerStackBuilder = class {\n provider;\n mainLayerId = null;\n constructor(provider) {\n this.provider = provider;\n }\n FromId(id) {\n this.mainLayerId = id;\n return this;\n }\n async Build() {\n if (!this.mainLayerId) throw new Error(`no main layer ID specified`);\n let layers = await this.BuildLayerSet(this.mainLayerId);\n if (layers instanceof Error) {\n return layers;\n }\n try {\n return new IfcxLayerStack(layers);\n } catch (e) {\n return e;\n }\n }\n async SatisfyDependencies(activeLayer, placed, orderedLayers) {\n let pending = [];\n for (const impt of activeLayer.imports) {\n if (!placed.has(impt.uri)) {\n let layer = await this.provider.GetLayerByURI(impt.uri);\n if (layer instanceof Error) {\n return layer;\n }\n pending.push(layer);\n placed.set(impt.uri, true);\n }\n }\n let temp = [];\n for (const layer of pending) {\n temp.push(layer);\n let layers = await this.SatisfyDependencies(layer, placed, orderedLayers);\n if (layers instanceof Error) {\n return layers;\n }\n temp.push(...layers);\n }\n temp.forEach((t) => orderedLayers.push(t));\n return temp;\n }\n async BuildLayerSet(activeLayerID) {\n let activeLayer = await this.provider.GetLayerByURI(activeLayerID);\n if (activeLayer instanceof Error) {\n return activeLayer;\n }\n let layerSet = [activeLayer];\n let placed = /* @__PURE__ */ new Map();\n placed.set(activeLayer.header.id, true);\n let result = await this.SatisfyDependencies(activeLayer, placed, layerSet);\n if (result instanceof Error) {\n return result;\n }\n return layerSet;\n }\n};\n\n// viewer/compose-flattened.ts\nfunction TreeNodeToComposedObject(path, node, schemas) {\n let co = {\n name: path,\n attributes: {},\n children: [],\n };\n node.children.forEach((childNode, childName) => {\n co.children?.push(TreeNodeToComposedObject(`${path}/${childName}`, childNode, schemas));\n });\n node.attributes.forEach((attr, attrName) => {\n if (attr && typeof attr === \"object\" && !Array.isArray(attr)) {\n Object.keys(attr).forEach((compname) => {\n co.attributes[`${attrName}::${compname}`] = attr[compname];\n });\n } else {\n let schema = schemas[attrName];\n if (schema && schema.value.quantityKind) {\n let postfix = \"\";\n let quantityKind = schema.value.quantityKind;\n if (quantityKind === \"Length\") {\n postfix = \"m\";\n } else if (quantityKind === \"Volume\") {\n postfix = \"m\" + String.fromCodePoint(179);\n }\n co.attributes[attrName] = `${attr} ${postfix}`;\n } else {\n co.attributes[attrName] = attr;\n }\n }\n });\n if (Object.keys(co.attributes).length === 0) delete co.attributes;\n return co;\n}\nasync function compose3(files) {\n let userDefinedOrder = {\n header: { ...files[0].header },\n imports: files.map((f) => {\n return { uri: f.header.id };\n }),\n schemas: {},\n data: [],\n };\n userDefinedOrder.header.id = \"USER_DEF\";\n let provider = new StackedLayerProvider([\n new InMemoryLayerProvider().AddAll([userDefinedOrder, ...files]),\n new FetchLayerProvider(),\n ]);\n let layerStack = await new IfcxLayerStackBuilder(provider).FromId(userDefinedOrder.header.id).Build();\n if (layerStack instanceof Error) {\n throw layerStack;\n }\n layerStack.GetFederatedLayer().data.forEach((n, i) => {\n n.attributes = n.attributes || {};\n n.attributes[`__internal_${i}`] = n.path;\n });\n return TreeNodeToComposedObject(\"\", layerStack.GetFullTree(), layerStack.GetSchemas());\n}\n\n// viewer/render.ts\n// import * as THREE from \"three\";\n// import { OrbitControls } from \"three/addons/controls/OrbitControls.js\";\n// import { RGBELoader } from \"three/addons/loaders/RGBELoader.js\";\nimport { PCDLoader } from \"three/examples/jsm/loaders/PCDLoader.js\";\n// var controls;\n// var renderer;\nvar scene;\nvar camera;\nvar datas = [];\nvar autoCamera = true;\nvar objectMap = {};\n// var domMap = {};\nvar primMap = {};\n// var currentPathMapping = null;\n// var rootPrim = null;\n// var selectedObject = null;\n// var selectedDom = null;\n// var raycaster = new THREE.Raycaster();\n// var mouse = new THREE.Vector2();\nvar envMap;\nfunction init() {\n scene = new THREE.Scene();\n // const ambient = new THREE.AmbientLight(14544639, 0.4);\n // scene.add(ambient);\n // const keyLight = new THREE.DirectionalLight(16777215, 1);\n // keyLight.position.set(5, -10, 7.5);\n // scene.add(keyLight);\n // const fillLight = new THREE.DirectionalLight(16777215, 0.5);\n // fillLight.position.set(-5, 5, 5);\n // scene.add(fillLight);\n // const rimLight = new THREE.DirectionalLight(16777215, 0.3);\n // rimLight.position.set(0, 8, -10);\n // scene.add(rimLight);\n camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100);\n camera.up.set(0, 0, 1);\n camera.position.set(50, 50, 50);\n camera.lookAt(0, 0, 0);\n scene.add(camera);\n // const nd = document.querySelector(\".viewport\");\n // renderer = new THREE.WebGLRenderer({\n // alpha: true,\n // logarithmicDepthBuffer: true,\n // });\n // const pmremGenerator = new THREE.PMREMGenerator(renderer);\n // pmremGenerator.compileEquirectangularShader();\n // new RGBELoader().load(\"images/wildflower_field_1k.hdr\", function (texture) {\n // envMap = pmremGenerator.fromEquirectangular(texture).texture;\n // scene.environment = envMap;\n // texture.dispose();\n // pmremGenerator.dispose();\n // });\n // renderer.setSize(nd.offsetWidth, nd.offsetHeight);\n // controls = new OrbitControls(camera, renderer.domElement);\n // controls.enableDamping = true;\n // controls.dampingFactor = 0.25;\n // nd.appendChild(renderer.domElement);\n // renderer.domElement.addEventListener(\"click\", onCanvasClick);\n return scene;\n}\nfunction HasAttr(node, attrName) {\n if (!node || !node.attributes) return false;\n return !!node.attributes[attrName];\n}\n// function setHighlight(obj, highlight) {\n// if (!obj) return;\n// obj.traverse((o) => {\n// const mat = o.material;\n// if (mat && mat.color) {\n// if (highlight) {\n// if (!o.userData._origColor) {\n// o.userData._origColor = mat.color.clone();\n// }\n// o.material = mat.clone();\n// o.material.color.set(16711680);\n// } else if (o.userData._origColor) {\n// mat.color.copy(o.userData._origColor);\n// delete o.userData._origColor;\n// }\n// }\n// });\n// }\n// function selectPath(path) {\n// if (!path) {\n// if (selectedObject) setHighlight(selectedObject, false);\n// if (selectedDom) selectedDom.classList.remove(\"selected\");\n// selectedObject = null;\n// selectedDom = null;\n// return;\n// }\n// if (selectedObject) {\n// setHighlight(selectedObject, false);\n// }\n// if (selectedDom) {\n// selectedDom.classList.remove(\"selected\");\n// }\n// selectedObject = objectMap[path] || null;\n// selectedDom = domMap[path] || null;\n// if (selectedObject) setHighlight(selectedObject, true);\n// if (selectedDom) selectedDom.classList.add(\"selected\");\n// }\n// function onCanvasClick(event) {\n// const rect = renderer.domElement.getBoundingClientRect();\n// mouse.x = ((event.clientX - rect.left) / rect.width) * 2 - 1;\n// mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;\n// raycaster.setFromCamera(mouse, camera);\n// const intersects = raycaster.intersectObjects(Object.values(objectMap), true);\n// if (intersects.length > 0) {\n// let obj = intersects[0].object;\n// while (obj && !obj.userData.path) obj = obj.parent;\n// if (obj && obj.userData.path) {\n// const path = obj.userData.path;\n// const prim = primMap[path];\n// if (prim) {\n// handleClick(prim, currentPathMapping, rootPrim || prim);\n// }\n// selectPath(path);\n// }\n// } else {\n// selectPath(null);\n// }\n// }\nfunction tryCreateMeshGltfMaterial(path) {\n for (let p of path) {\n if (!p.attributes) {\n continue;\n }\n const pbrMetallicRoughness = p.attributes[\"gltf::material::pbrMetallicRoughness\"];\n const normalTexture = p.attributes[\"gltf::material::normalTexture\"];\n const occlusionTexture = p.attributes[\"gltf::material::occlusionTexture\"];\n const emissiveTexture = p.attributes[\"gltf::material::emissiveTexture\"];\n const emissiveFactor = p.attributes[\"gltf::material::emissiveFactor\"];\n const alphaMode = p.attributes[\"gltf::material::alphaMode\"];\n const alphaCutoff = p.attributes[\"gltf::material::alphaCutoff\"];\n const doubleSided = p.attributes[\"gltf::material::doubleSided\"];\n if (\n !pbrMetallicRoughness &&\n !normalTexture &&\n !occlusionTexture &&\n !emissiveTexture &&\n !emissiveFactor &&\n !alphaMode &&\n !alphaCutoff &&\n !doubleSided\n ) {\n continue;\n }\n let material = new THREE.MeshStandardMaterial();\n material.color = new THREE.Color(1, 1, 1);\n material.metalness = 1;\n material.roughness = 1;\n if (pbrMetallicRoughness) {\n let baseColorFactor = pbrMetallicRoughness[\"baseColorFactor\"];\n if (baseColorFactor) {\n material.color = new THREE.Color(baseColorFactor[0], baseColorFactor[1], baseColorFactor[2]);\n }\n let metallicFactor = pbrMetallicRoughness[\"metallicFactor\"];\n if (metallicFactor !== void 0) {\n material.metalness = metallicFactor;\n }\n let roughnessFactor = pbrMetallicRoughness[\"roughnessFactor\"];\n if (roughnessFactor !== void 0) {\n material.roughness = roughnessFactor;\n }\n }\n material.envMap = envMap;\n material.needsUpdate = true;\n material.envMapRotation = new THREE.Euler(0.5 * Math.PI, 0, 0);\n return material;\n }\n return void 0;\n}\nfunction createMaterialFromParent(path) {\n let material = {\n color: new THREE.Color(0.6, 0.6, 0.6),\n transparent: false,\n opacity: 1,\n };\n for (let p of path) {\n const color = p.attributes ? p.attributes[\"bsi::ifc::presentation::diffuseColor\"] : null;\n if (color) {\n material.color = new THREE.Color(...color);\n const opacity = p.attributes[\"bsi::ifc::presentation::opacity\"];\n if (opacity) {\n material.transparent = true;\n material.opacity = opacity;\n }\n break;\n }\n }\n return material;\n}\nfunction createCurveFromJson(path) {\n let points = new Float32Array(path[0].attributes[\"usd::usdgeom::basiscurves::points\"].flat());\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(points, 3));\n const material = createMaterialFromParent(path);\n let lineMaterial = new THREE.LineBasicMaterial({ ...material });\n lineMaterial.color.multiplyScalar(0.8);\n return new THREE.Line(geometry, lineMaterial);\n}\nfunction createMeshFromJson(path) {\n let points = new Float32Array(path[0].attributes[\"usd::usdgeom::mesh::points\"].flat());\n let indices = new Uint16Array(path[0].attributes[\"usd::usdgeom::mesh::faceVertexIndices\"]);\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(points, 3));\n geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n geometry.computeVertexNormals();\n var meshMaterial;\n let gltfPbrMaterial = tryCreateMeshGltfMaterial(path);\n if (gltfPbrMaterial) {\n meshMaterial = gltfPbrMaterial;\n } else {\n const m = createMaterialFromParent(path);\n meshMaterial = new THREE.MeshLambertMaterial({ ...m });\n }\n return new THREE.Mesh(geometry, meshMaterial);\n}\nfunction createPointsFromJsonPcdBase64(path) {\n const base64_string = path[0].attributes[\"pcd::base64\"];\n const decoded = atob(base64_string);\n const len = decoded.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = decoded.charCodeAt(i);\n }\n const loader = new PCDLoader();\n const points = loader.parse(bytes.buffer);\n points.material.sizeAttenuation = false;\n points.material.size = 2;\n return points;\n}\nfunction createPoints(geometry, withColors) {\n const material = new THREE.PointsMaterial();\n material.sizeAttenuation = false;\n material.fog = true;\n material.size = 5;\n material.color = new THREE.Color(withColors ? 16777215 : 0);\n if (withColors) {\n material.vertexColors = true;\n }\n return new THREE.Points(geometry, material);\n}\nfunction createPointsFromJsonArray(path) {\n const geometry = new THREE.BufferGeometry();\n const positions = new Float32Array(path[0].attributes[\"points::array::positions\"].flat());\n geometry.setAttribute(\"position\", new THREE.Float32BufferAttribute(positions, 3));\n const colors = path[0].attributes[\"points::array::colors\"];\n if (colors) {\n const colors_ = new Float32Array(colors.flat());\n geometry.setAttribute(\"color\", new THREE.Float32BufferAttribute(colors_, 3));\n }\n return createPoints(geometry, colors);\n}\nfunction base64ToArrayBuffer(str) {\n let binary;\n try {\n binary = atob(str);\n } catch (e) {\n throw new Error(\"base64 encoded string is invalid\");\n }\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; ++i) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes.buffer;\n}\nfunction createPointsFromJsonPositionBase64(path) {\n const geometry = new THREE.BufferGeometry();\n const positions_base64 = path[0].attributes[\"points::base64::positions\"];\n const positions_bytes = base64ToArrayBuffer(positions_base64);\n if (!positions_bytes) {\n return null;\n }\n const positions = new Float32Array(positions_bytes);\n geometry.setAttribute(\"position\", new THREE.Float32BufferAttribute(positions, 3));\n const colors_base64 = path[0].attributes[\"points::base64::colors\"];\n if (colors_base64) {\n const colors_bytes = base64ToArrayBuffer(colors_base64);\n if (colors_bytes) {\n const colors = new Float32Array(colors_bytes);\n geometry.setAttribute(\"color\", new THREE.Float32BufferAttribute(colors, 3));\n }\n }\n return createPoints(geometry, colors_base64);\n}\nfunction traverseTree(path, parent, pathMapping) {\n const node = path[0];\n let elem = new THREE.Group();\n if (HasAttr(node, \"usd::usdgeom::visibility::visibility\")) {\n if (node.attributes[\"usd::usdgeom::visibility::visibility\"] === \"invisible\") {\n return;\n }\n } else if (HasAttr(node, \"usd::usdgeom::mesh::points\")) {\n elem = createMeshFromJson(path);\n } else if (HasAttr(node, \"usd::usdgeom::basiscurves::points\")) {\n elem = createCurveFromJson(path);\n } else if (HasAttr(node, \"pcd::base64\")) {\n elem = createPointsFromJsonPcdBase64(path);\n } else if (HasAttr(node, \"points::array::positions\")) {\n elem = createPointsFromJsonArray(path);\n } else if (HasAttr(node, \"points::base64::positions\")) {\n elem = createPointsFromJsonPositionBase64(path);\n }\n objectMap[node.name] = elem;\n primMap[node.name] = node;\n elem.userData.path = node.name;\n for (let path2 of Object.entries(node.attributes || {})\n .filter(([k, _]) => k.startsWith(\"__internal_\"))\n .map(([_, v]) => v)) {\n (pathMapping[String(path2)] = pathMapping[String(path2)] || []).push(node.name);\n }\n parent.add(elem);\n if (path.length > 1) {\n elem.matrixAutoUpdate = false;\n let matrixNode =\n node.attributes && node.attributes[\"usd::xformop::transform\"]\n ? node.attributes[\"usd::xformop::transform\"].flat()\n : null;\n if (matrixNode) {\n let matrix = new THREE.Matrix4();\n matrix.set(...matrixNode);\n matrix.transpose();\n elem.matrix = matrix;\n }\n }\n (node.children || []).forEach((child) => traverseTree([child, ...path], elem || parent, pathMapping));\n}\n// function encodeHtmlEntities(str) {\n// const div = document.createElement(\"div\");\n// div.textContent = str;\n// return div.innerHTML;\n// }\n// var icons = {\n// \"usd::usdgeom::mesh::points\": \"deployed_code\",\n// \"usd::usdgeom::basiscurves::points\": \"line_curve\",\n// \"usd::usdshade::material::outputs::surface.connect\": \"line_style\",\n// \"pcd::base64\": \"grain\",\n// \"points::array::positions\": \"grain\",\n// \"points::base64::positions\": \"grain\",\n// };\n// function handleClick(prim, pathMapping, root) {\n// const container = document.querySelector(\".attributes .table\");\n// if (container !== null) {\n// container.innerHTML = \"\";\n// const table = document.createElement(\"table\");\n// table.setAttribute(\"border\", \"0\");\n// const entries = [\n// [\"name\", prim.name],\n// ...Object.entries(prim.attributes).filter(([k, _]) => !k.startsWith(\"__internal_\")),\n// ];\n// const format = (value) => {\n// if (Array.isArray(value)) {\n// let N = document.createElement(\"span\");\n// N.appendChild(document.createTextNode(\"(\"));\n// let first = true;\n// for (let n of value.map(format)) {\n// if (!first) {\n// N.appendChild(document.createTextNode(\",\"));\n// }\n// N.appendChild(n);\n// first = false;\n// }\n// N.appendChild(document.createTextNode(\")\"));\n// return N;\n// } else if (typeof value === \"object\") {\n// const ks = Object.keys(value);\n// if (ks.length == 1 && ks[0] === \"ref\" && pathMapping[value.ref] && pathMapping[value.ref].length == 1) {\n// let a = document.createElement(\"a\");\n// let resolvedRefAsPath = pathMapping[value.ref][0];\n// a.setAttribute(\"href\", \"#\");\n// a.textContent = resolvedRefAsPath;\n// a.onclick = () => {\n// let prim2 = null;\n// const recurse = (n) => {\n// if (n.name === resolvedRefAsPath) {\n// prim2 = n;\n// } else {\n// (n.children || []).forEach(recurse);\n// }\n// };\n// recurse(root);\n// if (prim2) {\n// handleClick(prim2, pathMapping, root);\n// }\n// };\n// return a;\n// } else {\n// return document.createTextNode(JSON.stringify(value));\n// }\n// } else {\n// return document.createTextNode(value);\n// }\n// };\n// entries.forEach(([key, value]) => {\n// const tr = document.createElement(\"tr\");\n// const tdKey = document.createElement(\"td\");\n// tdKey.textContent = encodeHtmlEntities(key);\n// const tdValue = document.createElement(\"td\");\n// tdValue.appendChild(format(value));\n// tr.appendChild(tdKey);\n// tr.appendChild(tdValue);\n// table.appendChild(tr);\n// });\n// container.appendChild(table);\n// }\n// }\n// function buildDomTree(prim, node, pathMapping, root = null) {\n// const elem = document.createElement(\"div\");\n// let span;\n// elem.appendChild(document.createTextNode(prim.name ? prim.name.split(\"/\").reverse()[0] : \"root\"));\n// elem.appendChild((span = document.createElement(\"span\")));\n// Object.entries(icons).forEach(([k, v]) => (span.innerText += (prim.attributes || {})[k] ? v : \" \"));\n// span.className = \"material-symbols-outlined\";\n// domMap[prim.name] = elem;\n// elem.dataset.path = prim.name;\n// elem.onclick = (evt) => {\n// handleClick(prim, pathMapping, root || prim);\n// selectPath(prim.name);\n// evt.stopPropagation();\n// };\n// node.appendChild(elem);\n// (prim.children || []).forEach((p) => buildDomTree(p, elem, pathMapping, root || prim));\n// }\nasync function composeAndRender() {\n if (scene) {\n scene.children = [];\n }\n objectMap = {};\n // domMap = {};\n primMap = {};\n // currentPathMapping = null;\n // rootPrim = null;\n // document.querySelector(\".tree\").innerHTML = \"\";\n if (datas.length === 0) {\n return;\n }\n let tree = null;\n let dataArray = datas.map((arr) => arr[1]);\n tree = await compose3(dataArray);\n if (!tree) {\n console.error(\"No result from composition\");\n return;\n }\n if (!scene) {\n init();\n }\n let pathMapping = {};\n traverseTree([tree], scene, pathMapping);\n // currentPathMapping = pathMapping;\n // rootPrim = tree;\n if (autoCamera) {\n const boundingBox = new THREE.Box3();\n boundingBox.setFromObject(scene);\n if (!boundingBox.isEmpty()) {\n let avg = boundingBox.min.clone().add(boundingBox.max).multiplyScalar(0.5);\n let ext = boundingBox.max.clone().sub(boundingBox.min).length();\n camera.position.copy(avg.clone().add(new THREE.Vector3(1, 1, 1).normalize().multiplyScalar(ext)));\n camera.far = ext * 3;\n camera.updateProjectionMatrix();\n // controls.target.copy(avg);\n // controls.update();\n autoCamera = false;\n }\n }\n // buildDomTree(tree, document.querySelector(\".tree\"), pathMapping);\n // animate();\n}\n// function createLayerDom() {\n// document.querySelector(\".layers div\").innerHTML = \"\";\n// datas.forEach(([name, _], index) => {\n// const elem = document.createElement(\"div\");\n// elem.appendChild(document.createTextNode(name));\n// [\"\\u25B3\", \"\\u25BD\", \"\\xD7\"].reverse().forEach((lbl, cmd) => {\n// const btn = document.createElement(\"span\");\n// btn.onclick = (evt) => {\n// evt.stopPropagation();\n// if (cmd === 2) {\n// if (index > 0) {\n// [datas[index], datas[index - 1]] = [datas[index - 1], datas[index]];\n// }\n// } else if (cmd === 1) {\n// if (index < datas.length - 1) {\n// [datas[index], datas[index + 1]] = [datas[index + 1], datas[index]];\n// }\n// } else if (cmd === 0) {\n// datas.splice(index, 1);\n// }\n// composeAndRender();\n// createLayerDom();\n// };\n// btn.appendChild(document.createTextNode(lbl));\n// elem.appendChild(btn);\n// });\n// document.querySelector(\".layers div\").appendChild(elem);\n// });\n// }\n// async function addModel(name, m) {\n// datas.push([name, m]);\n// createLayerDom();\n// await composeAndRender();\n// }\n// function animate() {\n// requestAnimationFrame(animate);\n// controls.update();\n// renderer.render(scene, camera);\n// }\n// export { composeAndRender, addModel as default };\n\nexport async function parse(m, name) {\n datas.push([name, m]);\n await composeAndRender();\n return scene;\n}\nexport function clear() {\n scene = undefined;\n datas.length = 0;\n autoCamera = true;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { FileLoader, Loader, Scene } from \"three\";\nimport { parse, clear } from \"./render.js\";\n\nclass IFCXLoader extends Loader<Scene> {\n override load(\n url: string,\n onLoad: (data: Scene) => void,\n onProgress?: (event: ProgressEvent) => void,\n onError?: (err: unknown) => void\n ) {\n const manager = this.manager;\n\n manager.itemStart(url);\n\n const _onLoad = (scene: Scene) => {\n onLoad(scene);\n manager.itemEnd(url);\n };\n\n const _onError = (e: unknown) => {\n if (onError) onError(e);\n else console.error(e);\n manager.itemError(url);\n manager.itemEnd(url);\n };\n\n const loader = new FileLoader(this.manager);\n\n loader.setPath(this.path);\n loader.setResponseType(\"json\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n\n loader.load(url, (json) => this.parse(json, _onLoad, _onError), onProgress, onError);\n }\n\n parse(json: any, onLoad: (scene: Scene) => void, onError: (err: unknown) => void) {\n parse(json)\n .then((scene: Scene) => onLoad(scene))\n .catch((err: unknown) => onError(err))\n .finally(() => clear());\n }\n}\n\nexport { IFCXLoader };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { GLTFLoadingManager, GLTFLoadParams, Loader, ModelImpl, Viewer } from \"@inweb/viewer-three\";\nimport { IFCXLoader } from \"./IFCXLoader\";\n\nexport class IFCXFileLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n (typeof file === \"string\" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&\n /(ifcx)$/i.test(format)\n );\n }\n\n override async load(file: any, format?: string, params?: GLTFLoadParams): Promise<this> {\n const manager = new GLTFLoadingManager(file, params);\n\n const loader = new IFCXLoader(manager);\n loader.setPath(manager.path);\n loader.setCrossOrigin(params.crossOrigin || loader.crossOrigin);\n loader.setWithCredentials(params.withCredentials || loader.withCredentials);\n\n const progress = (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const scene = await loader.loadAsync(manager.fileURL, progress);\n if (!this.viewer.scene) return this;\n\n let handle = 0;\n scene.traverse((object) => {\n object.userData = { handle, ...object.userData };\n handle++;\n });\n\n const modelImpl = new ModelImpl(scene);\n modelImpl.loader = this;\n modelImpl.viewer = this.viewer;\n\n this.viewer.scene.add(scene);\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: scene, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Loader, ModelImpl, Viewer } from \"@inweb/viewer-three\";\nimport { parse, clear } from \"./render.js\";\n\nexport class IFCXCloudLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.type === \"string\" &&\n typeof file.download === \"function\" &&\n /.ifcx$/i.test(file.type)\n );\n }\n\n override async load(file: any): Promise<this> {\n const progress = (progress: number) => {\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const arrayBuffer = await file.download(progress, this.abortController.signal);\n if (!this.viewer.scene) return this;\n\n const textDecoder = new TextDecoder();\n const json = JSON.parse(textDecoder.decode(arrayBuffer));\n\n const scene = await parse(json);\n clear();\n\n let handle = 0;\n scene.traverse((object: any) => {\n object.userData = { handle, ...object.userData };\n handle++;\n });\n\n const modelImpl = new ModelImpl(scene);\n modelImpl.loader = this;\n modelImpl.viewer = this.viewer;\n\n this.viewer.scene.add(scene);\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: scene, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { loaders } from \"@inweb/viewer-three\";\n\nimport { IFCXFileLoader } from \"./IFCXFileLoader\";\nimport { IFCXCloudLoader } from \"./IFCXCloudLoader\";\n\nloaders.registerLoader(\"ifcx-file\", (viewer: any) => new IFCXFileLoader(viewer));\nloaders.registerLoader(\"ifcx-cloud\", (viewer: any) => new IFCXCloudLoader(viewer));\n"],"names":["Loader","FileLoader","Color","SRGBColorSpace","BufferGeometry","Float32BufferAttribute","Int32BufferAttribute","PointsMaterial","Points","Box3","BufferAttribute","Euler","Group","Line","LineBasicMaterial","Matrix4","Mesh","MeshLambertMaterial","MeshStandardMaterial","PerspectiveCamera","Scene","Vector3","GLTFLoadingManager","ModelImpl","loaders"],"mappings":"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","x_google_ignoreList":[0]}
|