IFC Guide
Kapitola 03: PROJECT CONTAINER ELEMENT AND BASE SETTINGShtmlpdf orig
Kapitola 04: SPATIAL STRUCTURE AND SPACE ELEMENTShtmlpdf orig
Kapitola 05: BUILDING ELEMENTShtmlpdf orig
Kapitola 06: BUILDING SERVICES ELEMENTS AND RELATED CONCEPTShtmlpdf orig
Kapitola 09: SHAPE REPRESENTATION OF ELEMENTShtmlpdf orig
Kapitola 10: PROPERTIES OF ELEMENTShtmlpdf orig
Obsah kapitoly

Obsah kapitoly

5 Building Elements

All building element inherit the concepts and UoF associated to elements, which are provided by IfcElement. It includes:

5.1 Common concepts for all building elements

All building elements are exchanged by an IFC2× file as instances of subtypes of the abstract entity IfcBuildingElement. If the appropriate semantic classification exists in the IFC2× specification (and within the originating application), than the building element is exported by the appropriate subtype entity, or (if this is not the case) by the IfcBuildingEle­mentProxy entity.

Within Figure 20 all currently defined building elements are shown, those on top of the gray area are part of the stable IFC2× platform, those on white background are part of the additional domain layer.

The various subtypes define further attributes, which are introduced in the appropriate sub sections. In total each of the subtypes inherit the following attributes and inverse relationships from IfcElement:

Elements also have the following additional attributes for the UoF „Space Element Boundaries“ (see 4.2.4.1), „Element Opening Voiding“ (see 5.3) and „Opening Element Filling“.

ENTITY IfcElement
GlobalId : IfcGloballyUniqueId;
OwnerHistory : IfcOwnerHistory;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
ObjectType : OPTIONAL IfcLabel;
ObjectPlacement : OPTIONAL IfcObjectPlacement;
Representation : OPTIONAL IfcProductRepresentation;
Tag : OPTIONAL IfcIdentifier;
INVERSE
IsDefinedBy : SET OF IfcRelDefines;
HasAssociations : SET OF IfcRelAssociates;
HasAssignments : SET OF IfcRelAssigns;
Decomposes : SET [0:1] OF IfcRelDecomposes;
IsDecomposedBy : SET OF IfcRelDecomposes;
ReferencedBy : SET OF IfcRelAssignsToProduct;
ConnectedTo : SET OF IfcRelConnectsElements;
ConnectedFrom : SET OF IfcRelConnectsElements;
FillsVoids : SET [0:1] OF IfcRelFillsElement;
HasCoverings : SET OF IfcRelCoversBldgElements;
HasProjections : SET OF IfcRelProjectsElement;
HasOpenings : SET OF IfcRelVoidsElement;
HasPorts : SET OF IfcRelConnectsPortToElement;
IsConnectionRealization : SET OF IfcRelConnectsWithRealizingElements;
ProvidesBoundaries : SET OF IfcRelSpaceBoundary;
ContainedInStructure : SET [0:1] OF IfcRelContainedInSpatialStructure;
HasControlElements : SET [0:1] OF IfcRelFlowControlElements;
END_ENTITY;

figure21
Figure 21 : Hierarchy chart of building elements

5.2 Walls

Walls are exchanged by an IFC2× file as instances of IfcWall or IfcWallStandar­dCase.
Generally speaking, IfcWallStandardCase handles all cases, where a wall has a single material thickness (both in ground view and cross section) along the wall path, and IfcWall handles all other cases of walls.

Standard walls (supported by IfcWallStandar­dCase) include all cases for straight walls and curved walls under the following conditions:

figure22
Figure 22 : Examples for standard walls (ground view, cross section and elevation)

Specific walls (supported by IfcWall) include all cases of walls, that are not covered by the standard walls under the following conditions:

figure23 Figure 23 : Examples for specific walls (ground view, cross section and elevation)

The following units of functionality (UoF) are common for both types of wall definitions, but might be already discussed earlier, as they apply to a higher level in the hierarchy.

The UoF „placement“ for walls requires the use of IfcObjectPlacement, in IFC2× views where the grid is not supported, it is further restricted to IfcLocalPlacement.
For complete building model exchange the relative placement needs to be supported, and the spatial structure element, to which the wall is placed relatively, is normally the IfcBuildingStorey.

NOTE: If the UoF „element in space containment“ is provided (and walls are required to be contained within a spatial structure element for complete building model exchange) then the IfcLocalPlace­ment.Placemen­tRelTo shall point to the same spatial structure element.

5.2.1 Standard walls

The following units of functionality (UoF) have to be supported for standard walls, in addition to the UoF to be supported for all building elements ( 5.1) and for all walls ( 5.2):

5.2.1.1 Multiple geometric representations of standard walls.

The UoF of multiple shape representation of standard walls includes (at least) two shape representations for each instance of IfcWallStandar­dCase. The first represents the wall axis, the second represents the wall body.

The wall axis is given by an instance of IfcShapeRepre­sentation with the following conventions:

The wall axis also provides the reference line to relate the material layer set offset to the wall. The implicit material layer set offset line is the right edge of the first material layer (in the direction of the increasing parametric range of the geometric representation item for the wall axis).

The constraints of the RepresentationType „Curve2D“ are discussed in 9.1.4.1.1. In particular the geometric representation item has to have the dimensionality 2. Additional rules apply due to the limitations of the standard wall axis shape:

For straight walls, the Item is either an IfcTrimmedCurve with BasisCurve being an IfcLine, or an IfcPolyline with exactly two Points.

For curved walls the Item is an IfcTrimmedCurve with BasisCurve being an IfcCircle only. In both cases the sense is important (for the assignment of the material layer set) and may be influenced by the IfcTrimmedCur­ve.SenseAgree­ment (or the sequence of Points for the IfcPolyline). In case of trimmed curves, the trimming may be given by either trimming points or by the parametric boundaries.

figure24
Figure 24 : Shape representation for standard wall axes

The wall body is given by an instance of IfcShapeRepre­sentation with the following conventions:

The wall body represents the 3D shape of the standard wall. The foot print of the wall is given as a 2D arbitrary closed curve (by IfcArbitraryClo­sedProfileDef) with the start, end and eventually existing „in between“ connections already resolved.

Since the extrusion direction is vertical, there is no difference between the straight wall and the curved wall in terms of the sweep operation, both are represented by IfcExtrudedAre­aSolid with SweptArea of type IfcArbitraryClo­sedProfileDef and Depth equal to wall height (or the maximum height for clipped wall bodies).
In case non non-clipped walls having a single height, the IfcExtrudedAre­aSolid is exchanged.
In case of clipped walls (having clippings on either lower or upper boundary of the wall) the final wall body is given as a Boolean difference of the extruded solid and one or more half space solids (IfcHalfSpaceSolid or subtypes).

NOTE: It is recommended practice (although not required by the specification) to align the extrusion coordinate system (IfcSweptArea­Solid.Position) with the object coordinate system (IfcLocalPlace­ment.Relative­Placement) if possible.

5.2.1.2 Standard walls with equal height

The constraints of the RepresentationType „SweptSolid“ are discussed in 9.1.4.1.4.2. In particular the geometric representation item has to have the dimensionality 3.

Additional rules apply due to the limitations of the standard wall body shape for single height, non-clipped walls:

figure25
Figure 25 : Shape representation for standard, non-clipped wall bodies

In order to retrieve the wall parameter for total wall thickness and offset the material layer information have to be provided ( 5.2.1.4).
The consistency between the IfcMaterialLa­yerSet.TotalThic­kness and the offset between the two edges of the IfcArbitraryClo­sedProfileDef­.OuterCurve has to be guaranteed by the sending application populating the IFC2× exchange model.

The wall body may be clipped on its lower and/or upper side. This e.g., provides for walls underneath sloped roofs or on top of sloped ramps.
Also gable walls are generated by clipping operations. There is no restriction regarding the number of clipping surfaces, the only restriction is, that the clipping surface is a plane (and cannot be a cylindrical or any other non-planar elementary surface). The

figure25
Figure 25 shows examples of standard clipped walls.

figure26
Figure 26 : Examples of standard clipped wall bodies (ground view and elevation)

5.2.1.3 Standard walls with varying height

Each clipping is represented by an IfcBooleanClip­pingResult, where the FirstOperand is the IfcExtrudedAre­aSolid (of the total wall body) for the first clipping, or the IfcBooleanClip­pingResult of a previous clipping.

The SecondOperand is an IfcHalfSpaceSolid (or a subtype of it). There are two different half space solids available:

figure27
Figure 27 : Example of bounded and unbounded clipping planes

