# Interface IBimIfcLoaderElement

Represents an IFC file and provides access to its data.

interface IBimIfcLoaderElement {
classes: ModelProductClass[];
discipline: Discipline;
floors: BimIfcBuildingStorey[];
geometricFeaturesUrl: undefined | URL;
geometryFormat: GeometryFormat;
geometryUrl: undefined | URL;
hasBatchSupport: boolean;
ifc: BimChangeIfc;
ifcName: string;
ifcProductsWithGeometryCount: number;
ifcUrl: URL;
index: BimIfcIndex;
indexUrl: undefined | URL;
loader: BimIfcLoaderElementParent;
loadOptions?: BimApiIfcObjectsLoadOptions;
materials: Materials;
meshCount: number;
numberOfIndices: number;
numberOfTriangles: number;
numberOfVertices: number;
products: BimIfcObject[];
project: BimIfcObject;
propertiesUrl: undefined | URL;
spaces: BimIfcSpace[];
styles: BimIfcStyle[];
transform?: Matrix;
transformsRepository: BimTransformsRepository;
typeObjectRepository: BimTypeObjectRepository;
wasmMemoryUsage: {
allocated: number;
capacity: number;
outputBuffers: number;
used: number;
};
ensureVertexDataLoaded(): Promise<boolean>;
getVertexData(
productMeshDescriptor: BimProductMeshDescriptor,
): BimVertexData;
loadPropertySets(): Promise<boolean>;
tryCreateOrExtendAABBFromRegions(
min: Vector3,
max: Vector3,
o?: { onlyMostPopulatedRegions?: boolean },
): boolean;
writeBatch(
meshes: BimProductMesh[],
destination: GeometryArrays,
offset: GeometryArrayOffset,
): undefined | WriteBatchResult;
writeVertexData(
ifcProductMesh: BimProductMesh,
transform: FastTransform,
destination: GeometryArrays,
offset: GeometryArrayOffset,
aabb: { max: Vector3; min: Vector3 },
options: { includeNormals?: boolean },
): { indexCount: number; vertexCount: number };
}

#### Implemented by

- BimIfcLoaderElement

##### Index

### Properties

classes
discipline
floors
geometricFeaturesUrl
geometryFormat
geometryUrl
hasBatchSupport
ifc
ifcName
ifcProductsWithGeometryCount
ifcUrl
index
indexUrl
loader
loadOptions?
materials
meshCount
numberOfIndices
numberOfTriangles
numberOfVertices
products
project
propertiesUrl
spaces
styles
transform?
transformsRepository
typeObjectRepository
wasmMemoryUsage

### Methods

ensureVertexDataLoaded
getVertexData
loadPropertySets
tryCreateOrExtendAABBFromRegions
writeBatch
writeVertexData

## Properties

### `Readonly` classes

classes: ModelProductClass[]

All BimIfcClass instances referenced by BimProduct's in the IFC file this instance represents.

### `Readonly` discipline

discipline: Discipline

The discipline of the IFC file this instance represents.

### `Readonly` floors

floors: BimIfcBuildingStorey[]

All IfcBuildingStorey (BimIfcBuildingStorey) instances in the IFC file this instance represents.

### `Readonly` geometricFeaturesUrl

geometricFeaturesUrl: undefined | URL

Url where the IFC geometric features file (.geom-feature file) will be retrieved from.

### `Readonly` geometryFormat

geometryFormat: GeometryFormat

The format that the geometry is stored in.

### `Readonly` geometryUrl

geometryUrl: undefined | URL

Url where the IFC geometry (.geom file) will be retrieved from.

### `Readonly` hasBatchSupport

hasBatchSupport: boolean

Whether batch vertex data writing is supported via WASM.

### `Readonly` ifc

ifc: BimChangeIfc

The IFC change (file) this instance represents.

### `Readonly` ifcName

ifcName: string

The name of the IFC file this instance represents.

### `Readonly` ifcProductsWithGeometryCount

ifcProductsWithGeometryCount: number

The total number of BimProductMesh instances in the IFC file this instance represents. Same as meshCount.

### `Readonly` ifcUrl

ifcUrl: URL

The url where the contents of the IFC file can be retrieved from.

### `Readonly` index

index: BimIfcIndex

The IFC index (.idx file) of the IFC file this instance represents. This describes (in a very raw format) the content of the IFC file. It does not include any geometry or property sets.

### `Readonly` indexUrl

indexUrl: undefined | URL

Url where the IFC index (.idx file) will be retrieved from.

### `Readonly` loader

loader: BimIfcLoaderElementParent

The loader this instance belongs to.

### `Optional` `Readonly` loadOptions

loadOptions?: BimApiIfcObjectsLoadOptions

The BimApiIfcObjectsLoadOptions options (if any) that was used when this instance was created.

### `Readonly` materials

materials: Materials

Reference to a Materials instance.

### `Readonly` meshCount

meshCount: number

The total number of BimProductMesh instances in the IFC file this instance represents. Same as ifcProductsWithGeometryCount.

### `Readonly` numberOfIndices

numberOfIndices: number

The total number of indices contained in all instances of BimProductMesh in this IFC file.

### `Readonly` numberOfTriangles

numberOfTriangles: number

The total number of triangles contained in all instances of BimProductMesh in this IFC file.

### `Readonly` numberOfVertices

numberOfVertices: number

The total number of vertices contained in all instances of BimProductMesh in this IFC file.

