Link to Index Page

 EXPRESS Definition for IfcGeometryResource 

Link to Documentation Link to EXPRESS-G Diagram Link to IDL Definition

SCHEMA IfcGeometryResource;


REFERENCE FROM IfcMeasureResource (
    IfcLengthMeasure
   ,IfcPositiveLengthMeasure
   ,IfcPlaneAngleMeasure
   ,IfcPositiveRatioMeasure
   ,IfcPositivePlaneAngleMeasure
   ,IfcParameterValue
   ,IfcRatioMeasure );


IfcDimensionCount

Link to Documentation

TYPE IfcDimensionCount = INTEGER;
 WHERE
    WR1: { 0 < SELF <= 3 };
END_TYPE;


IfcBooleanOperator

Link to Documentation

TYPE IfcBooleanOperator = ENUMERATION OF (
    Union 
   ,Intersection 
   ,Difference);
END_TYPE;


IfcTransitionCode

Link to Documentation

TYPE IfcTransitionCode = ENUMERATION OF (
    Discontinuous
   ,Continuous
   ,ContSameGradient
   ,ContSameGradientSameCurvature);
END_TYPE;


IfcTrimmingPreference

Link to Documentation

TYPE IfcTrimmingPreference = ENUMERATION OF (
    Cartesian
   ,Parameter
   ,Unspecified);
END_TYPE;


IfcAxis2Placement

Link to Documentation

TYPE IfcAxis2Placement = SELECT (
    IfcAxis2Placement2D
   ,IfcAxis2Placement3D);
END_TYPE;


IfcBooleanOperand

Link to Documentation

TYPE IfcBooleanOperand = SELECT (
    IfcSolidModel 
   ,IfcHalfSpaceSolid
   ,IfcBooleanResult);
END_TYPE;


IfcCsgSelect

Link to Documentation

TYPE IfcCsgSelect = SELECT (
    IfcBooleanResult );
END_TYPE;


IfcTrimmingSelect

Link to Documentation

TYPE IfcTrimmingSelect = SELECT (
    IfcCartesianPoint 
   ,IfcParameterValue);
END_TYPE;


IfcVectorOrDirection

Link to Documentation

TYPE IfcVectorOrDirection = SELECT (
    IfcVector
   ,IfcDirection);
END_TYPE;


IfcProfileTypeEnum

Link to Documentation

TYPE IfcProfileTypeEnum = ENUMERATION OF (
    Curve
   ,Area);
END_TYPE;


IfcAxis1Placement

Link to Documentation

ENTITY IfcAxis1Placement
  SUBTYPE OF (IfcPlacement);
    Axis : OPTIONAL IfcDirection;
 DERIVE
    Z   :  IfcDirection 
        := NVL (
            IfcNormalise(Axis)
           ,IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]));
 WHERE
    WR31 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
    WR32 : SELF\IfcPlacement.Location.Dim = 3;
END_ENTITY;


IfcAxis2Placement2D

Link to Documentation

ENTITY IfcAxis2Placement2D
 SUBTYPE OF (IfcPlacement);
    RefDirection : OPTIONAL IfcDirection;
 DERIVE
    P   : LIST [2:2] OF IfcDirection 
        := IfcBuild2Axes(RefDirection);
 WHERE
    WR31 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 2);
    WR32 : SELF\IfcPlacement.Location.Dim = 2;
END_ENTITY;


IfcAxis2Placement3D

Link to Documentation

ENTITY IfcAxis2Placement3D
  SUBTYPE OF (IfcPlacement);
    Axis         : OPTIONAL IfcDirection;
    RefDirection : OPTIONAL IfcDirection;
 DERIVE
    P   : LIST [3:3] OF IfcDirection 
        := IfcBuildAxes(Axis, RefDirection);
 WHERE
    WR31 : SELF\IfcPlacement.Location.Dim = 3;
    WR32 : (NOT (EXISTS (Axis))) OR (Axis.Dim = 3);
    WR33 : (NOT (EXISTS (RefDirection))) OR (RefDirection.Dim = 3);
    WR34 : (NOT (EXISTS (Axis))) OR (NOT (EXISTS (RefDirection))) OR
           (IfcCrossProduct(Axis,RefDirection).Magnitude > 0.0);
    WR35 : NOT ((EXISTS (Axis)) XOR (EXISTS (RefDirection)));
END_ENTITY;


IfcBooleanResult

Link to Documentation

ENTITY IfcBooleanResult
   SUBTYPE OF (IfcGeometricRepresentationItem);
   Operator       : IfcBooleanOperator;
   FirstOperand   : IfcBooleanOperand;
   SecondOperand  : IfcBooleanOperand;
 DERIVE
    Dim : IfcDimensionCount
        := FirstOperand.Dim;
 WHERE
    WR21 : FirstOperand.Dim = SecondOperand.Dim;
END_ENTITY;


IfcBoundedCurve

Link to Documentation

ENTITY IfcBoundedCurve
  ABSTRACT SUPERTYPE OF (ONEOF(
    IfcPolyline
   ,IfcTrimmedCurve
   ,IfcCompositeCurve))
  SUBTYPE OF (IfcCurve);
 DERIVE
    Dim : IfcDimensionCount
        := IfcBoundedCurveDim(SELF);
END_ENTITY;


IfcBoundingBox

Link to Documentation

ENTITY IfcBoundingBox
 SUBTYPE OF (
    IfcGeometricRepresentationItem );
    Corner  : IfcCartesianPoint;
    XDim  : IfcPositiveLengthMeasure;
    YDim  : IfcPositiveLengthMeasure;
    ZDim  : IfcPositiveLengthMeasure;
 DERIVE
    Dim : IfcDimensionCount
        := 3;
END_ENTITY;


IfcBoxedHalfSpace

Link to Documentation

ENTITY IfcBoxedHalfSpace
 SUBTYPE OF(IfcHalfSpaceSolid);
    Enclosure : IfcBoundingBox;
 WHERE
    WR31 : NOT ('IFCGEOMETRYRESOURCE.IFCCURVEBOUNDEDPLANE' IN 
            TYPEOF(SELF\IfcHalfSpaceSolid.BaseSurface));
END_ENTITY;


IfcCartesianPoint

Link to Documentation

ENTITY IfcCartesianPoint
 SUBTYPE OF (IfcPoint);
    Coordinates  : LIST [1:3] OF IfcLengthMeasure;
 DERIVE
    Dim : IfcDimensionCount
        := HIINDEX(Coordinates);
 WHERE
    WR31 : HIINDEX(Coordinates) >= 2;