The use of IfcBooleanClip­pingResult and an example of a clipped wall, including the IFC file, is given in 9.1.4.1.4.3.1. More then one clipping can be applied to the wall body.

Additional rules apply due to the limitations of the standard wall body shape for single height, clipped walls:

There are further restriction to the use of clipping for walls:

5.2.1.4 Material layer set usage assignment

Each standard wall requires the provision of the material layer set definitions. This UoF is described in 10.2.1.3.

The IfcMaterialLayerSet containing the material layer sequence and layer thickness is assigned to the IfcWallStandardCase by using

Note10
Strictly speaking, this is not an half space anymore, as it does not divide the domain into exactly two parts. It is the Boolean intersection of the body of the unlimited extrusion of the polygonal bounded area and the body of the half space.

Thereby the same instance of IfcMaterialLa­yerSetUsage can be shared among several walls. As mentioned earlier, the consistency of the material layer set usage and the foot print geometry has to be guaranteed by the sending application, as this is not covered by the IFC internal EXPRESS rules. The following examples demonstrate the use of the IfcMaterialLa­yerSetUsage for different assignments of material layer sets.

figure28
Figure 28 : Examples of material layer set usage

The IfcMaterialLayerSet is the same in all three cases, it is given as
#15=IFCMATERIALLAYERSET((#16,#17,#18),'Isolated outer wall type 1');
#16=IFCMATERIALLAYER(#19,200.,$);
#17=IFCMATERIALLAYER(#20,80.,$);
#18=IFCMATERIALLAYER(#21,70.,$);
#19=IFCMATERIAL('Concrete');
#20=IFCMATERIAL('Mineral wool');
#21=IFCMATERIAL('Brick');

However the IfcMaterialLa­yerSetUsage, referred to by the IfcRelAssocia­tesMaterial differs:

/* in case of wall 1 */
#3=IFCRELASSOCIATESMATERIAL('abcdefghijklmnopqrst02',#2,$,$,(#1),#14);
#14=IFCMATERIALLAYERSETUSAGE(#15,.AXIS2.,.POSITIVE.,0.);

/* in case of wall 2 */
#3=IFCRELASSOCIATESMATERIAL('abcdefghijklmnopqrst02',#2,$,$,(#1),#14);
#14=IFCMATERIALLAYERSETUSAGE(#15,.AXIS2.,.NEGATIVE.,0.);

/* in case of wall 3 */
#3=IFCRELASSOCIATESMATERIAL('abcdefghijklmnopqrst02',#2,$,$,(#1),#14);
#14=IFCMATERIALLAYERSETUSAGE(#15,.AXIS2.,.POSITIVE.,-100.);

The value and direction of the OffsetFromRefe­renceLine is independent of the DirectionSense attribute of the IfcMaterialLa­yerSetUsage. If the DirectionSense is NEGATIVE, then the material layer set is mirrored at the offset line.

Using the same IfcMaterialLayerSet as in Figure 27 the new cases look like:

figure29
Figure 29 : Examples of direction sense agreements at material layer ser usage

Again only the IfcMaterialLa­yerSetUsage, referred to by the IfcRelAssocia­tesMaterial, differs:

/* in case of wall 4 */
#3=IFCRELASSOCIATESMATERIAL('abcdefghijklmnopqrst02',#2,$,$,(#1),#14);
#14=IFCMATERIALLAYERSETUSAGE(#15,.AXIS2.,.POSITIVE.,100.);

/* in case of wall 5 */
#3=IFCRELASSOCIATESMATERIAL('abcdefghijklmnopqrst02',#2,$,$,(#1),#14);
#14=IFCMATERIALLAYERSETUSAGE(#15,.AXIS2.,.NEGATIVE.,100.);

/* in case of wall 6 */
#3=IFCRELASSOCIATESMATERIAL('abcdefghijklmnopqrst02',#2,$,$,(#1),#14);
#14=IFCMATERIALLAYERSETUSAGE(#15,.AXIS2.,.NEGATIVE.,-100.);

The following additional agreements are made on the usage of the attribute LayerSetDirection of IfcMaterialLa­yerSetUsage for walls.

figure30
Figure 30 : Layer set directions in case of straight walls

In consequence, material layers for walls shall only be used for standard (parallel) layering, and should not be adapted for any more complex internal structures, like for elemented or stub walls.

In case of round walls the LayerSetDirection of IfcMaterialLa­yerSetUsage for walls has the following meaning:

figure31
Figure 31 : Layer set directions in case of round walls

5.2.2 Specific walls

The following units of functionality (UoF) have to be supported for specific walls, in addition to the UoF to be supported for all building elements (→ 5.1) and for all walls ( 5.2):

