Place
Overview
Contains the information required on general placement within the IFC model.
Objects in IFC can be placed either in 2 dimensional space or in 3 dimensional space. This will determine whether to use IfcAxisPlacement2D (2 dimensional) as the placement entity or IfcAxisPlacement3D (3 dimensional). Specification of both entities is similar except that 3D space has 3 axes rather than 2 (determined by the derived attribute 'P' in both cases).
This functional part includes for both 2D and 3D placement. Where a particular type is to be used, this is specified by a dimensional parameter as either:
fp_place (2D)
fp_place (3D)
Note that specification of the dimensional parameter for placement also specifies the derived dimensionality of the object being placed.
Results
Placement is specified.
| Description | Entity/Pset/Functional Part | MAN | REC | OPT |
|---|---|---|---|---|
| For 2D placement of objects | ||||
|
IfcAxis2Placement2D.Location::fp_represent_cartesian_point | |||
|
IfcAxis2Placement2D.RefDirection::IfcDirection | |||
|
IfcDirection.DirectionRatios::REAL | |||
|
IfcDirection.Dim::INTEGER = 2 | |||
|
IfcAxis2Placement2D.p::IfcDirection | |||
|
IfcDirection.DirectionRatios::REAL | |||
| For 3D placement of objects | ||||
|
IfcAxis2Placement3D.Location::fp_represent_cartesian_point | |||
|
IfcAxis2Placement3D.RefDirection ::IfcDirection |
|||
|
IfcDirection.DirectionRatios::REAL | |||
|
IfcDirection.Dim::INTEGER = 3 | |||
|
IfcAxis2Placement3D.Axis::IfcDirection | |||
|
IfcDirection.DirectionRatios::REAL | |||
|
IfcDirection.Dim::INTEGER = 3 | |||
|
IfcAxis2Placement3D.p::IfcDirection |
IFC Entities Required
- IfcAxis2Placement2D
- IfcAxis2Placement3D
- IfcCartesianPoint
- IfcDirection
- IfcGeometricRepresentationItem
- IfcPlacement
- IfcPoint
- IfcRepresentationItem
IFC Datatypes Required
- IfcAxis2Placement
- IfcDimensionCount
- IfcLengthMeasure
IFC Functions Required
- IfcBuildAxes
- IfcBuild2Axes
IDM Functional Parts Required
- -
EXPRESS Schema
SCHEMA FP_PLACE;
TYPE IfcDimensionCount = INTEGER;
WHERE
WR1 : { 0 < SELF <= 3 };
END_TYPE;
TYPE IfcLengthMeasure = REAL;
END_TYPE;
TYPE IfcAxis2Placement = SELECT
(IfcAxis2Placement2d,
IfcAxis2Placement3d);
END_TYPE;
ENTITY IfcAxis2Placement2d
SUBTYPE OF(IfcPlacement);
RefDirection : OPTIONAL IfcDirection;
DERIVE
p : LIST [2:2] OF IfcDirection := IfcBuild2Axes(RefDirection);
WHERE
WR1 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);
WR2 : SELF\IfcPlacement.Location.Dim = 2;
END_ENTITY;
ENTITY IfcPlacement
ABSTRACT SUPERTYPE OF (ONEOF(IfcAxis2Placement2d, IfcAxis2Placement3d))
SUBTYPE OF(IfcGeometricRepresentationItem);
Location : IfcCartesianPoint;
DERIVE
Dim : IfcDimensionCount := Location.Dim;
END_ENTITY;
ENTITY IfcGeometricRepresentationItem
ABSTRACT SUPERTYPE OF (ONEOF(IfcDirection, IfcPlacement, IfcPoint))
SUBTYPE OF(IfcRepresentationItem);
END_ENTITY;
ENTITY IfcRepresentationItem
ABSTRACT SUPERTYPE;
END_ENTITY;
ENTITY IfcDirection
SUBTYPE OF(IfcGeometricRepresentationItem);
DirectionRatios : LIST [2:3] OF REAL;
DERIVE
Dim : IfcDimensionCount := HIINDEX(DirectionRatios);
END_ENTITY;
ENTITY IfcPoint
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcGeometricRepresentationItem);
END_ENTITY;
ENTITY IfcCartesianPoint
SUBTYPE OF(IfcPoint);
Coordinates : LIST [1:3] OF IfcLengthMeasure;
DERIVE
Dim : IfcDimensionCount := HIINDEX(Coordinates);
WHERE
WR1 : HIINDEX(Coordinates) >= 2;
END_ENTITY;
ENTITY IfcAxis2Placement3d
SUBTYPE OF(IfcPlacement);
Axis : OPTIONAL IfcDirection;
RefDirection : OPTIONAL IfcDirection;
DERIVE
p : LIST [3:3] OF IfcDirection := IfcBuildAxes(Axis, RefDirection);
WHERE
WR1 : SELF\IfcPlacement.Location.Dim = 3;
WR2 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
WR3 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);
WR4 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);
WR5 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));
END_ENTITY;
FUNCTION IfcBuild2Axes
(RefDirection : IfcDirection)
: LIST [2:2] OF IfcDirection;
LOCAL
D : IfcDirection := NVL(IfcNormalise(RefDirection),
IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([1.0,0.0]));
END_LOCAL;
RETURN([D, IfcOrthogonalComplement(D)]);
END_FUNCTION;
FUNCTION IfcBuildAxes
(Axis, RefDirection : IfcDirection)
: LIST [3:3] OF IfcDirection;
LOCAL
D1, D2 : IfcDirection;
END_LOCAL;
D1 := NVL(IfcNormalise(Axis), IfcRepresentationItem() || IfcGeometricRepresentationItem () || IfcDirection([0.0,0.0,1.0]));
D2 := IfcFirstProjAxis(D1, RefDirection);
RETURN ([D2, IfcNormalise(IfcCrossProduct(D1,D2)).Orientation, D1]);
END_FUNCTION;
END_SCHEMA;