END_ENTITY;


IfcCircle

Link to Documentation

ENTITY IfcCircle
 SUBTYPE OF (IfcConic);
    Radius : IfcPositiveLengthMeasure;
END_ENTITY;


IfcClosedShell

Link to Documentation

ENTITY IfcClosedShell
 SUBTYPE OF (IfcConnectedFaceSet);
END_ENTITY;


IfcCompositeCurve

Link to Documentation

ENTITY IfcCompositeCurve
 SUPERTYPE OF (ONEOF (Ifc2DCompositeCurve))
 SUBTYPE OF (IfcBoundedCurve);
    Segments      : LIST [1:?] OF IfcCompositeCurveSegment;
    SelfIntersect : LOGICAL;
 DERIVE
    NSegments     : INTEGER 
        := SIZEOF(Segments);
    ClosedCurve   : LOGICAL 
        := Segments[NSegments].Transition <> Discontinuous;
 WHERE
    WR41: ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments |
            Temp.Transition = Discontinuous)) = 1)) OR
          ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | 
            Temp.Transition = Discontinuous)) = 0));
    WR42: SIZEOF( QUERY( Temp <* Segments | Temp.Dim <>
            Segments[1].Dim)) = 0;
END_ENTITY;


Ifc2DCompositeCurve

Link to Documentation

ENTITY Ifc2DCompositeCurve
 SUBTYPE OF (IfcCompositeCurve);
 WHERE
    WR51: SELF\IfcCompositeCurve.ClosedCurve;
    WR52: SELF\IfcBoundedCurve.Dim = 2;
END_ENTITY;


IfcCompositeCurveSegment

Link to Documentation