A general rule applies to the shape representation of all specific walls – it shall only contain a single body (either as extrusion

NOTE: This rule applies to all building elements that can have openings, as otherwise it would be difficult to determine to which body the opening element applies.

5.2.2.1 Multiple shape representation for specific walls (of type IfcWall)

The UoF of multiple shape representation of specific walls includes (at least) two shape representations for each instance of IfcWall.

The first represents the wall axis, the second represents the wall body. The wall axis representation is described in 5.2.1.1, the following additional agreements are applicable for wall axis for specific walls:

• the provision of a wall axis is optional for walls with „Brep“ shape representations of the wall body, however it should be provided, whenever it is possible and meaningful (the omission of a wall axis means that the wall geometry is so irregular, that it can only be regarded as a piece of material),

• the provision of a wall axis is mandatory for walls with „SweptSolid“ shape representations of the wall body. An IfcWall with “SweptSolid” shape representation is used for walls with polygonal footprint, that do not have parallel sides (are a constant thickness). The extrusion direction is vertical (i.e. perpendicular to the footprint).

5.2.2.2 Specific walls with polygonal footprint

If the wall body for an IfcWall is given as a „SweptSolid“ shape representation, the following applies.

The footprint geometry is given as an IfcArbitraryClo­sedProfileDef without voids, that represents the complete footprint (including start and end caps). The IfcExtrudedAre­aSolid.Depth represents the height of the wall. In particular:

The following figure shows examples for walls with polygonal footprint that should be exchanged as IfcWall with “SweptSolid” shape representation.

figure32
Figure 32 : Examples for polygonal walls

5.2.2.3 Specific walls with varying height

If the polygonal wall has cutting, e.g. under a roof slab, it is given as a “Clipping” shape representation, where the wall body is given by the extrusion, as explained above, and the clipping is given by IfcHalfSpaceSolid (or its subtypes).

For the clipping part, the convention to use the Boolean operation by the IfcBooleanClip­pingResult are the same as for standard walls, see 5.2.1.3.

5.2.2.4 Specific walls with different layer heights

If the wall is defined by multiple layers, where some layers have either a different height or have different vertical offsets compared with the other layers, then this wall shall be treated as a special wall.

As some systems are able to handle such wall definition parametrically, but the IFC specification for layer sets only allow for thickness to be given parametrically, such shapes have to be exported by explicit geometric shape.

An example of such a wall is given below in Figure 32.

figure33
Figure 33 : Example of a wall with different layer heights

The fallback position for the exchange of such walls is to use the RepresentationType „Brep“ for Representatio­nIdentifier “Body” in conjunction with RepresentationType “Curve2D” (or “GeometricSet”) for Representatio­nIdentifier “Axis”. Given the example in Figure 32 the exchange file should look like:

#77=IFCWALLSTANDARDCASE('295H6hv1z5T9dhGMC7AJX1',#16,$,$,$,#28,#37,$);
#37=IFCPRODUCTDEFINITIONSHAPE($,$,(#36,#76));
#36=IFCSHAPEREPRESENTATION(#11,'Axis','GeometricSet',(#35));
#35=IFCTRIMMEDCURVE(#32,(IFCPARAMETERVALUE(0.),#33),(IFCPARAMETERVALUE(1.),#34),.T.,.CAR TESIAN.);
#32=IFCLINE(#29,#31);
#29=IFCCARTESIANPOINT((0.,0.));
#31=IFCVECTOR(#30,10.);
#30=IFCDIRECTION((1.,0.));
#33=IFCCARTESIANPOINT((0.,0.));
#34=IFCCARTESIANPOINT((10.,0.));
#76=IFCSHAPEREPRESENTATION(#11,'Body','Brep',(#75));
#75=IFCFACETEDBREP(#74);
#74=IFCCLOSEDSHELL((#52,#55,#58,#61,#64,#67,#70,#73));
#52=IFCFACE((#51));
#51=IFCFACEOUTERBOUND(#50,.T.);
#50=IFCPOLYLOOP((#44,#49,#47,#45));
#55=IFCFACE((#54));
#54=IFCFACEOUTERBOUND(#53,.T.);
#53=IFCPOLYLOOP((#45,#46,#43,#41,#40,#44));
#58=IFCFACE((#57));
#57=IFCFACEOUTERBOUND(#56,.T.);
#56=IFCPOLYLOOP((#48,#42,#43,#46));
#61=IFCFACE((#60));
#60=IFCFACEOUTERBOUND(#59,.T.);
#59=IFCPOLYLOOP((#47,#49,#39,#38,#42,#48));
#64=IFCFACE((#63));
#63=IFCFACEOUTERBOUND(#62,.T.);
#62=IFCPOLYLOOP((#49,#44,#40,#39));
#67=IFCFACE((#66));
#66=IFCFACEOUTERBOUND(#65,.T.);
#65=IFCPOLYLOOP((#47,#48,#46,#45));
#70=IFCFACE((#69));
#69=IFCFACEOUTERBOUND(#68,.T.);
#68=IFCPOLYLOOP((#41,#43,#42,#38));
#73=IFCFACE((#72));
#72=IFCFACEOUTERBOUND(#71,.T.);
#71=IFCPOLYLOOP((#41,#38,#39,#40));
#38=IFCCARTESIANPOINT((10.,0.2,0.));
#39=IFCCARTESIANPOINT((10.,0.12,0.));
#40=IFCCARTESIANPOINT((0.,0.12,0.));
#41=IFCCARTESIANPOINT((0.,0.2,0.));
#42=IFCCARTESIANPOINT((10.,0.2,2.7));
#43=IFCCARTESIANPOINT((0.,0.2,2.7));
#44=IFCCARTESIANPOINT((0.,0.12,0.2));
#45=IFCCARTESIANPOINT((0.,-0.12,0.2));
#46=IFCCARTESIANPOINT((0.,-0.12,2.7));
#47=IFCCARTESIANPOINT((10.,-0.12,0.2));
#48=IFCCARTESIANPOINT((10.,-0.12,2.7));
#49=IFCCARTESIANPOINT((10.,0.12,0.2));

Using RepresentationType „Clipping“ for Representatio­nIdentifier “Body” is also allowed for the exchange of such walls. In this case also the full exchange of layer set information can be consistently maintained.

5.2.2.5 Specific walls with BREP geometry

If the wall body for an IfcWall is given as a „Brep“ shape representation, the following applies.
The Brep geometry already resolves all modifications and features of the wall (such as clippings of the lower or upper side of the wall, or the start and end connections), beside the cut-out of openings.

Openings are given (common to all walls) by the IfcOpeningElement and the IfcRelVoidsElement. This means, that no further Boolean operations (beside for the opening) shall be applied to the Brep wall body, or there are no clipping or other Boolean operations, as expressed by IfcBooleanResult or IfcBooleanClip­pingResult.

The constraints of the RepresentationType „Brep“ are discussed in 9.1.4.1.4.1. In particular the geometric representation item has to have the dimensionality 3. Additional rules apply due to the limitations of the specific wall body shape.

5.2.2.6 Fallback for compatibility with earlier versions of IFC wall geometry

As a fallback to maintain a level of downward compatibility the wall body can also be given by a „SweptSolid“ shape representation, using horizontal extrusion (along the wall axis).

NOTE: Horizontally extruded specific walls of type IfcWall shall only be used in conjunction with earlier versions of IFC as they do not provide the same functionality as IfcWallStandardCase (particular for start and end caps). The use of IfcWallStandardCase is strongly recommended for implementations of IFC2×.

The constraints of the RepresentationType „SweptSolid“ are discussed in 9.1.4.1.4.2. In particular the geometric representation item has to have the dimensionality 3. Additional rules apply due to the limitations of the specific wall body shape for single height, non-clipped walls, with horizontal extrusions along the wall axis.

5.2.3 Special cases of wall configurations

The following shows special cases for walls and guidelines on how to solve them. Some CAD systems keep a wall as a single entity, even if it is totally split into two parts, e.g. by placing a column in the middle of it, or by X-type wall connections.

NOTE: In the IFC model, a wall has to have a single body, it is not allowed (according to the current view definitions) to export a wall having two totally separated wall bodies (either as swept solids, or as BREP). Therefore the sending system has to split the wall into two walls before exporting it to IFC.

The following figures show some examples, where a wall is split into two parts:

figure35
Figure 35 : Special cases of walls split or cut out by columns The polygonal walls are exported as IfcWall, following the conventions as explained in 5.2.2.2. In all cases there is the fall back position to export the wall body as a BREP shape representation as explained in 5.2.2.4.

5.3 Openings

Openings are exchanged in IFC2× files as instances of IfcOpeningElement. An IfcOpeningElement forms a void, which is created within another element.

This is primarily independent from the kind of element, which is voided (like a wall opening, or a slab opening, or an opening in a roof) and also from the fact, whether the void goes through the whole thickness of the element (a normal opening) are whether it is only partially voided (like a recess, chase or trench).

In addition to the UoF provided for all elements (see 5), each opening has three additional UoF:

The relationship to the element which is voided by the opening is provided by IfcRelVoidsElement, the provision of this relationship is mandatory for each instance of IfcOpeningElement. An opening may have a filling (a window or a door) inserted, in this case it is referenced by IfcRelFillsEle­ment. The

figure35
Figure 35 shows the relations between elements and openings:

figure36
Figure 36 : Relationships between building element and opening

Within the view definitions and implementation guidelines restrictions are defined about the subtypes of IfcBuildingElement which can play the role of being voided or being a filling.
Normally only IfcWindow and IfcDoor (as subtypes of IfcBuildingElement) are used as fillings. IfcWall, IfcSlab, but also IfcBeam, IfcColumn, IfcStairFlight, IfcRampFlight, IfcCovering and IfcBuildingEle­mentProxy should be normally supported as elements that can be voided by openings.

The opening local placement shall be given relative to the local placement of the building element, which is voided11. Therefore the IfcLocalPlace­ment.Placemen­tRelTo shall point to the local placement of the voided building element.

The body of the opening is placed relative to the local placement of the opening. The standard geometric representation of the body is given by:

The IfcExtrudedAre­aSolid.Positi­on needs to encounter for the default extrusion direction, being along the local z-Axis of this placement of the extruded solid. If a parameterized subtype of IfcProfileDef is used to describe the opening profile, the 2D placement of the profile is given relative to the XY plane of the IfcExtrudedAre­aSolid.Positi­on.

The conventions about the orientations of the local placement and extruded area solid position depend on the kind of opening. However a general convention applies to all: • The 2D profile placement – the Position attribute of all parameterized subtypes of IfcProfileDef shall not be rotated, i.e. the IfcAxisPlacemen­t2D.RefDirecti­on is always [1.,0.] (or omitted, then it defaults to [1.,0.]).

The following example shows a wall opening, where the local placement of the opening is calculated as intermediate coordinate system between the IfcExtrudedAre­aSolid.Positi­on and the local placement of the wall.

In this example the IfcExtrudedAre­aSolid.Positi­on is placed centric (for the position of the rectangular opening profile at IfcAxisPlacemen­t2D.location = [0.,0.], however it is also permissible to place the IfcExtrudedAre­aSolid.Positi­on at a corner and move the profile through its 2D placement.

Note11 Only within view definitions, that generally foresee global placements for all elements, this requirement should be waived.

figure37
Figure 37 : Example of an opening in a wall

#1=IFCWALLSTANDARDCASE('abcdefghijklmnopqrst01', #2, $, $, $, #3, #4, $);
#3=IFCLOCALPLACEMENT($, #10);
#10=IFCAXIS2PLACEMENT3D(#16, $, $);
#16=IFCCARTESIANPOINT((2.,1.,0.));
#4=IFCPRODUCTDEFINITIONSHAPE($, $, (#11,#13,#211));
/* opening with relationship, local placement (red in figure) rel. to the wall
#81=IFCOPENINGELEMENT('2DVz9Ik7nDE8UYM00UgOTP',#2,$,'',$,#80,#75,$);
#82=IFCRELVOIDSELEMENT('0CFN5X3K519evNPGT30ZIp',#2,$,$,#1,#81);
#80=IFCLOCALPLACEMENT(#3,#79);
#76=IFCCARTESIANPOINT((1.9,-0.1,1.));
#77=IFCDIRECTION((-1.,0.,0.));
#78=IFCDIRECTION((0.,0.,1.));
#79=IFCAXIS2PLACEMENT3D(#76,#77,#78);
#75=IFCPRODUCTDEFINITIONSHAPE($,$,(#74));
/* opening geometry with extruded area solid placement (green in figure)
#74=IFCSHAPEREPRESENTATION(#111,'Body','SweptSolid',(#72));
#72=IFCEXTRUDEDAREASOLID(#65,#70,#71,0.2);
#65=IFCRECTANGLEPROFILEDEF(.AREA.,$,#64,1.5,1.);
#64=IFCAXIS2PLACEMENT2D(#62,#63);
#62=IFCCARTESIANPOINT((0.,0.));
#63=IFCDIRECTION((1.,0.));
#70=IFCAXIS2PLACEMENT3D(#67,#68,#69);
#67=IFCCARTESIANPOINT((0.75,0.,0.5));
#68=IFCDIRECTION((0.,1.,0.));
#69=IFCDIRECTION((1.,0.,0.));
#71=IFCDIRECTION((0.,0.,1.));

The advanced geometric representation of the opening body is given by the B-rep representation:

Since B-rep representations can not be translated back into the parametric description of profile based opening geometry and should therefore only be used for rare exception cases.

5.3.1 Openings in walls

Openings in walls are inserted by placing the IfcOpeningElement into the local coordinate system of the IfcWall. There are no additional conventions on placing the local coordinate system, although it is preferable to use a recognizable style, e.g. having the opening z-axis pointing into the same direction as the wall z-axis.

The IfcOpeningElement can be used to create openings and niches within a wall. The attribute IfcOpeningEle­ment.ObjectTy­pe shall be used to differentiate the usage, for openings:

In contrary the placement of the opening body, the IfcExtrudedAre­aSolid.Positi­on, is required to follow a particular pattern. The IfcExtrudedAre­aSolid.Positi­on shall: openings with parallel reveals openings with shaped reveals

figure38
Figure 38 : different ways to create openings in straight walls

figure39
Figure 39 : different ways to create openings in round walls

The Position of the parameterized profile, e.g. the IfcRectanglePro­fileDef.Positi­on should not provide a rotation, but may translate the profile within the XY plane of the extrusion body coordinate system.

5.3.1.1 Openings in straight standard walls

The following examples show how the local placements and the opening geometry is defined for a rectangular opening within a straight wall. It should be noted, that there is more than one possibility to define the transformations.
Strict requirements are only given to the orientations of the extrusion body position (see above) and that the 2D placement of the profile shall not be rotated.
The local placement of the opening could have any orientation (see also Figure 36). The following conventions are used in the figures: red is the local placement of the opening, green is the position of the extruded body, and blue is the position of the profile.

figure4X Figure 40 : Examples of an opening in a wall

Taken the previous example, the following cutouts from the *.ifc files would reflect the exchange, both (and any other local placement of the opening) are equally valid:

/* opening with relationship and local placement rel. to the wall */
#81=IFCOPENINGELEMENT('2DVz9Ik7nDE8UYM00UgOTP',#2,$,'',$,#80,#75,$);
#82=IFCRELVOIDSELEMENT('0CFN5X3K519evNPGT30ZIp',#2,$,$,#1,#81);
#80=IFCLOCALPLACEMENT(#3,#79);
#76=IFCCARTESIANPOINT((0.9,-0.1,1.));
#77=IFCDIRECTION((0.,0.,1.));
#78=IFCDIRECTION((1.,0.,0.));
#79=IFCAXIS2PLACEMENT3D(#76,#77,#78);
#75=IFCPRODUCTDEFINITIONSHAPE($,$,(#74));
/* opening geometry with extruded area solid placement */
/* for the left example in Figure 65 */
#74=IFCSHAPEREPRESENTATION(#111,'Body','SweptSolid',(#72));
#72=IFCEXTRUDEDAREASOLID(#65,#70,#71,0.2);
#65=IFCRECTANGLEPROFILEDEF(.AREA.,$,#64,1.5,1.);
#64=IFCAXIS2PLACEMENT2D(#62,#63);
#62=IFCCARTESIANPOINT((0.,0.));
#63=IFCDIRECTION((1.,0.));
#70=IFCAXIS2PLACEMENT3D(#67,#68,#69);
#67=IFCCARTESIANPOINT((0.5,0.,0.75));
#68=IFCDIRECTION((0.,1.,0.));
#69=IFCDIRECTION((0.,0.,1.));
#71=IFCDIRECTION((0.,0.,1.));
/* for the right example Figure 39 */
#74=IFCSHAPEREPRESENTATION(#111,'Body','SweptSolid',(#72));
#72=IFCEXTRUDEDAREASOLID(#65,#70,#71,0.2);
#65=IFCRECTANGLEPROFILEDEF(.AREA.,$,#64,1.5,1.);
#64=IFCAXIS2PLACEMENT2D(#62,#63);
#62=IFCCARTESIANPOINT((0.75,0.5));
#63=IFCDIRECTION((1.,0.));
#70=IFCAXIS2PLACEMENT3D(#67,#68,#69);
#67=IFCCARTESIANPOINT((0.,0.,0.));
#68=IFCDIRECTION((0.,1.,0.));
#69=IFCDIRECTION((1.,0.,0.));
#71=IFCDIRECTION((0.,0.,1.));

5.3.1.2 Openings in round walls

The standard definition of openings in round walls is given by the same definition of the IfcExtrudedAre­aSolid, as for straight walls. The local placement of the opening is given by providing one axis being parallel to the tangent of the wall face at the center of the opening (or as a ray through the corners of the opening at the same side and height.

The position of the IfcExtrudedAre­aSolid is given taking the above mentioned requirements for the x/y/z directions into account – the extrusion will then create parallel reveals on each opposite sides of the opening.

The following example shows an opening in a round wall, where the local placement of the opening is calculated as an intermediate coordinate system between the IfcExtrudedAre­aSolid. Position and the local placement of the wall. In this example the IfcExtrudedAre­aSolid.

Position is placed centric (for the position of the rectangular opening profile at IfcAxisPlacemen­t2D.location = [0.,0.]), however it is also permissible to place the IfcExtrudedAre­aSolid.Positi­on at a corner and move the profile through its 2D placement. The IfcOpeningEle­ment.ObjectPla­cement is rotated by the tangent of the wall at the middle of the opening.

figure41
Figure 41 : Opening inserted into a round wall

It should be noted again, that there are several possible variations of the local placement for the opening and the position of the extrusion body. The following part of the .ifc file shows the exchange of openings in round walls:

/* definition of the wall and local placement */
#83=IFCWALLSTANDARDCASE('3fFqW2FMDFBwdjJLgDdZvV',#16,$,'',$,#31,#40,$);
#31=IFCLOCALPLACEMENT($,#30);
#30=IFCAXIS2PLACEMENT3D(#27,#28,#29);
#29=IFCDIRECTION((-1.,0.,0.));
#28=IFCDIRECTION((0.,0.,1.));
#27=IFCCARTESIANPOINT((7.,9.,0.));
/* definition of the opening, relation to the wall and local placement */
#108=IFCOPENINGELEMENT('3pqcEFeSnAyffagvfFhnEo',#16,$,'',$,#107,#102,$);
#109=IFCRELVOIDSELEMENT('1XARQjIFH3_O8ENp3HGBc8',#16,$,$,#83,#108);
#107=IFCLOCALPLACEMENT(#31,#106);
#106=IFCAXIS2PLACEMENT3D(#103,#104,#105);
#103=IFCCARTESIANPOINT((4.048141905757483,1.658964875429065,1.));
#104=IFCDIRECTION((-0.7071067811865475,-0.7071067811865476,0.));
#105=IFCDIRECTION((0.,0.,1.));
/* definition of the shape of the opening */
#102=IFCPRODUCTDEFINITIONSHAPE($,$,(#101));
#101=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#99));
#99=IFCEXTRUDEDAREASOLID(#92,#97,#98,0.5);
#92=IFCRECTANGLEPROFILEDEF(.AREA.,$,#91,1.5,1.);
#91=IFCAXIS2PLACEMENT2D(#89,#90);
#89=IFCCARTESIANPOINT((0.,0.));
#90=IFCDIRECTION((1.,0.));
#97=IFCAXIS2PLACEMENT3D(#94,#95,#96);
#94=IFCCARTESIANPOINT((0.75,0.,0.5));
#95=IFCDIRECTION((0.,1.,0.));
#96=IFCDIRECTION((1.,0.,0.));
#98=IFCDIRECTION((0.,0.,1.));

Similarly to the case for openings in straight walls, also for openings in round walls there are different possibilities for the coordinate systems. Below is one additional example: Figure 42 : Opening inserted into a round wall with different local placement The following extract of the .ifc file shows the different settings of the placement and position attributes. It is based on the same example as the previous file, however the local placement is different and the offset for the centric insertion of the opening profile is created by offsetting the 2D profile placement.

/* definition of the opening, relation to the wall and local placement */
#108=IFCOPENINGELEMENT('3pqcEFeSnAyffagvfFhnEo',#16,$,'',$,#107,#102,$);
#109=IFCRELVOIDSELEMENT('1XARQjIFH3_O8ENp3HGBc8',#16,$,$,#83,#108);
#107=IFCLOCALPLACEMENT(#31,#106);
#106=IFCAXIS2PLACEMENT3D(#103,#104,#105);
#103=IFCCARTESIANPOINT((3.78216679,1.92493999,1.));
#104=IFCDIRECTION((0.,0.,1.));
#105=IFCDIRECTION((-0.7071067811865475,-0.7071067811865476,0.));
/* definition of the shape of the opening */
#102=IFCPRODUCTDEFINITIONSHAPE($,$,(#101));
#101=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#99));
#99=IFCEXTRUDEDAREASOLID(#92,#97,#98,0.5);
#92=IFCRECTANGLEPROFILEDEF(.AREA.,$,#91,1.5,1.);
#91=IFCAXIS2PLACEMENT2D(#89,#90);
#89=IFCCARTESIANPOINT((0.75,0.5));
#90=IFCDIRECTION((1.,0.));
#97=IFCAXIS2PLACEMENT3D(#94,#95,#96);
#94=IFCCARTESIANPOINT((0.,0.,0.));
#95=IFCDIRECTION((0.,1.,0.));
#96=IFCDIRECTION((0.,0.,1.));
#98=IFCDIRECTION((0.,0.,1.));

The definition of the opening geometry by an extrusion perpendicular to the wall face creates an opening with the reveals being parallel to each other. This is only one example for openings in round walls, a different example is inserting the openings with reveals along the radii.

Those openings where the reveals shall be radial (see Figure 38) need to be exchanged as openings with ObjectType = ‚OpeningAdvan­ced‘, and:

wall base and extruded along the wall extrusion direction.

It should be noted that only rectangular openings with radial reveals can be exchanged this way, any other opening shape with radial reveals need to be exchanged using B-rep geometry.

5.3.2 Niches and recesses

Niches and recesses (or chase, trenches, etc.) are described within IFC2× as IfcOpeningElement, where (for standard Swept Solid geometric representation) the extrusion depth, the IfcExtrudedAre­aSolid.

Depth determines the thickness of the recess (in other cases of B-rep geometric representation, the exact body of the opening geometry).
In order to determine the difference to a „normal“ opening, all instances of an IfcOpeningElement, representing a niche or recess, should be clearly labeled by the IfcOpeningEle­ment.ObjectTy­pe = „Recess“. #108=IFCOPENIN­GELEMENT(‚3pqcE­FeSnAyffagvfFhnE­o‘,#16,$,$,‚Re­cess‘,#107,#102­,$);

The geometric representation of niches and recesses follows the representation of openings, the convention of applying the local coordinate system and the position of the extrusion body as well.
The position relative to the wall thickness and the direction of the extrusion is essential to determine the correct side where the niche or recess appears.

figure43
Figure 43 : Recess and niche in wall and slab

The following example, which is based on Figure 36 shows the definition of a niche within a straight wall. The IfcOpeningElement is labeled as ‚Recess‘ and positioned according to a calculated local placement.

The extrusion body has an extrusion of 0.1m, which is the thickness of the niche. The position of the extrusion body is centric to the rectangular profile, and the profile placement is [0.,0.]. Again, different positions (as given for the openings in Figure 39) are possible.

figure44
Figure 44 : Example of a niche in a straight wall

#1=IFCWALLSTANDARDCASE('abcdefghijklmnopqrst01', #2, $, $, $, #3, #4, $);
#3=IFCLOCALPLACEMENT($, #10);
#10=IFCAXIS2PLACEMENT3D(#16, $, $);
#16=IFCCARTESIANPOINT((2.,1.,0.));
#4=IFCPRODUCTDEFINITIONSHAPE($, $, (#11,#13,#211));
/* opening with relationship, local placement (red in figure) rel. to the wall
#81=IFCOPENINGELEMENT('2DVz9Ik7nDE8UYM00UgOTP',#2,$,$,'Recess',#80,#75,$);
#82=IFCRELVOIDSELEMENT('0CFN5X3K519evNPGT30ZIp',#2,$,$,#1,#81);
#80=IFCLOCALPLACEMENT(#3,#79);
#76=IFCCARTESIANPOINT((1.9,-0.1,0.));
#77=IFCDIRECTION((-1.,0.,0.));
#78=IFCDIRECTION((0.,0.,1.));
#79=IFCAXIS2PLACEMENT3D(#76,#77,#78);
#75=IFCPRODUCTDEFINITIONSHAPE($,$,(#74));
/* opening geometry with extruded area solid placement (green in figure)
#74=IFCSHAPEREPRESENTATION(#111,'Body','SweptSolid',(#72));
#72=IFCEXTRUDEDAREASOLID(#65,#70,#71,0.1);
#65=IFCRECTANGLEPROFILEDEF(.AREA.,$,#64,1.,1.);
#64=IFCAXIS2PLACEMENT2D(#62,#63);
#62=IFCCARTESIANPOINT((0.,0.));
#63=IFCDIRECTION((1.,0.));
#70=IFCAXIS2PLACEMENT3D(#67,#68,#69);
#67=IFCCARTESIANPOINT((0.5,0.,0.5));
#68=IFCDIRECTION((0.,1.,0.));
#69=IFCDIRECTION((1.,0.,0.));
#71=IFCDIRECTION((0.,0.,1.));

5.3.3 Openings and recesses combined

Some openings have a more complicated shape, either by using shaped reveals, or by using two separate shapes for the front and back part of the opening. These openings should be exchanged as:

Examples of this type of openings include:

figure45 Figure 45 : Example for special opening types

Such openings shall be exported as one IfcOpening with the ObjectType “Opening” (the smaller part, creating the full opening), and one IfcOpening with the ObjectType “Recess” (the bigger, additional part).

figure46
Figure 46 : Exchange of special opening types

The default exchange is 1 opening and 1 recess. However if the user has created the special opening in the original system by two recesses (or subtraction bodies) by its own intention, the exchange of two recesses is permitted.

Both, the opening and the recess, has the “SweptSolid” shape representation, extruded perpendicular to the wall face.

More complex opening types should be exchanged as openings with BREP shape representations. This is the e.g. the case, if the reveals are oblique.

figure47
Figure 47 : Example of a special opening type to be exchanged as BREP

Note: If an opening is exchanged with BREP shape representation, or as two recesses, and it has a door or a window as a filling, the window or door geometry has to be exchanged with BREP shape representation as well.

5.3.4 Opening in slabs

Openings in slabs are inserted by placing the IfcOpeningElement into the local coordinate system of the IfcSlab.

There are no additional conventions on placing the local coordinate system, although it is preferable to use a recognizable style, e.g. having the opening z-axis pointing into the same direction as the slab z-axis.

The IfcOpeningElement can be used to create openings and niches within a slab. The attribute IfcOpeningEle­ment.ObjectTy­pe shall be used to differentiate the usage, for openings:

figure48
Figure 48 : Example of slab opening

Example: The following example shows the definition of an opening within a slab. Here the rectangular opening is exported as IfcArbitraryClo­seProfileDef with an OuterCurve of type IfcPolyline, another possibility would be IfcRectanglePro­fileDef.

The ObjectType attribute at the entity IfcOpeningElement is omitted, therefore it defaults to ‘Opening’.

#70=IFCRELVOIDSELEMENT('3Zn4jNSWfEZgsTKxbdGa8R',#16,$,$,#47,#69);
/* definition of the slab */
#47=IFCSLAB('0UjlDeHfTA5BfnW65$ZKfb',#16,$,'',$,#28,#46,$,.FLOOR.);
#28=IFCLOCALPLACEMENT(#22,#27);
/* local placement data of building storey skipped */
#27=IFCAXIS2PLACEMENT3D(#24,#25,#26);
#24=IFCCARTESIANPOINT((5.,5.,0.));
#25=IFCDIRECTION((0.,0.,1.));
#26=IFCDIRECTION((1.,0.,0.));
#46=IFCPRODUCTDEFINITIONSHAPE($,$,(#45));
#45=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#43));
#43=IFCEXTRUDEDAREASOLID(#37,#41,#42,0.2);
#37=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#36);
#36=IFCPOLYLINE((#29,#30,#31,#32,#33,#34,#35));
#29=IFCCARTESIANPOINT((0.,0.));
#30=IFCCARTESIANPOINT((15.,0.));
#31=IFCCARTESIANPOINT((15.,5.));
#32=IFCCARTESIANPOINT((10.,5.));
#33=IFCCARTESIANPOINT((10.,10.));
#34=IFCCARTESIANPOINT((0.,10.));
#35=IFCCARTESIANPOINT((0.,0.));
#41=IFCAXIS2PLACEMENT3D(#38,#39,#40);
#38=IFCCARTESIANPOINT((0.,0.,0.));
#39=IFCDIRECTION((0.,0.,1.));
#40=IFCDIRECTION((1.,0.,0.));
#42=IFCDIRECTION((0.,0.,1.));
/* definition of the slab opening */
#69=IFCOPENINGELEMENT('1JXjB0oPbDTe7dzWWyuO6x',#16,$,$,$,#52,#68,$);
#52=IFCLOCALPLACEMENT(#27,#51);
/* placement relative to the slab placement */
#51=IFCAXIS2PLACEMENT3D(#48,#49,#50);
#48=IFCCARTESIANPOINT((10.,1.,0.));
#49=IFCDIRECTION((0.,0.,1.));
#50=IFCDIRECTION((1.,0.,0.));
#68=IFCPRODUCTDEFINITIONSHAPE($,$,(#67));
#67=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#65));
#65=IFCEXTRUDEDAREASOLID(#59,#63,#64,0.2);
#59=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#58);
#58=IFCPOLYLINE((#53,#54,#55,#56,#57));
#53=IFCCARTESIANPOINT((0.,3.));
#54=IFCCARTESIANPOINT((0.,0.));
#55=IFCCARTESIANPOINT((3.,0.));
#56=IFCCARTESIANPOINT((3.,3.));
#57=IFCCARTESIANPOINT((0.,3.));
#63=IFCAXIS2PLACEMENT3D(#60,#61,#62);
#60=IFCCARTESIANPOINT((0.,0.,0.));
#61=IFCDIRECTION((0.,0.,1.));
#62=IFCDIRECTION((1.,0.,0.));
#64=IFCDIRECTION((0.,0.,1.));

5.4 Fillings (doors and windows)

Fillings (as the common classification of doors and windows) are exchanged in IFC2× files as instances of IfcDoor and IfcWindow.

Each filling can be placed within an opening – actually each door and window within a wall requires the existence of an opening, in which it is placed. Doors and windows are usually manufactured elements, which are inserted as occurrences of its type.

This concept is used to define doors and windows within IFC2×. Each occurrence of a window or door is exchanged as an instance of IfcDoor or IfcWindow. The type information is provided by IfcDoorStyle or IfcWindowStyle, which aggregates the properties of doors and windows, and (if given) the 3D (B- rep) geometry of that door or window style.

All doors and windows, being of the same style, share the same instance of IfcDoorStyle or IfcWindowStyle. Figure 48 shows all relevant IFC2× entities needed to define an instance of door or window.

figure49
Figure 49 : Definitions for IfcDoor and IfcWindow

In addition to the UoF provided for all elements (see section 5), each filling has two additional UoF:

5.4.1 Doors

Doors are defined for the IFC2× data sharing as individual instances of IfcDoor on the occurrence side and shared instances of IfcDoorStyle, including one instance of IfcDoorLiningPro­perties and at least one instance of IfcDoorPanelPro­perties at the type side.

The following is defined: by IfcDoor

Note: The use of IfcDoorStyle is mandatory for each occurrence of IfcDoor. Therefore each instance of IfcDoor has to have a link IfcDoor  IsDefinedBy – IfcRelDefines­ByType – RelatingType  IfcDoorStyle.

The provision of door lining and panel properties, i.e. IfcDoorLiningPro­perties and IfcDoorPanelPro­perties is optional (if not otherwise requested by a view definition), if a given property is not given in the IFC data, it can be replaced by a default value at the receiving system.

There are strict conventions on the use of the local placement for IfcDoor. Location:

figure50
Figure 50 : Door opening and hinge directions

The following example shows a standard single swing door, which is opening to the left. The lining depth is 0.12m (within a 0.2m thick wall) and it is positioned centric within the wall.

Therefore the local placement is moved by 0.16 {(0.2–0.12)/2+0.12}. The panel thickness is 0.05.
The overall height is 2m and the width is 1m.
The door swings along the positive y axis of the local placement of the door. It opens to the left (seen in the direction of the swing opening)

SINGLE_SWING_LEFT. The door style name is ‚Standard‘.

Notation: black = local placement of wall, grey = local placement of opening, green = local placement of door.

figure51
Figure 51 : A standard single swing door

/* wall definition */
#56=IFCWALLSTANDARDCASE('3PncBLdwj24hl30CxJLWqb',#16,$,'',$,#31,#40,$);
#31=IFCLOCALPLACEMENT($,#30);
#30=IFCAXIS2PLACEMENT3D(#27,#28,#29);
#27=IFCCARTESIANPOINT((0.,0.,0.));
#28=IFCDIRECTION((0.,0.,1.));
#29=IFCDIRECTION((1.,0.,0.));
/* opening definition */
#81=IFCOPENINGELEMENT('1kGh5XRdX08vrpvxcoOz00',#16,$,'',$,#80,#75,$);
#80=IFCLOCALPLACEMENT(#31,#79);
#79=IFCAXIS2PLACEMENT3D(#76,#77,#78);
#76=IFCCARTESIANPOINT((2.,0.2,0.));
#77=IFCDIRECTION((1.,0.,0.));
#78=IFCDIRECTION((0.,0.,1.));
#82=IFCRELVOIDSELEMENT('0fIqzgCAbAswweLFwz9uOV',#16,$,$,#56,#81);
/* door definition */
#91=IFCDOOR('3cCAHy3JbB3eDyXfruy7HK',#16,$,'',$,#90,$,$,2.,1.);
#90=IFCLOCALPLACEMENT(#80,#89);
#89=IFCAXIS2PLACEMENT3D(#86,#87,#88);
#86=IFCCARTESIANPOINT((0.,0.16,0.));
#87=IFCDIRECTION((1.,0.,0.));
#88=IFCDIRECTION((0.,0.,1.));
#92=IFCRELFILLSELEMENT('19RQHSNCP0shWm8ynf19RK',#16,$,$,#81,#91);
/* door type definitions */
#93=IFCRELDEFINESBYTYPE('3w12FoWQH2X9TTevy830PA',#16,$,$,(#91),#85);
#85=IFCDOORSTYLE('0Cq4HglY1DeAYBj0RB2XmO',#16,'Standard',$,'',(#83,#84),$,'',.SINGLE_SWI NG_LEFT.,.NOTDEFINED.,.T.,.F.);
#83=IFCDOORLININGPROPERTIES('3efP6cLufD_8xUjPp5u36X',#16,$,$,0.12,0.05,$,$,$,$,$,$,$,$,$ );
#84=IFCDOORPANELPROPERTIES('0$Z5by3D9BWxrscSenxUhv',#16,$,$,0.05,.SWINGING.,1.,.LEFT.,$) ;

The following should describe the three other principle positions and opening directions of the single swing door.

The example about shows an outward swinging left hinged door, the other three possibilities are outward swinging right hinged door, inward swinging left hinged door, and inward swinging right hinged door.

The flipping between a left hinged and a right hinged door is done by changing the assigned IfcDoorStyle.O­perationType, from SINGLE_SWING_LEFT to SINGLE_SWING_RIG­TH12.

The flipping between the outward and inward swinging direction is done by rotating the local placement of the door.

The following three examples of a single swing door are all based on the base example as in Figure 50, only the swing and hinge direction changes. The parts of the .ifc files highlight the changed parameters.

figure52
Figure 52 : single swing door (outward, right side hinge)

Note12 This solution was taken, since strictly speaking a left and a right hinged door are two separate styles, since manufactured differently.

/* door definition */
#91=IFCDOOR('3cCAHy3JbB3eDyXfruy7HK',#16,$,'',$,#90,$,$,2.,1.);
#90=IFCLOCALPLACEMENT(#80,#89);
#89=IFCAXIS2PLACEMENT3D(#86,#87,#88);
#86=IFCCARTESIANPOINT((0.,0.16,0.));
#87=IFCDIRECTION((1.,0.,0.));
#88=IFCDIRECTION((0.,0.,1.));
#92=IFCRELFILLSELEMENT('19RQHSNCP0shWm8ynf19RK',#16,$,$,#81,#91);
/* door type definitions */
#93=IFCRELDEFINESBYTYPE('3w12FoWQH2X9TTevy830PA',#16,$,$,(#91),#85);
#85=IFCDOORSTYLE('0Cq4HglY1DeAYBj0RB2XmO',#16,'Standard',$,'',(#83,#84),$,'', .SINGLE_SWING_RIGHT.,.NOTDEFINED.,.T.,.F.);
#83=IFCDOORLININGPROPERTIES('3efP6cLufD_8xUjPp5u36X',#16,$,$,0.12,0.05,$,$,$,$,$,$,$,$,$ );
#84=IFCDOORPANELPROPERTIES('0$Z5by3D9BWxrscSenxUhv',#16,$,$,0.05,.SWINGING.,1.,.LEFT.,$) ;

figure53
Figure 53 : single swing door (inward, left side hinge)

/* door definition */
#91=IFCDOOR('3cCAHy3JbB3eDyXfruy7HK',#16,$,'',$,#90,$,$,2.,1.);
#90=IFCLOCALPLACEMENT(#80,#89);
#89=IFCAXIS2PLACEMENT3D(#86,#87,#88);
#86=IFCCARTESIANPOINT((0.,0.04,1.));
#87=IFCDIRECTION((1.,0.,0.));
#88=IFCDIRECTION((0.,0.,-1.));
#92=IFCRELFILLSELEMENT('19RQHSNCP0shWm8ynf19RK',#16,$,$,#81,#91);
/* door type definitions */
#93=IFCRELDEFINESBYTYPE('3w12FoWQH2X9TTevy830PA',#16,$,$,(#91),#85);
#85=IFCDOORSTYLE('0Cq4HglY1DeAYBj0RB2XmO',#16,'Standard',$,'',(#83,#84),$,'',.SINGLE_SWI
NG_LEFT.,.NOTDEFINED.,.T.,.F.);
#83=IFCDOORLININGPROPERTIES('3efP6cLufD_8xUjPp5u36X',#16,$,$,0.12,0.05,$,$,$,$,$,$,$,$,$ );
#84=IFCDOORPANELPROPERTIES('0$Z5by3D9BWxrscSenxUhv',#16,$,$,0.05,.SWINGING.,1.,.LEFT.,$) ;

Figure 54 : single swing door (inward, right side hinge)

/* door definition */
#91=IFCDOOR('3cCAHy3JbB3eDyXfruy7HK',#16,$,'',$,#90,$,$,2.,1.);
#90=IFCLOCALPLACEMENT(#80,#89);
#89=IFCAXIS2PLACEMENT3D(#86,#87,#88);
#86=IFCCARTESIANPOINT((0.,0.04,1.));
#87=IFCDIRECTION((1.,0.,0.));
#88=IFCDIRECTION((0.,0.,-1.));
#92=IFCRELFILLSELEMENT('19RQHSNCP0shWm8ynf19RK',#16,$,$,#81,#91);
/* door type definitions */
#93=IFCRELDEFINESBYTYPE('3w12FoWQH2X9TTevy830PA',#16,$,$,(#91),#85);
#85=IFCDOORSTYLE('0Cq4HglY1DeAYBj0RB2XmO',#16,'Standard',$,'',(#83,#84),$,'',.SINGLE_SWI
NG_RIGHT.,.NOTDEFINED.,.T.,.F.);
#83=IFCDOORLININGPROPERTIES('3efP6cLufD_8xUjPp5u36X',#16,$,$,0.12,0.05,$,$,$,$,$,$,$,$,$ );
#84=IFCDOORPANELPROPERTIES('0$Z5by3D9BWxrscSenxUhv',#16,$,$,0.05,.SWINGING.,1.,.LEFT.,$) ;

Other door types are inserted the same way, like double swing, sliding, folding, or revolving doors. The symbolic representation of those doors depends on the receiving system, not the symbolic representation is exchanged, but the definition parameter.

If the door type has two panels, two instances of IfcDoorPanelPro­perties needs to be inserted, the PanelPosition attribute determines which panel it is.

The following double swing door with unequal panel width is exchanged. The width of each of the two panels is given as a ratio measure.

figure55
Figure 55 : Double swing door

/* door definition */
#91=IFCDOOR('3cCAHy3JbB3eDyXfruy7HK',#16,$,'',$,#90,$,$,2.,2.);
#90=IFCLOCALPLACEMENT(#80,#89);
#89=IFCAXIS2PLACEMENT3D(#86,#87,#88);
#86=IFCCARTESIANPOINT((0.,0.2,0.));
#87=IFCDIRECTION((1.,0.,0.));
#88=IFCDIRECTION((0.,0.,1.));
#92=IFCRELFILLSELEMENT('19RQHSNCP0shWm8ynf19RK',#16,$,$,#81,#91);
/* door type definitions */
#93=IFCRELDEFINESBYTYPE('3w12FoWQH2X9TTevy830PA',#16,$,$,(#91),#85);
#85=IFCDOORSTYLE('0Cq4HglY1DeAYBj0RB2XmO',#16,'Double swing door','Double swing door
with unequal door panels','',(#83,#84,#85),$,'', DOUBLE_DOOR_SINGLE_SWING,.NOTDEFINED., .T.,.F.);
#83=IFCDOORLININGPROPERTIES('3efP6cLufD_8xUjPp5u36X',#16,$,$,0.20,0.06,$,$,$,$,$,$,$,$,$ );
#84=IFCDOORPANELPROPERTIES('0$Z5by3D9BWxrscSenxUhv',#16,$,$,0.03,.SWINGING.,0.4,.LEFT.,$ );
#85=IFCDOORPANELPROPERTIES('0$Z5by3D9BWxrscSenedgh',#16,$,$,0.03,.SWINGING.,0.6,.RIGHT., $);

5.4.2 Windows

Windows are defined for the IFC2× data sharing as individual instances of IfcWindow on the occurrence side and shared instances of IfcWindowStyle, including one instance of IfcWindowLinin­gProperties and at least one instance of IfcWindowPanel­Properties at the type side.

The conventions for the local placement (location and axis direction) and for the use of the style, lining and panel properties, follow the same principles as for the doors.

by IfcWindow

by IfcWindowStyle

by IfcWindowLinin­gProperties

by IfcWindowPanel­Properties

Note: The use of IfcWindowStyle is mandatory for each occurrence of IfcWindow. Therefore each instance of IfcWindow has to have a link IfcWindow  IsDefinedBy – IfcRelDefines­ByType – RelatingType → IfcWindowStyle.

The provision of window lining and panel properties, i.e. IfcWindowLinin­gProperties and IfcWindowPanel­Properties is optional (if not otherwise requested by a view definition), if a given property is not given in the IFC data, it can be replaced by a default value at the receiving system.

As for doors there are the same strict conventions on the use of the local placement for IfcWindow. Location:

Axis direction:

The general use of the style information, by IfcWindowStyle, and the property set information for the window lining, by IfcWindowLinin­gProperties, and for the panels, by IfcWindowPanel­Properties, follows the same conventions as provided for door.

The following example shows a standard single swing (or casement) window, which is opening to the left. The lining depth is 0.10m (within a 0.2m thick wall) and it is positioned centric within the wall. The lining thickness is 0.05. The overall height is 1.26m and the width is 1.01m. The sill height is 1.0m.

figure56
Figure 56 : Example of a single swing window

/* Window occurrence definitions */
#97=IFCRELFILLSELEMENT('3Y_rdf1p1FGAUa0WqR2Pgj',#16,$,$,#86,#96);
#98=IFCRELDEFINESBYTYPE('0E8SQc2rP8EuP0gwAozIDf',#16,$,$,(#96),#90);
#96=IFCWINDOW('1UTrMzo0b5V8DfGgSLiFqG',#16,$,'',$,#95,$,$,1.26,1.01);
#95=IFCLOCALPLACEMENT(#85,#94);
#94=IFCAXIS2PLACEMENT3D(#91,#92,#93);
#91=IFCCARTESIANPOINT((0.,0.05,1.01));
#92=IFCDIRECTION((1.,0.,0.));
#93=IFCDIRECTION((0.,0.,-1.));
/* Window style definitions */
#90=IFCWINDOWSTYLE('1bpFhGFobCm8tK$vXFs5_G',#16,$,$,'',(#88,#89),$,'',.NOTDEFINED.,.SING LE_PANEL.,.T.,.F.);
#88=IFCWINDOWLININGPROPERTIES('19Rb5J55vBkuSUWRETAbBc',#16,$,$,0.1,0.05,$,$,$,$,$,$,$);
#89=IFCWINDOWPANELPROPERTIES('2BouMUXer8Dgf7PkPulxj3',#16,$,$,.SIDEHUNGLEFTHAND.,.NOTDEF INED.,0.05,0.05,$);
/* Opening definitions */
#87=IFCRELVOIDSELEMENT('3a9mqKUWD7Guk3JRSUc788',#16,$,$,#61,#86);
#86=IFCOPENINGELEMENT('0pg1ZN4LTBmfIOJAerUV76',#16,$,'',$,#85,#80,$);
#85=IFCLOCALPLACEMENT(#36,#84);
#84=IFCAXIS2PLACEMENT3D(#81,#82,#83);
#81=IFCCARTESIANPOINT((2.,0.2,1.));
#82=IFCDIRECTION((1.,0.,0.));
#83=IFCDIRECTION((0.,0.,1.));
#80=IFCPRODUCTDEFINITIONSHAPE($,$,(#79));
#79=IFCSHAPEREPRESENTATION(#11,$,'SweptSolid',(#77));
#77=IFCEXTRUDEDAREASOLID(#70,#75,#76,0.2);
#70=IFCRECTANGLEPROFILEDEF(.AREA.,$,#69,1.26,1.01);
#69=IFCAXIS2PLACEMENT2D(#67,#68);
#67=IFCCARTESIANPOINT((0.,0.));
#68=IFCDIRECTION((1.,0.));
#75=IFCAXIS2PLACEMENT3D(#72,#73,#74);
#72=IFCCARTESIANPOINT((0.63,0.,0.505));
#73=IFCDIRECTION((0.,1.,0.));
#74=IFCDIRECTION((1.,0.,2.220446049250313E-016));
#76=IFCDIRECTION((0.,0.,1.));

5.5 Slabs

Slabs are exchanged by an IFC2× file as instances of IfcSlab. The concept of slab comprises all building elements that are usually planar and non-vertical, such as:

These types are differentiated by using the attribute PredefinedType, which datatype is an enumeration allowing the selection of a predefined enumerators or the use of additional user defined types.
The use of PredefinedType is required, if no type object through IfcSlabType is assigned using the IsDefinedBy inverse relationship.

TYPE IfcSlabTypeEnum = ENUMERATION OF
(FLOOR, ROOF, LANDING, USERDEFINED, NOTDEFINED);
END_TYPE;

Standard forms of slabs are determined by the shape representation of the slab and include all cases of geometry under the following conditions:

figure57
Figure 57 : Examples for standard slabs

Standard slabs may have openings and have material information assigned. Material information for standard slabs is given by material layers, using the IfcMaterialLa­yerSetUsage entity. For information on material layers see section 10.2.1.3.

Special forms of slabs are determined by a more complex shape representation which includes the following:

figure58
Figure 58 : Examples for special slabs

Special slabs may have openings and have material information assigned.
Material information for special slabs may be given by material layers or (if there is no layering structure) by a material list.
For information on material lists see section 10.2.1.2.

The following units of functionality (UoF) are common for both types of slabs definitions, they are already discussed earlier, as they apply to a higher level in the hierarchy.

5.5.1 Geometric representations of slabs

The UoF of multiple shape representation of slabs includes (at least) one shape representations for each instance of IfcSlab. It represents the slab body.

The body is provided by the following geometric representation i­tems

In all cases the value for IfcShapeRepre­sentation.Repre­sentationIden­tifier is „Body“.
If a slab has openings or recesses and trenches, they are exchanged using IfcOpeningElement, assigned to the slab through the IfcRelVoidsElement and accessibly from the IfcSlab entity through the HasOpenings inverse relationship.
For more information on openings see section 5.3 and for slab opening see section 5.3.4.

NOTE: In the IFC model, a slab has to have a single body, it is not allowed (according to the current view definitions) to export a slab having two totally separated bodies (either as swept solids, or as BREP).
Therefore the sending system has to split the slab into two (or more) slabs before exporting it to IFC, if it handles slabs with two (or more) separate bodies.

5.5.1.1 Geometric representations of standard slabs

The slab body is given by an instance of IfcShapeRepre­sentation with the following conventions:

definition) for IfcShapeRepre­sentation.Item­s[1].

