EXPRESS Definition for IfcGeometryResource

Link to Documentation

Documentation

Link to EXPRESS-G Diagram

EXPRESS-G Diagram



SCHEMA IfcGeometryResource;


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


IfcDimensionCount

Link to Documentation

Documentation


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


IfcAxis2Placement

Link to Documentation

Documentation


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


IfcBooleanOperand

Link to Documentation

Documentation


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


IfcCsgSelect

Link to Documentation

Documentation


TYPE IfcCsgSelect = SELECT (
    IfcBooleanResult);
END_TYPE;


IfcTrimmingSelect

Link to Documentation

Documentation


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


IfcVectorOrDirection

Link to Documentation

Documentation


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


IfcBooleanOperator

Link to Documentation

Documentation


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


IfcProfileTypeEnum

Link to Documentation

Documentation


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


IfcTransitionCode

Link to Documentation

Documentation


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


IfcTrimmingPreference

Link to Documentation

Documentation


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


Ifc2DCompositeCurve

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcArbitraryProfileDef

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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;


IfcAttDrivenClippedExtrudedSolid

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcAttDrivenClippedRevolvedSolid

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcAttDrivenExtrudedSegment

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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;


IfcAttDrivenExtrudedSolid

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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;


IfcAttDrivenMorphedExtrudedSegment

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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;


IfcAttDrivenMorphedRevolvedSegment

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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

Documentation


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


IfcAttDrivenRevolvedSegment

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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;


IfcAttDrivenRevolvedSolid

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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;


IfcAttDrivenTaperedExtrudedSegment

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcAttDrivenTaperedRevolvedSegment

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcAxis1Placement

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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

Documentation

Link to the Fully Attributed View

Fully Attributed View


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

Documentation

Link to the Fully Attributed View

Fully Attributed View


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

Documentation

Link to the Fully Attributed View

Fully Attributed View


ENTITY IfcBooleanResult
  SUBTYPE OF (IfcGeometricRepresentationItem);
    Operator      : IfcBooleanOperator;
    FirstOperand  : IfcBooleanOperand;
    SecondOperand : IfcBooleanOperand;
  DERIVE
    Dim : IfcDimensionCount
        := FirstOperand.Dim;
  WHERE
    WR21: FirstOperand.Dim = SecondOperand.Dim;
    WR22: NOT(('IFCGEOMETRYRESOURCE.IFCATTDRIVENEXTRUDEDSOLID' IN TYPEOF(FirstOperand)) OR 
('IFCGEOMETRYRESOURCE.IFCATTDRIVENREVOLVEDSOLID' IN TYPEOF(FirstOperand)) OR 
('IFCGEOMETRYRESOURCE.IFCATTDRIVENEXTRUDEDSEGMENT' IN TYPEOF(FirstOperand)) OR 
('IFCGEOMETRYRESOURCE.IFCATTDRIVENREVOLVEDSEGMENT' IN TYPEOF(FirstOperand)));
    WR23: NOT(('IFCGEOMETRYRESOURCE.IFCATTDRIVENEXTRUDEDSOLID' IN TYPEOF(SecondOperand)) OR 
('IFCGEOMETRYRESOURCE.IFCATTDRIVENREVOLVEDSOLID' IN TYPEOF(SecondOperand)) OR 
('IFCGEOMETRYRESOURCE.IFCATTDRIVENEXTRUDEDSEGMENT' IN TYPEOF(SecondOperand)) OR 
('IFCGEOMETRYRESOURCE.IFCATTDRIVENREVOLVEDSEGMENT' IN TYPEOF(SecondOperand)));
END_ENTITY;


IfcBoundedCurve

Link to Documentation

Documentation


ENTITY IfcBoundedCurve
  ABSTRACT SUPERTYPE OF (ONEOF(
    IfcCompositeCurve
   ,IfcPolyline
   ,IfcTrimmedCurve))
  SUBTYPE OF (IfcCurve);
END_ENTITY;


IfcBoundingBox

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcBoxedHalfSpace

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcCartesianPoint

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcCircleProfileDef

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcClosedShell

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


ENTITY IfcClosedShell
  SUBTYPE OF (IfcConnectedFaceSet);
END_ENTITY;


IfcCompositeCurve

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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;


IfcCompositeCurveSegment

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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

Documentation


ENTITY IfcConic
  ABSTRACT SUPERTYPE OF (ONEOF(
    IfcCircle
   ,IfcEllipse))
  SUBTYPE OF (IfcCurve);
    Position : IfcAxis2Placement;
END_ENTITY;


IfcConnectedFaceSet

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcCsgSolid

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcCurve

Link to Documentation

Documentation


ENTITY IfcCurve
  ABSTRACT SUPERTYPE OF (ONEOF(
    IfcBoundedCurve
   ,IfcConic
   ,IfcLine))
  SUBTYPE OF (IfcGeometricRepresentationItem);
  DERIVE
    Dim : IfcDimensionCount
        := IfcCurveDim(SELF);
END_ENTITY;


IfcCurveBoundedPlane

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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

Documentation

Link to the Fully Attributed View

Fully Attributed View


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;


IfcEdge

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