ENTITY IfcCompositeCurveSegment
 SUBTYPE OF (IfcGeometricRepresentationItem);
    Transition    : IfcTransitionCode;
    SameSense     : BOOLEAN;
    ParentCurve   : IfcCurve;
 DERIVE
    Dim : IfcDimensionCount
        := ParentCurve.Dim;
 INVERSE
    UsingCurves   : SET [1:?] OF IfcCompositeCurve FOR Segments;
 WHERE
    WR21 : ('IFCGEOMETRYRESOURCE.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));
END_ENTITY;


IfcConic

Link to Documentation

ENTITY IfcConic
 ABSTRACT SUPERTYPE OF (ONEOF(
    IfcCircle
   ,IfcEllipse))
 SUBTYPE OF (IfcCurve);
    Position : IfcAxis2Placement;
 DERIVE
    Dim : IfcDimensionCount
        := Position.Dim;
END_ENTITY;


IfcConnectedFaceSet

Link to Documentation

ENTITY IfcConnectedFaceSet
 SUPERTYPE OF (ONEOF(IfcClosedShell))
 SUBTYPE OF (IfcTopologicalRepresentationItem);
    CfsFaces : SET [1:?] OF IfcFace;
END_ENTITY;


IfcCsgSolid

Link to Documentation

ENTITY IfcCsgSolid
 SUBTYPE OF (IfcSolidModel);
    TreeRootExpression : IfcCsgSelect;
END_ENTITY;


IfcCurve

Link to Documentation

ENTITY IfcCurve
 ABSTRACT SUPERTYPE OF (ONEOF(
    IfcLine
   ,IfcConic
   ,IfcBoundedCurve))
 SUBTYPE OF (IfcGeometricRepresentationItem);
END_ENTITY;


IfcCurveBoundedPlane

Link to Documentation

ENTITY IfcCurveBoundedPlane
 SUBTYPE OF (IfcSurface);
    BasisSurface    : IfcPlane;
    OuterBoundary   : Ifc2DCompositeCurve;
    InnerBoundaries : SET [0:?] OF Ifc2DCompositeCurve;
 DERIVE
    Dim : IfcDimensionCount
        := BasisSurface.Dim;
END_ENTITY;


IfcDirection

Link to Documentation

ENTITY IfcDirection
 SUBTYPE OF (IfcGeometricRepresentationItem);
    DirectionRatios : LIST [2:3] OF REAL;
 DERIVE
    Dim : IfcDimensionCount
       := HIINDEX(DirectionRatios);
 WHERE
    WR21: SIZEOF(QUERY(Temp <* DirectionRatios | Temp <> 0.0)) > 0;
END_ENTITY;


IfcElementarySurface

Link to Documentation

ENTITY IfcElementarySurface
 ABSTRACT SUPERTYPE OF (ONEOF(IfcPlane))
 SUBTYPE OF (IfcSurface);
    Position : IfcAxis2Placement3D;
 DERIVE
    Dim : IfcDimensionCount
        := Position.Dim;
END_ENTITY;


IfcEllipse

Link to Documentation

ENTITY IfcEllipse
 SUBTYPE OF (IfcConic);
    SemiAxis1 : IfcPositiveLengthMeasure;
    SemiAxis2 : IfcPositiveLengthMeasure;
END_ENTITY;


IfcExtrudedAreaSolid

Link to Documentation

ENTITY IfcExtrudedAreaSolid
 SUPERTYPE OF (ONEOF(IfcAttDrivenExtrudedSegment))
 SUBTYPE OF (IfcSweptAreaSolid);
    ExtrudedDirection : IfcDirection;
    Depth : IfcPositiveLengthMeasure;
 WHERE
    WR41: IfcDotProduct(
           (SELF\IfcSweptAreaSolid.SweptArea.BasisSurface\
           IfcPlane.Position.P[3]), ExtrudedDirection) <> 0.0;
END_ENTITY;


IfcFace

Link to Documentation

ENTITY IfcFace
 SUBTYPE OF (IfcTopologicalRepresentationItem);
    Bounds : SET [1:?] OF IfcFaceBound;
 WHERE
    WR22: SIZEOF(QUERY(temp <* Bounds | 'IFCGEOMETRYRESOURCE.IFCFACEOUTERBOUND' 
           IN TYPEOF(temp))) <= 1;
END_ENTITY;


IfcFaceBound

Link to Documentation

ENTITY IfcFaceBound
 SUPERTYPE OF (ONEOF(
    IfcFaceOuterBound))
 SUBTYPE OF (IfcTopologicalRepresentationItem);
    Bound       : IfcPolyLoop;
    Orientation : BOOLEAN;
END_ENTITY;


IfcFaceOuterBound

Link to Documentation

ENTITY IfcFaceOuterBound
 SUBTYPE OF (IfcFaceBound);
END_ENTITY;


IfcFacetedBrep

Link to Documentation

ENTITY IfcFacetedBrep
 SUBTYPE OF (IfcManifoldSolidBrep);
END_ENTITY;


IfcFacetedBrepWithVoids

Link to Documentation

ENTITY IfcFacetedBrepWithVoids
 SUBTYPE OF (IfcManifoldSolidBrep);
    Voids : SET [1:?] OF IfcClosedShell;
END_ENTITY;


IfcGeometricRepresentationItem

Link to Documentation

ENTITY IfcGeometricRepresentationItem
  ABSTRACT SUPERTYPE OF (ONEOF(
    IfcBooleanResult
   ,IfcBoundingBox
   ,IfcPoint
   ,IfcCurve
   ,IfcDirection 
   ,IfcPolyLoop
   ,IfcPlacement
   ,IfcSurface
   ,IfcCompositeCurveSegment
   ,IfcHalfSpaceSolid
   ,IfcSolidModel
   ,IfcVector ));
END_ENTITY;


IfcHalfSpaceSolid

Link to Documentation

ENTITY IfcHalfSpaceSolid
 SUPERTYPE OF (ONEOF(
    IfcBoxedHalfSpace))
 SUBTYPE OF (IfcGeometricRepresentationItem);
    BaseSurface   : IfcSurface;
    AgreementFlag : BOOLEAN;
 DERIVE
    Dim : IfcDimensionCount
        := 3;
END_ENTITY;


IfcLine

Link to Documentation

ENTITY IfcLine
 SUBTYPE OF (IfcCurve);
    Pnt : IfcCartesianPoint;
    Dir : IfcVector;
 DERIVE
    Dim : IfcDimensionCount
        := Pnt.Dim;
 WHERE
    WR31 : Dir.Dim = Pnt.Dim;
END_ENTITY;


IfcManifoldSolidBrep

Link to Documentation

ENTITY IfcManifoldSolidBrep
 ABSTRACT SUPERTYPE OF (ONEOF (
    IfcFacetedBrep
   ,IfcFacetedBrepWithVoids))
 SUBTYPE OF (IfcSolidModel);
    Outer    : IfcClosedShell;
END_ENTITY;


IfcPlacement

Link to Documentation

ENTITY IfcPlacement
 ABSTRACT SUPERTYPE OF (ONEOF(
    IfcAxis1Placement
   ,IfcAxis2Placement2D
   ,IfcAxis2Placement3D))
 SUBTYPE OF (IfcGeometricRepresentationItem);
    Location : IfcCartesianPoint;
 DERIVE
    Dim : IfcDimensionCount
        := Location.Dim; 
END_ENTITY;


IfcPlane

Link to Documentation

ENTITY IfcPlane
 SUBTYPE OF (IfcElementarySurface);
END_ENTITY;


IfcPoint

Link to Documentation

ENTITY IfcPoint
 ABSTRACT SUPERTYPE OF (ONEOF (IfcCartesianPoint))
 SUBTYPE OF (IfcGeometricRepresentationItem);
END_ENTITY;


IfcPolyline

Link to Documentation

ENTITY IfcPolyline
 SUBTYPE OF (IfcBoundedCurve);
    Points : LIST [2:?] OF IfcCartesianPoint;
 WHERE
    WR41: SIZEOF(QUERY(Temp <* Points | Temp.Dim <> Points[1].Dim))
           = 0;
END_ENTITY;


IfcPolyLoop

Link to Documentation

ENTITY IfcPolyLoop
 SUBTYPE OF (IfcGeometricRepresentationItem);
    Polygon : LIST [3:?] OF UNIQUE IfcCartesianPoint;
 DERIVE
    Dim : IfcDimensionCount
       := Polygon[1].Dim;
 WHERE
    WR21: SIZEOF(QUERY(Temp <* Polygon | Temp.Dim <> Polygon[1].Dim))
           = 0;
END_ENTITY;


IfcRevolvedAreaSolid

Link to Documentation

ENTITY IfcRevolvedAreaSolid
 SUPERTYPE OF (ONEOF(IfcAttDrivenRevolvedSegment))
 SUBTYPE OF (IfcSweptAreaSolid);
    Axis  : IfcAxis1Placement;
    Angle : IfcPlaneAngleMeasure;
 DERIVE
    AxisLine :  IfcLine 
             := IfcGeometricRepresentationItem()  || IfcCurve() || IfcLine 
                (Axis.Location
                ,IfcGeometricRepresentationItem() || IfcVector(Axis.Z,1.0));
END_ENTITY;


IfcSolidModel

Link to Documentation

ENTITY IfcSolidModel
 ABSTRACT SUPERTYPE OF (ONEOF(
    IfcCsgSolid
   ,IfcManifoldSolidBrep
   ,IfcSweptAreaSolid
   ,IfcAttDrivenExtrudedSolid
   ,IfcAttDrivenRevolvedSolid))
 SUBTYPE OF (IfcGeometricRepresentationItem);
 DERIVE
    Dim : IfcDimensionCount
        := 3;
END_ENTITY;


IfcSurface

Link to Documentation

ENTITY IfcSurface
  ABSTRACT SUPERTYPE OF (ONEOF(
    IfcElementarySurface
   ,IfcCurveBoundedPlane))
 SUBTYPE OF (IfcGeometricRepresentationItem);
END_ENTITY;


IfcSweptAreaSolid

Link to Documentation

ENTITY IfcSweptAreaSolid
 ABSTRACT SUPERTYPE OF (ONEOF(
    IfcExtrudedAreaSolid
   ,IfcRevolvedAreaSolid))
 SUBTYPE OF (IfcSolidModel);
    SweptArea : IfcCurveBoundedPlane;
 WHERE
    WR31: 'IFCGEOMETRYRESOURCE.IFCPLANE' IN 
            TYPEOF(SweptArea.BasisSurface);
END_ENTITY;


IfcTopologicalRepresentationItem

Link to Documentation

ENTITY IfcTopologicalRepresentationItem
 ABSTRACT SUPERTYPE OF (ONEOF(
    IfcConnectedFaceSet
   ,IfcFace
   ,IfcFaceBound));
END_ENTITY;


IfcTrimmedCurve

Link to Documentation

ENTITY IfcTrimmedCurve
 SUBTYPE OF (IfcBoundedCurve);
    BasisCurve           : IfcCurve;
    Trim1                : SET[1:2] OF IfcTrimmingSelect;
    Trim2                : SET[1:2] OF IfcTrimmingSelect;
    SenseAgreement       : BOOLEAN;
    MasterRepresentation : IfcTrimmingPreference;
 WHERE
    WR41: (HIINDEX(Trim1) = 1) XOR (TYPEOF(Trim1[1]) <> TYPEOF(Trim1[2]));
    WR42: (HIINDEX(Trim2) = 1) XOR (TYPEOF(Trim2[1]) <> TYPEOF(Trim2[2]));
    WR43: NOT('IFCGEOMETRYRESOURCE.IFCBOUNDEDCURVE' IN TYPEOF(BasisCurve));
END_ENTITY;


IfcVector

Link to Documentation

ENTITY IfcVector
 SUBTYPE OF (IfcGeometricRepresentationItem);
    Orientation : IfcDirection;
    Magnitude   : IfcLengthMeasure;
 DERIVE
    Dim : IfcDimensionCount
        := Orientation.Dim;
 WHERE
    WR21: Magnitude >= 0.0;
END_ENTITY;


IfcAttDrivenExtrudedSolid

Link to Documentation

ENTITY IfcAttDrivenExtrudedSolid
 SUPERTYPE OF (ONEOF (
    IfcAttDrivenClippedExtrudedSolid))
 SUBTYPE OF (IfcSolidModel);
    Segments : LIST [1:?] OF IfcAttDrivenExtrudedSegment;
 DERIVE
    Path     : IfcPolyline
             := IfcExtrusionPath(SELF);
 WHERE
    WR31: SIZEOF(QUERY( Temp <* Segments |
            Temp.Position.P[3] <> Segments[1].Position.P[3]))
            = 0;
END_ENTITY;


IfcAttDrivenClippedExtrudedSolid

Link to Documentation

ENTITY IfcAttDrivenClippedExtrudedSolid
 SUBTYPE OF (IfcAttDrivenExtrudedSolid);
    ClippingHalfSpaces : LIST [1:?] OF IfcHalfSpaceSolid;
END_ENTITY;


IfcAttDrivenExtrudedSegment

Link to Documentation

ENTITY IfcAttDrivenExtrudedSegment
 SUPERTYPE OF (ONEOF(
    IfcAttDrivenMorphedExtrudedSegment
   ,IfcAttDrivenTaperedExtrudedSegment))
 SUBTYPE OF (IfcExtrudedAreaSolid);
    Position    : IfcAxis2Placement3D;
    ProfileDef  : IfcAttDrivenProfileDef;
 DERIVE
    SELF\IfcSweptAreaSolid.SweptArea : IfcCurveBoundedPlane
                := IfcProfileIntoArea(ProfileDef);
    SELF\IfcExtrudedAreaSolid.ExtrudedDirection : IfcDirection
                := IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]);
 INVERSE
    PartOfSolid : IfcAttDrivenExtrudedSolid FOR Segments;
 WHERE
    WR51: ProfileDef.ProfileType = Area;
