# Class T8ProductWithGeometry<TEntity>

Read-only view of an IFC product (element) in a building model.

This is the shared interface between the browser (`@twinfinity/core`) and server/Node.js (`@twinfinity/t8-client-model`) contexts, allowing business logic to be written once and consumed from both.

#### Type Parameters

- TEntity extends ModelEntityType = T8EntityType

#### Hierarchy (View Summary)

- T8Product<TEntity>
  - T8ProductWithGeometry

#### Implements

- ModelProduct

##### Index

### Constructors

constructor

### Properties

aggregates
className
computedPropertySets
contains
data
definedByType?
description
facility
facilityPart
globalId
localId
name
parent
propertySets
quantities
site
tag?

### Accessors

children
class
hasGeometry
hasStructuredRelationships
meshes
polylines
quantitySets
type

### Methods

connect
create
createWithMeshes

## Constructors

### constructor

- new T8ProductWithGeometry<
  TEntity extends ModelEntityType = T8EntityType<T8Unit>,
  >(
  localId: number,
  globalId: string,
  className: string,
  data: Record<string, boolean | number | string>,
  propertySets?: Record<string, T8PropertySet<T8Unit>>,
  computedPropertySets?: Record<string, T8PropertySet<T8Unit>>,
  quantities?: Record<string, T8QuantitySet<T8Unit>>,
  name?: string,
  description?: string,
  tag?: string,
  meshes?: T8Mesh[],
  polylines?: readonly ModelPolyline[],
  ): T8ProductWithGeometry<TEntity>

  #### Type Parameters

  - TEntity extends ModelEntityType = T8EntityType<T8Unit>

  #### Parameters

  - localId: number
  - globalId: string
  - className: string
  - data: Record<string, boolean | number | string>
  - `Optional` propertySets: Record<string, T8PropertySet<T8Unit>>
  - `Optional` computedPropertySets: Record<string, T8PropertySet<T8Unit>>
  - `Optional` quantities: Record<string, T8QuantitySet<T8Unit>>
  - `Optional` name: string
  - `Optional` description: string
  - `Optional` tag: string
  - `Optional` meshes: T8Mesh[]
  - `Optional` polylines: readonly ModelPolyline[]

  #### Returns T8ProductWithGeometry<TEntity>

  Overrides T8Product.constructor

## Properties

### `Readonly` aggregates

aggregates: readonly T8Product<TEntity, T8Unit>[]

Products that are aggregated by this product

Implementation of ModelProduct.aggregates

Inherited from T8Product.aggregates

### className

className: string

Class name (e.g., 'IfcWall', 'IfcDoor')

Implementation of ModelProduct.className

Inherited from T8Product.className

### computedPropertySets

computedPropertySets: Record<string, T8PropertySet<TUnit>>

Computed property sets (e.g., Pset_Twinfinity_Aggregates)

Implementation of ModelProduct.computedPropertySets

Inherited from T8Product.computedPropertySets

### `Readonly` contains

contains: readonly T8Product<TEntity, T8Unit>[]

Products that are contained within this product (spatial containment)

Implementation of ModelProduct.contains

Inherited from T8Product.contains

### data

data: Record<string, boolean | number | string>

Custom data values attached to this product

Implementation of ModelProduct.data

Inherited from T8Product.data

### `Optional` definedByType

definedByType?: TEntity

The entity type (class) this product is an instance of

Inherited from T8Product.definedByType

### description

description: undefined | string

Optional description of the product

Implementation of ModelProduct.description

Inherited from T8Product.description

### facility

facility: undefined | T8Product<TEntity, T8Unit>

The `IfcBuilding` (or `IfcFacility`) ancestor of this product.

Implementation of ModelProduct.facility

Inherited from T8Product.facility

### facilityPart

facilityPart: undefined | T8Product<TEntity, T8Unit>

The `IfcBuildingStorey` (or `IfcFacilityPart`) ancestor of this product.

Implementation of ModelProduct.facilityPart

Inherited from T8Product.facilityPart

### globalId

globalId: string

Global unique identifier (GUID)

Implementation of ModelProduct.globalId

Inherited from T8Product.globalId

### localId

localId: number

Local numerical identifier within the model

Implementation of ModelProduct.localId

Inherited from T8Product.localId

### name

name: undefined | string

Optional name of the product

Implementation of ModelProduct.name