figure58
Figure 59 : Example for the shape representation of a standard slab

figure59
Figure 58 shows the shape representation of a standard slab.

Note13 Note that within the current IFC2× coordination view clippings by using the IfcBooleanClip­pingResult are not supported, such shapes need to be exchanged using the IfcFacetedBrep.

The slab profile (its foot print area) is given by an IfcArbitraryClo­sedProfileDef. The OuterCurve attribute references an IfcCompositeCurve (in this case due to the round edges) or by an IfcPolyline (for polygonal boundaries) or by another subtype of IfcBoundedCurve (in general).
The IfcExtrudedAre­aSolid.Depth attribute represents the thickness of the slab.

NOTE: If the material information is attached using the IfcMaterialLa­yerSetUsage, then the IfcMaterialLa­yerSet.TotalThic­kness attribute shall have the same value as the attribute IfcExtrudedAre­aSolid.Depth.
This needs to be guaranteed by the sending application. The value of the ExtrusionDirection for standard slabs needs to be perpendicular to the XY plane of the IfcExtrudedAre­aSolid.Positi­on.

figure60
Figure 60 : Simple horizontal slab example

Example: The simple floor slab has a polygonal footprint, and a thickness of 0.2 meter. The following ifc file shows its geometric representation.

#47=IFCSLAB('1I6mYbG99ESgWwGNEv5i31',#16,$,'',$,#28,#46,$,.FLOOR.);
#28=IFCLOCALPLACEMENT(#22,#27);
/* local placement data of building story skipped */
#27=IFCAXIS2PLACEMENT3D(#24,#25,#26);
#24=IFCCARTESIANPOINT((5.,5.,0.));
#25=IFCDIRECTION((0.,0.,1.));
#26=IFCDIRECTION((1.,0.,0.));
#46=IFCPRODUCTDEFINITIONSHAPE($,$,(#45));
#45=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#43));
#43=IFCEXTRUDEDAREASOLID(#37,#41,#42,0.2);
#37=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#36);
#36=IFCPOLYLINE((#29,#30,#31,#32,#33,#34,#35));
#29=IFCCARTESIANPOINT((0.,0.));
#30=IFCCARTESIANPOINT((15.,0.));
#31=IFCCARTESIANPOINT((15.,5.));
#32=IFCCARTESIANPOINT((10.,5.));
#33=IFCCARTESIANPOINT((10.,10.));
#34=IFCCARTESIANPOINT((0.,10.));
#35=IFCCARTESIANPOINT((0.,0.));
#41=IFCAXIS2PLACEMENT3D(#38,#39,#40);
#38=IFCCARTESIANPOINT((0.,0.,0.));
#39=IFCDIRECTION((0.,0.,1.));
#40=IFCDIRECTION((1.,0.,0.));
#42=IFCDIRECTION((0.,0.,1.));