END_ENTITY;


IfcAttDrivenTaperedExtrudedSegment

Link to Documentation

ENTITY IfcAttDrivenTaperedExtrudedSegment
 SUBTYPE OF (IfcAttDrivenExtrudedSegment);
    TaperingFactor : IfcPositiveRatioMeasure;
END_ENTITY;


IfcAttDrivenMorphedExtrudedSegment

Link to Documentation

ENTITY IfcAttDrivenMorphedExtrudedSegment
 SUBTYPE OF (IfcAttDrivenExtrudedSegment);
    EndProfileDef : IfcAttDrivenProfileDef;
 DERIVE
    EndSweptArea  : IfcCurveBoundedPlane
                  := IfcProfileIntoArea(EndProfileDef);  
 WHERE
    WR61: TYPEOF(SELF\IfcAttDrivenExtrudedSegment.ProfileDef) = TYPEOF(EndProfileDef);
    WR62: NOT('IFCGEOMETRYRESOURCE.IFCARBITRARYPROFILEDEF' 
           IN TYPEOF(SELF\IfcAttDrivenExtrudedSegment.ProfileDef));
    WR63: SELF\IfcAttDrivenExtrudedSegment.ProfileDef.Position.P[1] = EndProfileDef.Position.P[1];
END_ENTITY;


IfcAttDrivenRevolvedSolid

Link to Documentation

ENTITY IfcAttDrivenRevolvedSolid
 SUPERTYPE OF (ONEOF (
    IfcAttDrivenClippedRevolvedSolid))
 SUBTYPE OF (IfcSolidModel);
    Segments : LIST [1:?] OF IfcAttDrivenRevolvedSegment;
 DERIVE
    Path     : IfcTrimmedCurve
             := IfcRevolutionPath(SELF);
 WHERE
    WR31: SIZEOF(QUERY( Temp <* Segments |
            Temp.Position :<>: Segments[1].Position))
            = 0;
    WR32: SIZEOF(QUERY( Temp <* Segments |
            Temp\IfcRevolvedAreaSolid.Axis <> Segments[1]\IfcRevolvedAreaSolid.Axis))
            = 0;
END_ENTITY;


IfcAttDrivenClippedRevolvedSolid

Link to Documentation

ENTITY IfcAttDrivenClippedRevolvedSolid
 SUBTYPE OF (IfcAttDrivenRevolvedSolid);
    ClippingHalfSpaces : LIST [1:?] OF IfcHalfSpaceSolid;
END_ENTITY;


IfcAttDrivenRevolvedSegment

Link to Documentation

ENTITY IfcAttDrivenRevolvedSegment
 SUPERTYPE OF (ONEOF(
    IfcAttDrivenMorphedRevolvedSegment
   ,IfcAttDrivenTaperedRevolvedSegment))
 SUBTYPE OF (IfcRevolvedAreaSolid);
    Position    : IfcAxis2Placement3D;
    StartAngle  : IfcPlaneAngleMeasure;
    ProfileDef  : IfcAttDrivenProfileDef;
 DERIVE
    SELF\IfcSweptAreaSolid.SweptArea : IfcCurveBoundedPlane
                := IfcProfileIntoArea(ProfileDef);
 INVERSE
    PartOfSolid : IfcAttDrivenRevolvedSolid FOR Segments;
 WHERE
    WR51: SELF\IfcRevolvedAreaSolid.Axis.Location.Coordinates[3] = 0;
    WR52: ProfileDef.ProfileType = Area;
END_ENTITY;


IfcAttDrivenTaperedRevolvedSegment

Link to Documentation

ENTITY IfcAttDrivenTaperedRevolvedSegment
 SUBTYPE OF (IfcAttDrivenRevolvedSegment);
    TaperingFactor  : IfcPositiveRatioMeasure;
END_ENTITY;


