Log In   View a printable version of the current page.
Added by Janice Wix, last edited by Janice Wix on Feb 10, 2007  (view change)
Labels: 
(None)


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      

Locate the point at which the object is to be placed

IfcAxis2Placement2D.Location::fp_represent_cartesian_point    

Determine the direction of the local X axis using direction ratios to define its direction relative to the location of the coordinate system.

IfcAxis2Placement2D.RefDirection::IfcDirection    

Set the values of the vector components of the direction


Note that two components should be set.

IfcDirection.DirectionRatios::REAL    

Set the value of the space dimensionality to 2.

IfcDirection.Dim::INTEGER = 2    

The normalized directions of the placement axes are derived from the directions of the local X and Z axes

IfcAxis2Placement2D.p::IfcDirection    

Derive the values of the vector components of the normalized direction


Note that two components should be derived using the IfcBuild2Axes function.

IfcDirection.DirectionRatios::REAL    
For 3D placement of objects      

Locate the point at which the object is to be placed

IfcAxis2Placement3D.Location::fp_represent_cartesian_point    

Determine the direction of the local X axis using direction ratios to define its direction relative to the location of the coordinate system.

IfcAxis2Placement3D.RefDirection
::IfcDirection
   

Set the values of the vector components of the direction


Note that three components should be set.

IfcDirection.DirectionRatios::REAL    

Set the value of the space dimensionality to 3.

IfcDirection.Dim::INTEGER = 3    

Determine the direction of the local Z axis using direction ratios to define its direction relative to the location of the coordinate system.

IfcAxis2Placement3D.Axis::IfcDirection    

Set the values of the vector components of the direction


Note that three components should be set.

IfcDirection.DirectionRatios::REAL    

Set the value of the space dimensionality to 3.

IfcDirection.Dim::INTEGER = 3    

The normalized directions of the placement axes are derived from the directions of the local X and Z axes

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;

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.1.3 Build:#408 Jan 23, 2006) - Bug/feature request - Contact Administrators