# What is IFC?

## Introduction

**Industry Foundation Classes (IFC)** is an international standard for Building Information Model (BIM) data [(buildingSMART, 2020a)](https://www.buildingsmart.org/standards/bsi-standards/industry-foundation-classes/). The standard, [ISO 16739-1](https://www.iso.org/standard/70303.html), is used to exchanged BIM data among software applications used by the various participants in the AEC industry [(ISO, 2020a)](https://www.iso.org/standard/70303.html).

IFC is developed and mainteined by buildingSMART International and is used with [openBIM](https://www.buildingsmart.org/about/openbim/)   ([buildingSMART, 2020b)](https://technical.buildingsmart.org/standards/ifc/). According to [(ISO, 2020a)](https://www.iso.org/standard/70303.html), the IFC specifies:

1. **A data schema**
2. **An exchange file format structure**

### 1. Data Schema

The data schema is defined in:

* EXPRESS data specification language, [ISO 10303-11](https://www.iso.org/standard/38047.html),

### 2. E**xchange File Format Structure**

The exchange file formats structure is used for exchanging and sharing the data according to the **data schema**. The exchange file formats structure is defined in:

* Clear text encoding of the exchange structure, [ISO 10303-21](https://www.iso.org/standard/63141.html)

## In more detail

Let's try to explain IFC in layman's terms.

### 1. Data Schema

According to ([buildingSMART, 2020b)](https://technical.buildingsmart.org/standards/ifc/), the IFC **data schema** describes:

* identities and semantics
  * name, machine-readable unique identifier, object type or function
* &#x20;characteristics **or** attributes
  * material, color, thermal properties, etc.
* relationships
  * locations, connections, ownership, etc.
* abstract concepts
  * *performance, costing, etc.*
* processes
  * *installation, operations, etc.*
* people
  * owners, designers, contractors, suppliers, etc.
* Etc.

### 2. E**xchange File Format Structure**

Whereas the **Exchange File Format Structure** allows the data described to be transferred from one computer system to another.

{% hint style="info" %}
**Example:** The .IFC file can be used to transfer the BIM model from [Revit](https://www.autodesk.com/products/revit/overview) to [Solibri](https://www.solibri.com)
{% endhint %}

## Example

In this example we're going to take a look at a window. Please note that this section will simply introduce the data schema and STEP-file. We will explain how these works in detail later.

### 1. Data Schema

**IFC2x Edition 3 Technical Corrigendum 1**, or simply [IFC2x3](https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/), describes a window like this:&#x20;

```python
ENTITY IfcWindow
	SUBTYPE OF (IfcBuildingElement);
		OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
		OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;
```

**To clarify:**  This is the **data schema** for a window class. The window is defined using the EXPRESS data specification language ([ISO 10303-11](https://www.iso.org/standard/38047.html)).&#x20;

{% hint style="info" %}
This is an abstract representation of a window object.\
I.e. this window doesn't exist in our building.
{% endhint %}

### 2. E**xchange File Format Structure**

The **STEP-file,** [ISO 10303-21](https://www.iso.org/standard/63141.html), describes the window object like this:&#x20;

```javascript
#13067= IFCWINDOW('2cXV28XOjE6f6irgi0CO$D',#42,'M_Fixed:0915 x 1830mm:353953',$,'M_Fixed:0915 x 1830mm',#35337,#13061,'353953',1830.,914.999999999999);
```

{% hint style="info" %}
This is an representation of a physical window.\
I.e. this window exist somewhere in our building.
{% endhint %}

## Summary

IFC is an international standard by buildingSMART International. It has two parts;

1. A data schema, **EXPRESS**
2. A file format, **STEP-File**

{% tabs %}
{% tab title="EXPRESS" %}

```javascript
ENTITY IfcWindow
	SUBTYPE OF (IfcBuildingElement);
		OverallHeight : OPTIONAL IfcPositiveLengthMeasure;
		OverallWidth : OPTIONAL IfcPositiveLengthMeasure;
END_ENTITY;
```

{% endtab %}

{% tab title="STEP-File" %}

```javascript
#13067= IFCWINDOW('2cXV28XOjE6f6irgi0CO$D',#42,'M_Fixed:0915 x 1830mm:353953',$,'M_Fixed:0915 x 1830mm',#35337,#13061,'353953',1830.,914.999999999999);
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Use the tab above to switch between the **EXPRESS data schema** and the **STEP-file**
{% endhint %}

**In summary:**

* The data schema, **EXPRESS**, specifies: How an object should be represented&#x20;
* The file format, **STEP-file**, specifies: An actual object

Notice that we need both the data schema and the file format to understand our BIM model.&#x20;

**In other words:**

* The data schema is the **manual**
* The file format is the **usage** of the manual

**In object oriented programming words:**

* The data schema, EXPRESS, is the **class**
* The file format, STEP-file, is the **object**&#x20;

{% hint style="danger" %}
**Editor's note:**

I know that this can hard to understand. Please, take a good look at this article. Read it agian, think and reflect about the content.
{% endhint %}

&#x20;