IfcAttDrivenMorphedRevolvedSegment

Link to Documentation

ENTITY IfcAttDrivenMorphedRevolvedSegment
 SUBTYPE OF (IfcAttDrivenRevolvedSegment);
    EndProfileDef   : IfcAttDrivenProfileDef;
 DERIVE
    EndSweptArea    : IfcCurveBoundedPlane
                    := IfcProfileIntoArea(EndProfileDef);
 WHERE
    WR61: TYPEOF(SELF\IfcAttDrivenRevolvedSegment.ProfileDef) = TYPEOF(EndProfileDef);
    WR62: NOT('IFCGEOMETRYRESOURCE.IFCARBITRARYPROFILEDEF' 
            IN TYPEOF(SELF\IfcAttDrivenRevolvedSegment.ProfileDef));
    WR63: SELF\IfcAttDrivenRevolvedSegment.ProfileDef.Position.P[1] = EndProfileDef.Position.P[1];
END_ENTITY;


IfcAttDrivenProfileDef

Link to Documentation

ENTITY IfcAttDrivenProfileDef
 ABSTRACT SUPERTYPE OF (ONEOF(
    IfcRectangleProfileDef
   ,IfcCircleProfileDef
   ,IfcTrapeziumProfileDef
   ,IfcArbitraryProfileDef));
    Position            : IfcAxis2Placement2D;
    ProfileType         : IfcProfileTypeEnum; 
END_ENTITY;


IfcArbitraryProfileDef

Link to Documentation

ENTITY IfcArbitraryProfileDef
 SUBTYPE OF (IfcAttDrivenProfileDef);
    CurveForSurface : IfcBoundedCurve;
 DERIVE
    SELF\IfcAttDrivenProfileDef.Position : IfcAxis2Placement2D
       := IfcGeometricRepresentationItem() || IfcPlacement(
            IfcGeometricRepresentationItem() || IfcPoint() || IfcCartesianPoint([0.,0.])) ||
              IfcAxis2Placement2D(IfcGeometricRepresentationItem() || IfcDirection([1.,0.]));
 WHERE
    WR21: CurveForSurface.Dim = 2;
END_ENTITY;


IfcCircleProfileDef

Link to Documentation

ENTITY IfcCircleProfileDef
 SUBTYPE OF (IfcAttDrivenProfileDef);
    Radius   : IfcPositiveLengthMeasure;
 DERIVE
    CurveForSurface     : IfcTrimmedCurve
                        := IfcCircleProfileIntoCurve(SELF);
END_ENTITY;


IfcRectangleProfileDef

Link to Documentation

ENTITY IfcRectangleProfileDef
 SUBTYPE OF (IfcAttDrivenProfileDef);
    XDim : IfcPositiveLengthMeasure;
    YDim : IfcPositiveLengthMeasure;
 DERIVE
    CurveForSurface     : IfcPolyline
                        := IfcRectangleProfileIntoCurve(SELF);
END_ENTITY;


IfcTrapeziumProfileDef

Link to Documentation

ENTITY IfcTrapeziumProfileDef
 SUBTYPE OF (IfcAttDrivenProfileDef);
    BottomXDim         : IfcPositiveLengthMeasure;
    TopXDim            : IfcPositiveLengthMeasure;
    YDim               : IfcPositiveLengthMeasure;
    TopXOffset         : IfcLengthMeasure;
 DERIVE
    CurveForSurface    : IfcPolyline
                       := IfcTrapeziumProfileIntoCurve(SELF);
END_ENTITY;


IfcBuildAxes

Link to Documentation

FUNCTION IfcBuildAxes (
           Axis, RefDirection : IfcDirection)
         : LIST [3:3] OF IfcDirection;
  LOCAL
    U :  LIST [3:3] OF IfcDirection 
      := [IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0])
         ,IfcGeometricRepresentationItem() || IfcDirection([0.0,1.0,0.0])
         ,IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0])];
  END_LOCAL;
   
  U[3] := NVL(IfcNormalise(Axis)
             ,IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]));
  U[1] := IfcFirstProjAxis(U[3], RefDirection);
  U[2] := IfcNormalise(IfcCrossProduct(U[3],U[1])).Orientation;
  RETURN(U);
END_FUNCTION;


IfcBuild2Axes

Link to Documentation

FUNCTION IfcBuild2Axes (
           RefDirection : IfcDirection) 
         : LIST [2:2] OF IfcDirection;
  LOCAL
    U : LIST[2:2] OF IfcDirection
      := [IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0])
         ,IfcGeometricRepresentationItem() || IfcDirection([0.0,1.0])];
  END_LOCAL;

  U[1] := NVL(IfcNormalise(RefDirection)
             ,IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0]));
  U[2] := IfcOrthogonalComplement(U[1]);
  RETURN(U);
END_FUNCTION;


IfcCrossProduct

Link to Documentation

FUNCTION IfcCrossProduct (
           Arg1, Arg2 : IfcDirection)
         : IfcVector;
  LOCAL
    Mag    :  REAL := 0.0;
    V1,V2  :  LIST[3:3] OF REAL := [0.0:3];
    Res    :  IfcDirection 
           := IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0]);
    Result :  IfcVector
           := IfcGeometricRepresentationItem() || IfcVector (
                IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0])
               ,1.0);
  END_LOCAL;
  
  IF ( NOT EXISTS (Arg1) OR (Arg1.Dim = 2)) OR
     ( NOT EXISTS (Arg2) OR (Arg2.Dim = 2)) THEN
    RETURN(?);
  ELSE
    BEGIN
      V1  := IfcNormalise(Arg1).DirectionRatios;
      V2  := IfcNormalise(Arg2).DirectionRatios;
      Res.DirectionRatios[1] := (V1[2]*V2[3] - v1[3]*v2[2]);
      Res.DirectionRatios[2] := (V1[3]*V2[1] - v1[1]*v2[3]);
      Res.DirectionRatios[3] := (V1[1]*V2[2] - v1[2]*v2[1]);
      Mag := 0.0;
      REPEAT i := 1 TO 3;
        Mag := Mag + Res.DirectionRatios[i]*Res.DirectionRatios[i];
      END_REPEAT;
      IF (Mag > 0.0) THEN
        Result.Orientation := Res;
        Result.Magnitude   := SQRT(Mag);
      ELSE
        Result.Orientation := Arg1;
        Result.Magnitude   := 0.0;
      END_IF;
      RETURN(Result);
    END;
  END_IF;
END_FUNCTION;


IfcDotProduct

Link to Documentation