figure61
Figure 61 : Simple sloped slab example

Example The same simple floor slab, this time with a slope of the whole body (but still perpendicular extrusion), the slope is 30%, or approximately 16,7’. The blue line is for visualization purposes only and not exchanged.

#47=IFCSLAB('0TuXShKmL97xliSYeLoNK0',#16,$,'',$,#28,#46,$,.FLOOR.);
#28=IFCLOCALPLACEMENT(#22,#27);
/* local placement data of building story skipped */
#27=IFCAXIS2PLACEMENT3D(#24,#25,#26);
#24=IFCCARTESIANPOINT((5.,5.,0.));
#25=IFCDIRECTION((0.,-0.2873478855663453,0.9578262852211514));
#26=IFCDIRECTION((1.,0.,0.));
#46=IFCPRODUCTDEFINITIONSHAPE($,$,(#45));
#45=IFCSHAPEREPRESENTATION(#11,'Body','SweptSolid',(#43));
#43=IFCEXTRUDEDAREASOLID(#37,#41,#42,0.2);
#37=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#36);
#36=IFCPOLYLINE((#29,#30,#31,#32,#33,#34,#35));
#29=IFCCARTESIANPOINT((0.,0.));
#30=IFCCARTESIANPOINT((15.,0.));
#31=IFCCARTESIANPOINT((15.,5.220153254455275));
#32=IFCCARTESIANPOINT((10.,5.220153254455275));
#33=IFCCARTESIANPOINT((10.,10.44030650891055));
#34=IFCCARTESIANPOINT((0.,10.44030650891055));
#35=IFCCARTESIANPOINT((0.,0.));
#41=IFCAXIS2PLACEMENT3D(#38,#39,#40);
#38=IFCCARTESIANPOINT((0.,0.,0.));
#39=IFCDIRECTION((0.,0.,1.));
#40=IFCDIRECTION((1.,0.,0.));
#42=IFCDIRECTION((0.,0.,1.));