ENTITY IfcEdge
  SUPERTYPE OF (ONEOF(
    IfcOrientedEdge))
  SUBTYPE OF (IfcTopologicalRepresentationItem);
    EdgeStart : IfcVertex;
    EdgeEnd   : IfcVertex;
END_ENTITY;


IfcElementarySurface

Link to Documentation

Documentation


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


IfcEllipse

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcExtrudedAreaSolid

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcFace

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcFaceBound

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcFaceOuterBound

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


ENTITY IfcFaceOuterBound
  SUBTYPE OF (IfcFaceBound);
END_ENTITY;


IfcFacetedBrep

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


ENTITY IfcFacetedBrep
  SUBTYPE OF (IfcManifoldSolidBrep);
END_ENTITY;


IfcFacetedBrepWithVoids

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcGeometricRepresentationItem

Link to Documentation

Documentation


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


IfcHalfSpaceSolid

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcLine

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcManifoldSolidBrep

Link to Documentation

Documentation


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


IfcOrientedEdge

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


ENTITY IfcOrientedEdge
  SUBTYPE OF (IfcEdge);
    EdgeElement : IfcEdge;
    Orientation : BOOLEAN;
  DERIVE
    SELF\IfcEdge.EdgeStart : IfcVertex
              := IfcBooleanChoose 
                (Orientation,
                 EdgeElement.EdgeStart,
                 EdgeElement.EdgeEnd);
    SELF\IfcEdge.EdgeEnd : IfcVertex
              := IfcBooleanChoose 
                (Orientation,
                 EdgeElement.EdgeEnd,
                 EdgeElement.EdgeStart);
  WHERE
    WR31: NOT('IFCGEOMETRYRESOURCE.IFCORIENTEDEDGE' IN TYPEOF(EdgeElement));
END_ENTITY;


IfcPath

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


ENTITY IfcPath
  SUBTYPE OF (IfcTopologicalRepresentationItem);
    EdgeList : LIST [1:?] OF IfcOrientedEdge;
  WHERE
    WR21: IfcPathHeadToTail(SELF);
END_ENTITY;


IfcPlacement

Link to Documentation

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

Documentation

Link to the Fully Attributed View

Fully Attributed View


ENTITY IfcPlane
  SUBTYPE OF (IfcElementarySurface);
END_ENTITY;


IfcPoint

Link to Documentation

Documentation


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


IfcPolyLoop

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcPolyline

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcRectangleProfileDef

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcRevolvedAreaSolid

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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

Documentation


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


IfcSurface

Link to Documentation

Documentation


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


IfcSweptAreaSolid

Link to Documentation

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

Documentation


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


IfcTrapeziumProfileDef

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcTrimmedCurve

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


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

Documentation

Link to the Fully Attributed View

Fully Attributed View


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


IfcVertex

Link to Documentation

Documentation

Link to the Fully Attributed View

Fully Attributed View


ENTITY IfcVertex
  SUBTYPE OF (IfcTopologicalRepresentationItem);
END_ENTITY;


IfcBooleanChoose


FUNCTION IfcBooleanChoose
(B : BOOLEAN ; 
     Choice1, Choice2 : Generic : Item) : Generic : Item;
  IF B THEN
     RETURN (Choice1);
  ELSE
     RETURN (Choice2);
  END_IF;
END_FUNCTION;


IfcBuild2Axes


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;


IfcBuildAxes


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;


IfcCircleProfileIntoCurve


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;


IfcCrossProduct


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;


IfcCurveDim


FUNCTION IfcCurveDim
(Curve : IfcCurve)
         : IfcDimensionCount;
LOCAL
  TempDim  : IfcDimensionCount := 3;
END_LOCAL;

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


IfcDotProduct


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;


IfcExtrusionPath


FUNCTION IfcExtrusionPath
(Solid : IfcAttDrivenExtrudedSolid)
         : IfcPolyline;
LOCAL
  Path   : IfcPolyline;
  Depth  : IfcPositiveLengthMeasure 
         := Solid.Segments[1].Depth;
  NDim   : INTEGER 
         := HIINDEX(Solid.Segments);
END_LOCAL;

IF NDim > 1 THEN
  REPEAT i := 2 TO NDim;
    Depth := Depth + Solid.Segments[i].Depth;
  END_REPEAT;
END_IF;

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;


IfcFirstProjAxis


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


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


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;


IfcPathHeadToTail


FUNCTION IfcPathHeadToTail
(APath : IfcPath) : LOGICAL;
   LOCAL
     N : INTEGER := 0;
     P : LOGICAL := TRUE;
   END_LOCAL;
     
  N := SIZEOF (APath.EdgeList);
    REPEAT i := 2 TO N;
      P := P AND (APath.EdgeList[i-1].EdgeEnd :=:
                  APath.EdgeList[i].EdgeStart);
    END_REPEAT;
  RETURN (P);
END_FUNCTION;


IfcPointTranslation


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;


IfcProfileIntoArea


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;


IfcRectangleProfileIntoCurve


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;


IfcRevolutionPath


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;


IfcScalarTimesVector


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;


IfcTrapeziumProfileIntoCurve


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;


IfcVectorDifference


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;



END_SCHEMA;