FUNCTION IfcDotProduct (Arg1, Arg2 : IfcDirection) 
         : REAL;
  LOCAL
    Scalar    :  REAL := 0.0;
    Ndim      :  INTEGER := 0;
    Vec1,Vec2 :  IfcDirection
              := IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0]);
  END_LOCAL;
  
  IF NOT EXISTS (Arg1) OR NOT EXISTS (Arg2) THEN
    Scalar := ?;
  ELSE
    IF (Arg1.dim <> Arg2.dim) THEN
      Scalar := ?;
    ELSE
      BEGIN
        Vec1   := IfcNormalise(Arg1);
        Vec2   := IfcNormalise(Arg2);
        Ndim   := Arg1.Dim;
        Scalar := 0.0;
        REPEAT  i := 1 TO Ndim;
          Scalar := Scalar +
                    Vec1.DirectionRatios[i] *
                    Vec2.DirectionRatios[i];
        END_REPEAT;
      END;
    END_IF;
  END_IF;
  RETURN (Scalar);
END_FUNCTION;


IfcFirstProjAxis

Link to Documentation

FUNCTION IfcFirstProjAxis (ZAxis, Arg : IfcDirection)
         : IfcDirection;
  LOCAL
    XAxis, V    :  IfcDirection
                := IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0]);
    XVec        :  IfcVector
                := IfcGeometricRepresentationItem() || IfcVector (
                     IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0])
                    ,1.0);
  END_LOCAL;
  
  IF (NOT EXISTS(ZAxis)) OR ((EXISTS(Arg)) AND (Arg.Dim <> 3)) THEN
    XAxis := ?;
  ELSE
    ZAxis := IfcNormalise(ZAxis);
    IF NOT EXISTS(Arg) THEN
      IF (ZAxis <> IfcDirection([1.0,0.0,0.0])) THEN
        V := IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0]);
      ELSE
        V := IfcGeometricRepresentationItem() || IfcDirection([0.0,1.0,0.0]);
      END_IF;
    ELSE
      IF ((IfcCrossProduct(Arg,ZAxis).Magnitude) = 0.0) THEN
        RETURN (?);
      ELSE
        V := IfcNormalise(Arg);
      END_IF;
    END_IF;
    XVec  := IfcScalarTimesVector(IfcDotProduct(V,ZAxis), ZAxis);
    XAxis := IfcVectorDifference(V, XVec).Orientation;
    XAxis := IfcNormalise(XAxis);
  END_IF;
  RETURN(XAxis);
END_FUNCTION;


IfcNormalise

Link to Documentation

FUNCTION IfcNormalise (
           Arg : IfcVectorOrDirection) 
         : IfcVectorOrDirection;
  LOCAL
    Ndim    :  INTEGER := 0;
    Mag     :  REAL    := 0.0; 
    V       :  IfcDirection
            := IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0]);
    Vec     :  IfcVector
            := IfcGeometricRepresentationItem() || IfcVector (
                 IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0])
                ,1.0);
    Result  :  IfcVectorOrDirection
            := V;
  END_LOCAL;
   
  IF NOT EXISTS (Arg) THEN
    Result := ?;
  ELSE
    Ndim := Arg.Dim;
    IF 'IFCGEOMETRYRESOURCE.IFCVECTOR' IN TYPEOF(Arg) THEN
      BEGIN
        Vec := Arg;
        V   := Arg.Orientation;
        IF Arg.Magnitude = 0.0 THEN
          RETURN(?);
        ELSE
          Vec.Magnitude := 1.0;
        END_IF;
      END;
    ELSE
      V := Arg;
    END_IF;
    Mag  := 0.0;
    REPEAT  i := 1 TO Ndim;
      Mag := Mag + (V.DirectionRatios[i] * V.DirectionRatios[i]);
    END_REPEAT;
    IF Mag > 0.0 THEN
      Mag := SQRT(Mag);
      REPEAT  i := 1 TO Ndim;
        V.DirectionRatios[i] := V.DirectionRatios[i]/Mag;
      END_REPEAT;
      IF 'IFCGEOMETRYRESOURCE.IFCVECTOR' IN TYPEOF(Arg) THEN
        Vec.Orientation := V;
        Result := Vec;
      ELSE
        Result := V;
      END_IF;
    ELSE
      RETURN(?);
    END_IF;
  END_IF;
  RETURN (Result);
END_FUNCTION;


IfcOrthogonalComplement

Link to Documentation

FUNCTION IfcOrthogonalComplement (
           Vec : IfcDirection) 
         : IfcDirection;
  LOCAL
    Result :  IfcDirection
           := IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0]);
  END_LOCAL;
  
  IF (Vec.Dim <> 2) OR NOT EXISTS (Vec) THEN
    RETURN(?);
  ELSE
    Result.DirectionRatios[1] := -Vec.DirectionRatios[2];
    Result.DirectionRatios[2] :=  Vec.DirectionRatios[1];
    RETURN(result);
  END_IF;
END_FUNCTION;


IfcScalarTimesVector

Link to Documentation

FUNCTION IfcScalarTimesVector (
           Scalar : REAL; 
           Vec    : IfcVectorOrDirection)
         : IfcVector;
  LOCAL
    Mag    :  REAL    := 0.0;
    V      :  IfcDirection
           := IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0]);
    Result :  IfcVector
           := IfcGeometricRepresentationItem() || IfcVector (
                IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0])
               ,1.0);
  END_LOCAL;
  
  IF NOT EXISTS (Scalar) OR NOT EXISTS (Vec) THEN
    Result := ?;
  ELSE
    IF 'IFCGEOMETRYRESOURCE.IFCVECTOR' IN TYPEOF (Vec) THEN
      V   := Vec.Orientation;
      Mag := Scalar * Vec.Magnitude;
    ELSE
      V   := Vec;
      Mag := Scalar;
    END_IF;
    IF (Mag < 0.0 ) THEN
      REPEAT i := 1 TO SIZEOF(V.DirectionRatios);
        V.DirectionRatios[i] := -V.DirectionRatios[i];
      END_REPEAT;
      Mag := -Mag;
    END_IF;
    Result.Orientation := IfcNormalise(V);
    Result.Magnitude   := Mag;
  END_IF;
  RETURN (Result);
END_FUNCTION;


IfcVectorDifference

Link to Documentation