### `Readonly` products

products: BimIfcObject[]

All IFC products in the IFC file this instance represents. Here represented as a flat list.

### `Readonly` project

project: BimIfcObject

The IfcProject instance of the IFC file this instance represents.

### `Readonly` propertiesUrl

propertiesUrl: undefined | URL

Url where the IFC property set (.prop file) will be retrieved from.

### `Readonly` spaces

spaces: BimIfcSpace[]

All IfcSpace (BimIfcSpace) instances in the IFC file this instance represents.

### `Readonly` styles

styles: BimIfcStyle[]

All IFC styles that the BimProductMesh instances in the IFC file refers to. The styles are used to color the meshes.

### `Optional` `Readonly` transform

transform?: Matrix

An optional transform for the IFC file. This transform will be applied to all IFC product geometries

### `Readonly` transformsRepository

transformsRepository: BimTransformsRepository

Reference to the transform repository this instance uses when transforming IFC product geometries.

### `Readonly` typeObjectRepository

typeObjectRepository: BimTypeObjectRepository

Reference to the type object repository this instance uses for type properties.

### `Readonly` wasmMemoryUsage

wasmMemoryUsage: {
allocated: number;
capacity: number;
outputBuffers: number;
used: number;
}

WASM memory usage in bytes.

## Methods

### ensureVertexDataLoaded

- ensureVertexDataLoaded(): Promise<boolean>

  Ensures that the vertex data is loaded.

  #### Returns Promise<boolean>

  A promise that resolves to a boolean. See it as a signal. I will be true if the call actualy loaded the data. Otherwhise it will be false (data loading is either in progress or has completed).

### getVertexData

- getVertexData(productMeshDescriptor: BimProductMeshDescriptor): BimVertexData

  Gets the vertex data for a given product mesh descriptor.

  #### Parameters

  - productMeshDescriptor: BimProductMeshDescriptor

    The product mesh descriptor.

  #### Returns BimVertexData

  The vertex data.

### loadPropertySets

- loadPropertySets(): Promise<boolean>

  Loads the property sets and assigns them to the IFC products contained within this instance.

  #### Returns Promise<boolean>

  A promise that resolves to a boolean indicating whether the property set was loaded

### tryCreateOrExtendAABBFromRegions

- tryCreateOrExtendAABBFromRegions(
  min: Vector3,
  max: Vector3,
  o?: { onlyMostPopulatedRegions?: boolean },
  ): boolean

  Calculates, or extends a existing, axis-aligned bounding box (AABB) of the regions in the IFC file this instance represents. The provided min, and max values will be updated to contain the min and max values of the AABB.

  #### Parameters

  - min: Vector3

    Will be set to min vector of the AABB after call. If not part of existing AABB it must be set to (Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE)

  - max: Vector3

    Will be set to max vector of the AABB after call. If not part of existing AABB it must be set to (Number.MIN_VALUE, Number.MIN_VALUE, Number.MIN_VALUE)

  - `Optional` o: { onlyMostPopulatedRegions?: boolean }

    Optional. Options object. If `onlyMostPopulatedRegions` is set to `true` then only the most populated regions will be considered.

  #### Returns boolean

  `true` if a valid AABB was calculated. Otherwise `false`. If `false` is returned then the min and max values will not be updated.

  #### Example

      // Example of how to calculate a AABB that encompasses the most populated regions of two IFC files.
      const min = setMax(Vector3.Zero());
      const max = setMin(Vector3.Zero());
      // min and max will now contain the min and max values of the AABB encompassing the mostly populated region in loaderElementA.
      loaderElementA.tryCreateOrExtendAABBFromRegions(min, max, { onlyMostPopulatedRegions: true});
      // min and max will now contain the min and max values of the AABB that encompasses both loaderElementA and loaderElementB.
      loaderElementB.tryCreateOrExtendAABBFromRegions(min, max, { onlyMostPopulatedRegions: true});

### writeBatch

- writeBatch(
  meshes: BimProductMesh[],
  destination: GeometryArrays,
  offset: GeometryArrayOffset,
  ): undefined | WriteBatchResult

  Writes vertex data for multiple meshes in a single batch operation using WASM. Falls back to undefined if batch support is not available.

  #### Parameters

  - meshes: BimProductMesh[]

    The meshes to write.

  - destination: GeometryArrays

    The destination geometry arrays.

  - offset: GeometryArrayOffset

    The offset in the geometry arrays.

  #### Returns undefined | WriteBatchResult

  The batch result containing AABB and counts, or undefined if batch is not available.

### writeVertexData

- writeVertexData(
  ifcProductMesh: BimProductMesh,
  transform: FastTransform,
  destination: GeometryArrays,
  offset: GeometryArrayOffset,
  aabb: { max: Vector3; min: Vector3 },
  options: { includeNormals?: boolean },
  ): { indexCount: number; vertexCount: number }

  Writes the vertex data to the specified destination.

  #### Parameters

  - ifcProductMesh: BimProductMesh

    The IFC product mesh.

  - transform: FastTransform

    The transformation matrix.

  - destination: GeometryArrays

    The destination geometry arrays.

  - offset: GeometryArrayOffset

    The offset in the geometry arrays.

  - aabb: { max: Vector3; min: Vector3 }

    The axis-aligned bounding box.

  - options: { includeNormals?: boolean }

  #### Returns { indexCount: number; vertexCount: number }

  The actual vertex and index counts written.