Inherited from T8Product.name

### parent

parent: undefined | T8Product<TEntity, T8Unit>

Closest parent in the spatial/aggregation hierarchy.

Implementation of ModelProduct.parent

Inherited from T8Product.parent

### propertySets

propertySets: Record<string, T8PropertySet<TUnit>>

Property sets (e.g., Pset_WallCommon)

Implementation of ModelProduct.propertySets

Inherited from T8Product.propertySets

### quantities

quantities: Record<string, T8QuantitySet<TUnit>>

Quantity sets (e.g., Qto_WallBaseQuantities)

Inherited from T8Product.quantities

### site

site: undefined | T8Product<TEntity, T8Unit>

The `IfcSite` ancestor of this product.

Implementation of ModelProduct.site

Inherited from T8Product.site

### `Optional` tag

tag?: string

Optional tag identifier

Inherited from T8Product.tag

## Accessors

### children

- get children(): Iterable<T8Product<TEntityType, TUnit>>

  All child products regardless of relationship type.

  #### Returns Iterable<T8Product<TEntityType, TUnit>>

  Implementation of ModelProduct.children

  Inherited from T8Product.children

### class

- get class(): ModelProductClass

  Parsed class with category information. Reference equality can be used for comparison.

  #### Returns ModelProductClass

  Implementation of ModelProduct.class

  Inherited from T8Product.class

### hasGeometry

- get hasGeometry(): boolean

  True if this product has at least one mesh with geometry data.

  #### Returns boolean

  Implementation of ModelProduct.hasGeometry

  Overrides T8Product.hasGeometry

### hasStructuredRelationships

- get hasStructuredRelationships(): boolean

  True when aggregates and contains carry structured IFC relationship data (`IfcRelAggregates` / `IfcRelContainedInSpatialStructure`). When false, only children is populated.

  #### Returns boolean

  Implementation of ModelProduct.hasStructuredRelationships

  Inherited from T8Product.hasStructuredRelationships

### meshes

- get meshes(): readonly T8Mesh[]

  Geometry meshes belonging to this product.

  #### Returns readonly T8Mesh[]

  Implementation of ModelProduct.meshes

  Overrides T8Product.meshes

### polylines

- get polylines(): readonly ModelPolyline[]

  #### Returns readonly ModelPolyline[]

  Overrides T8Product.polylines

### quantitySets

- get quantitySets(): Record<string, T8QuantitySet<TUnit>>

  IFC quantity sets (e.g. `Qto_WallBaseQuantities`).

  #### Returns Record<string, T8QuantitySet<TUnit>>

  Implementation of ModelProduct.quantitySets

  Inherited from T8Product.quantitySets

### type

- get type(): undefined | TEntityType

  The entity type definition this product is an instance of (e.g. an `IfcWallType`).

  #### Returns undefined | TEntityType

  Implementation of ModelProduct.type

  Inherited from T8Product.type

## Methods

### `Static` connect

- connect<TEntityType, TUnit>(
  dto: T8ClientProductConnectionsDTO<
  T8Product<TEntityType, TUnit>,
  TEntityType,
  >,
  product: T8Product<TEntityType, TUnit>,
  ): void

  #### Type Parameters

  - TEntityType
  - TUnit

  #### Parameters

  - dto: T8ClientProductConnectionsDTO<T8Product<TEntityType, TUnit>, TEntityType>
  - product: T8Product<TEntityType, TUnit>

  #### Returns void

  Inherited from T8Product.connect

### `Static` create

- create<TEntityType, TUnit>(
  dto: T8ClientProductDTO<TUnit>,
  ): T8Product<TEntityType, TUnit>

  #### Type Parameters

  - TEntityType
  - TUnit

  #### Parameters

  - dto: T8ClientProductDTO<TUnit>

  #### Returns T8Product<TEntityType, TUnit>

  Inherited from T8Product.create

### `Static` createWithMeshes

- createWithMeshes(
  dto: T8ClientProductDTO<T8Unit>,
  meshes: T8Mesh[],
  polylines?: readonly ModelPolyline[],
  ): T8ProductWithGeometry

  #### Parameters

  - dto: T8ClientProductDTO<T8Unit>
  - meshes: T8Mesh[]
  - `Optional` polylines: readonly ModelPolyline[]

  #### Returns T8ProductWithGeometry