FUNCTION IfcVectorDifference (
           Arg1, Arg2 : IfcVectorOrDirection)
         : IfcVector;
  LOCAL
    Mag, Mag1, Mag2 :  REAL    := 0.0;
    Ndim            :  INTEGER := 0;
    Res, Vec1, Vec2 :  IfcDirection
                    := IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0]);
    Result          :  IfcVector
                    := IfcGeometricRepresentationItem() || IfcVector (
                         IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0])
                        ,1.0);
  END_LOCAL;
  
  IF ((NOT EXISTS (Arg1)) OR (NOT EXISTS (Arg2))) OR (Arg1.Dim <> Arg2.Dim) THEN
    Result := ?;
  ELSE
    BEGIN
      IF 'IFCGEOMETRYRESOURCE.IFCVECTOR' IN TYPEOF(Arg1) THEN
        Mag1 := Arg1.Magnitude;
        Vec1 := Arg1.Orientation;
      ELSE
        Mag1 := 1.0;
        Vec1 := Arg1;
      END_IF;
      IF 'IFCGEOMETRYRESOURCE.IFCVECTOR' IN TYPEOF(Arg2) THEN
        Mag2 := Arg2.Magnitude;
        Vec2 := Arg2.Orientation;
      ELSE
        Mag2 := 1.0;
        Vec2 := Arg2;
      END_IF;
      Vec1 := IfcNormalise (Vec1);
      Vec2 := IfcNormalise (Vec2);
      Ndim := SIZEOF(Vec1.DirectionRatios);
      Mag  := 0.0;
      REPEAT i := 1 TO Ndim;
        Res.DirectionRatios[i] := Mag1 * Vec1.DirectionRatios[i] -
                                  Mag2 * Vec2.DirectionRatios[i];
        Mag := Mag + (Res.DirectionRatios[i] * Res.DirectionRatios[i]);
      END_REPEAT;
      IF (Mag > 0.0 ) THEN
        Result.Magnitude   := SQRT(Mag);
        Result.Orientation := Res;
      ELSE
        Result.Magnitude   := 0.0;
        Result.Orientation := Vec1;
      END_IF;
     END;
  END_IF;
  RETURN (Result);
END_FUNCTION;


IfcBoundedCurveDim

Link to Documentation

FUNCTION IfcBoundedCurveDim (
         BoundedCurve : IfcBoundedCurve)
                      : IfcDimensionCount;
LOCAL
  TempDim  : IfcDimensionCount := 3;
END_LOCAL;

  IF ('IFCGEOMETRYRESOURCE.IFCPOLYLINE' IN TYPEOF(BoundedCurve))
    THEN TempDim := BoundedCurve.Points[1].Dim;
    ELSE
      IF ('IFCGEOMETRYRESOURCE.IFCTRIMMEDCURVE' IN TYPEOF(BoundedCurve))
        THEN TempDim := BoundedCurve.BasisCurve.Dim;
        ELSE
          IF ('IFCGEOMETRYRESOURCE.IFCCOMPOSITECURVE' IN TYPEOF(BoundedCurve))
            THEN TempDim := BoundedCurve.Segments[1].Dim;
            ELSE TempDim := ?;
          END_IF;
      END_IF;
  END_IF;
  RETURN (TempDim);
END_FUNCTION;


IfcCircleProfileIntoCurve

Link to Documentation

FUNCTION IfcCircleProfileIntoCurve (
         ProfileDef : IfcCircleProfileDef)
                    : IfcTrimmedCurve;
LOCAL
  Pos      : IfcAxis2Placement2D;
  Circle   : IfcCircle;
  ResCurve : IfcTrimmedCurve;
END_LOCAL;
  Pos      := ProfileDef\IfcAttDrivenProfileDef.Position;
  Circle   := IfcGeometricRepresentationItem() || IfcCurve() || IfcConic(Pos) ||
                IfcCircle(ProfileDef.Radius);
  ResCurve := IfcGeometricRepresentationItem() || IfcCurve() || IfcBoundedCurve() ||
                IfcTrimmedCurve(
                  Circle, [0.0], [2*PI], TRUE, Parameter);
  RETURN (ResCurve);
END_FUNCTION;


IfcRectangleProfileIntoCurve

Link to Documentation

FUNCTION IfcRectangleProfileIntoCurve (
         ProfileDef : IfcRectangleProfileDef)
         : IfcPolyline;
LOCAL
  Points    : LIST [4:4] OF IfcCartesianPoint
            := [IfcGeometricRepresentationItem() || IfcPoint() ||
                 IfcCartesianPoint([0.0,0.0]):4] ;
  TempDir   : IfcDirection
            := IfcGeometricRepresentationItem() ||
                 IfcDirection([1.0,0.0]);
  ResCurve  : IfcPolyline;
END_LOCAL;
  Points[1] := ProfileDef\IfcAttDrivenProfileDef.Position.Location;
  TempDir   := ProfileDef\IfcAttDrivenProfileDef.Position.P[1];
  Points[2] := IfcPointTranslation (Points[1],
                 IfcGeometricRepresentationItem() || IfcVector (
                   TempDir, ProfileDef.XDim ));
  TempDir   := IfcOrthogonalComplement(TempDir);
  Points[3] := IfcPointTranslation (Points[2],
                 IfcGeometricRepresentationItem() || IfcVector (
                   TempDir, ProfileDef.YDim ));
  TempDir   := IfcOrthogonalComplement(TempDir);
  Points[4] := IfcPointTranslation (Points[3],
                 IfcGeometricRepresentationItem() || IfcVector (
                   TempDir, ProfileDef.XDim ));
  ResCurve  := IfcGeometricRepresentationItem() || IfcCurve() || IfcBoundedCurve() ||
                 IfcPolyline([Points[1],Points[2],Points[3],Points[4],Points[1]]);
  RETURN (ResCurve);
END_FUNCTION;


IfcTrapeziumProfileIntoCurve

Link to Documentation

FUNCTION IfcTrapeziumProfileIntoCurve (
         ProfileDef : IfcTrapeziumProfileDef)
         : IfcPolyline;
LOCAL
  Points    : LIST [4:4] OF IfcCartesianPoint
            := [IfcGeometricRepresentationItem() || IfcPoint() ||
                 IfcCartesianPoint([0.0,0.0]):4] ;
  TempDir   : IfcDirection
            := IfcGeometricRepresentationItem() ||
                 IfcDirection([1.0,0.0]);
  TempPoint : IfcCartesianPoint
            := IfcGeometricRepresentationItem() || IfcPoint() ||
                 IfcCartesianPoint([0.0,0.0]);
  ResCurve  : IfcPolyline;
END_LOCAL;
  Points[1] := ProfileDef\IfcAttDrivenProfileDef.Position.Location;
  TempDir   := ProfileDef\IfcAttDrivenProfileDef.Position.P[1];
  Points[2] := IfcPointTranslation (Points[1],
                 IfcGeometricRepresentationItem() || IfcVector (
                   TempDir, ProfileDef.BottomXDim ));
  TempDir   := IfcOrthogonalComplement(TempDir);
  TempPoint := IfcPointTranslation (Points[2],
                 IfcGeometricRepresentationItem() || IfcVector (
                   TempDir, ProfileDef.YDim ));
  TempDir   := IfcOrthogonalComplement(TempDir);
  Points[3] := IfcPointTranslation (TempPoint,
                 IfcGeometricRepresentationItem() || IfcVector (
                   TempDir,
                  (ProfileDef.BottomXDim - ProfileDef.TopXDim - ProfileDef.TopXOffset )));
  Points[4] := IfcPointTranslation (Points[3],
                 IfcGeometricRepresentationItem() || IfcVector (
                   TempDir, ProfileDef.TopXDim ));
  ResCurve  := IfcGeometricRepresentationItem() || IfcCurve() || IfcBoundedCurve() ||
                 IfcPolyline([Points[1],Points[2],Points[3],Points[4],Points[1]]);
  RETURN (ResCurve);
END_FUNCTION;


IfcProfileIntoArea

Link to Documentation

FUNCTION IfcProfileIntoArea (
         ProfileDef : IfcAttDrivenProfileDef)
         : IfcCurveBoundedPlane;
LOCAL
  Curve2D   : Ifc2DCompositeCurve;
  ResSurface: IfcCurveBoundedPlane;
END_LOCAL;
  Curve2D   := IfcGeometricRepresentationItem() || 
                 IfcCurve() || 
                   IfcBoundedCurve() ||
                     IfcCompositeCurve(
                         [IfcCompositeCurveSegment (Continuous,
                          TRUE, ProfileDef.CurveForSurface)], FALSE) ||
                          Ifc2DCompositeCurve();
  ResSurface := IfcGeometricRepresentationItem() || 
                 IfcSurface() ||
                   IfcCurveBoundedPlane(
                     IfcGeometricRepresentationItem() || IfcSurface() || IfcElementarySurface(
                         IfcGeometricRepresentationItem() || IfcPlacement(
                             IfcGeometricRepresentationItem() || IfcPoint () ||
                               IfcCartesianPoint([0.0, 0.0, 0.0])) ||
                             IfcAxis2Placement3D(
                               IfcGeometricRepresentationItem() || IfcDirection([0.0,0.0,1.0]),
                               IfcGeometricRepresentationItem() || IfcDirection([1.0,0.0,0.0]))) ||
                       IfcPlane(),
                     Curve2D, []);
  RETURN (ResSurface);
END_FUNCTION;


IfcPointTranslation

Link to Documentation

FUNCTION IfcPointTranslation (
           Origin : IfcCartesianPoint;
           Vec    : IfcVector)
         : IfcCartesianPoint;
LOCAL
  NDim   : INTEGER 
         := HIINDEX(Origin.Coordinates);
  Point  : IfcCartesianPoint 
         := IfcGeometricRepresentationItem() ||
              IfcPoint() ||
              IfcCartesianPoint(Origin.Coordinates);
END_LOCAL;
  IF (Origin.Dim <> Vec.Dim) OR (NOT EXISTS (Vec)) OR (NOT EXISTS (Origin)) THEN
    RETURN (?);
  END_IF;
  REPEAT  i := 1 TO NDim;
    Point.Coordinates[i] := Origin.Coordinates[i] + 
                            Vec.Magnitude * Vec.Orientation.DirectionRatios[i];
  END_REPEAT;
  RETURN (Point);
END_FUNCTION;


IfcExtrusionPath

Link to Documentation

FUNCTION IfcExtrusionPath (
           Solid : IfcAttDrivenExtrudedSolid)
         : IfcPolyline;
LOCAL
  Path   : IfcPolyline;
  Depth  : IfcPositiveLengthMeasure := 0;
  NDim   : INTEGER := HIINDEX(Solid.Segments);
END_LOCAL;
  REPEAT i := 1 TO NDim;
    Depth := Depth + Solid.Segments[i].Depth;
  END_REPEAT;
  Path := IfcGeometricRepresentationItem() || IfcCurve() || IfcBoundedCurve() ||
           IfcPolyline([Solid.Segments[1].Position.Location, 
             IfcPointTranslation (Solid.Segments[1].Position.Location,
               IfcGeometricRepresentationItem() || IfcVector (
                 Solid.Segments[1].Position.P[3], Depth))]);
  RETURN(Path);
END_FUNCTION;


IfcRevolutionPath

Link to Documentation

FUNCTION IfcRevolutionPath (
           Solid : IfcAttDrivenRevolvedSolid)
         : IfcTrimmedCurve;
LOCAL
  Path   : IfcTrimmedCurve;
  Pos    : IfcAxis2Placement3D;
  Circle : IfcCircle;
  Angle  : IfcPlaneAngleMeasure := 0;
  NDim   : INTEGER := HIINDEX(Solid.Segments);
END_LOCAL;
  REPEAT i := 1 TO NDim;
    Angle := Angle + Solid.Segments[i].Angle;
  END_REPEAT;
  Pos    := IfcGeometricRepresentationItem() || IfcPlacement (
              IfcPointTranslation(Solid.Segments[1].Position.Location, 
                IfcGeometricRepresentationItem() || 
                  IfcVector(IfcNormalise(Solid.Segments[1].Position.P[1]), 
                     Solid.Segments[1].Axis.Location.Coordinates[1]))
              ) ||
                  IfcAxis2Placement3D (
                    Solid.Segments[1].Position.P[2], 
                      IfcGeometricRepresentationItem() || IfcDirection([
		        Solid.Segments[1].Position.P[1].DirectionRatios[1] * -1.0,
		        Solid.Segments[1].Position.P[1].DirectionRatios[2] * -1.0,
		        Solid.Segments[1].Position.P[1].DirectionRatios[3] * -1.0])
            );
  Circle  := IfcGeometricRepresentationItem() || IfcCurve() || IfcConic(Pos) ||
               IfcCircle(Solid.Segments[1].Axis.Location.Coordinates[1]);
  Path    := IfcGeometricRepresentationItem() || IfcCurve() || IfcBoundedCurve() ||
               IfcTrimmedCurve(
                 Circle, [0.0], [Angle], TRUE, Parameter);
  RETURN (Path);
END_FUNCTION;


END_SCHEMA; -- IfcGeometryResource