|
Documentation |
EXPRESS-G Diagram |
SCHEMA IfcGeometryResource;
REFERENCE FROM IfcMeasureResource (
IfcLengthMeasure
,IfcPositiveLengthMeasure
,IfcPlaneAngleMeasure
,IfcPositiveRatioMeasure
,IfcPositivePlaneAngleMeasure
,IfcParameterValue
,IfcRatioMeasure );
Documentation
TYPE IfcDimensionCount = INTEGER;
WHERE
WR1: { 0 < SELF <= 3 };
END_TYPE;
Documentation
TYPE IfcAxis2Placement = SELECT (
IfcAxis2Placement2D
,IfcAxis2Placement3D);
END_TYPE;
Documentation
TYPE IfcBooleanOperand = SELECT (
IfcSolidModel
,IfcHalfSpaceSolid
,IfcBooleanResult);
END_TYPE;
Documentation
TYPE IfcCsgSelect = SELECT (
IfcBooleanResult);
END_TYPE;
Documentation
TYPE IfcTrimmingSelect = SELECT (
IfcCartesianPoint
,IfcParameterValue);
END_TYPE;
Documentation
TYPE IfcVectorOrDirection = SELECT (
IfcVector
,IfcDirection);
END_TYPE;
Documentation
TYPE IfcBooleanOperator = ENUMERATION OF (
Union
,Intersection
,Difference);
END_TYPE;
Documentation
TYPE IfcProfileTypeEnum = ENUMERATION OF (
Curve
,Area);
END_TYPE;
Documentation
TYPE IfcTransitionCode = ENUMERATION OF (
Discontinuous
,Continuous
,ContSameGradient
,ContSameGradientSameCurvature);
END_TYPE;
Documentation
TYPE IfcTrimmingPreference = ENUMERATION OF (
Cartesian
,Parameter
,Unspecified);
END_TYPE;
|
Documentation |
Fully Attributed View |
ENTITY Ifc2DCompositeCurve
SUBTYPE OF (IfcCompositeCurve);
WHERE
WR51: SELF\IfcCompositeCurve.ClosedCurve;
WR52: SELF\IfcBoundedCurve.Dim = 2;
END_ENTITY;
|
Documentation |
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;
|
Documentation |
Fully Attributed View |
ENTITY IfcAttDrivenClippedExtrudedSolid
SUBTYPE OF (IfcAttDrivenExtrudedSolid);
ClippingHalfSpaces : LIST [1:?] OF IfcHalfSpaceSolid;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcAttDrivenClippedRevolvedSolid
SUBTYPE OF (IfcAttDrivenRevolvedSolid);
ClippingHalfSpaces : LIST [1:?] OF IfcHalfSpaceSolid;
END_ENTITY;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
ENTITY IfcAttDrivenProfileDef
ABSTRACT SUPERTYPE OF (ONEOF(
IfcArbitraryProfileDef
,IfcCircleProfileDef
,IfcRectangleProfileDef
,IfcTrapeziumProfileDef));
Position : IfcAxis2Placement2D;
ProfileType : IfcProfileTypeEnum;
END_ENTITY;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
Fully Attributed View |
ENTITY IfcAttDrivenTaperedExtrudedSegment
SUBTYPE OF (IfcAttDrivenExtrudedSegment);
TaperingFactor : IfcPositiveRatioMeasure;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcAttDrivenTaperedRevolvedSegment
SUBTYPE OF (IfcAttDrivenRevolvedSegment);
TaperingFactor : IfcPositiveRatioMeasure;
END_ENTITY;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
ENTITY IfcBoundedCurve
ABSTRACT SUPERTYPE OF (ONEOF(
IfcCompositeCurve
,IfcPolyline
,IfcTrimmedCurve))
SUBTYPE OF (IfcCurve);
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcBoundingBox
SUBTYPE OF (IfcGeometricRepresentationItem);
Corner : IfcCartesianPoint;
XDim : IfcPositiveLengthMeasure;
YDim : IfcPositiveLengthMeasure;
ZDim : IfcPositiveLengthMeasure;
DERIVE
Dim : IfcDimensionCount
:= 3;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcBoxedHalfSpace
SUBTYPE OF (IfcHalfSpaceSolid);
Enclosure : IfcBoundingBox;
WHERE
WR31: NOT ('IFCGEOMETRYRESOURCE.IFCCURVEBOUNDEDPLANE' IN TYPEOF(SELF\IfcHalfSpaceSolid.BaseSurface));
END_ENTITY;
|
Documentation |
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;
|
Documentation |
Fully Attributed View |
ENTITY IfcCircle
SUBTYPE OF (IfcConic);
Radius : IfcPositiveLengthMeasure;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcCircleProfileDef
SUBTYPE OF (IfcAttDrivenProfileDef);
Radius : IfcPositiveLengthMeasure;
DERIVE
CurveForSurface : IfcTrimmedCurve
:= IfcCircleProfileIntoCurve(SELF);
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcClosedShell SUBTYPE OF (IfcConnectedFaceSet); END_ENTITY;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
ENTITY IfcConic
ABSTRACT SUPERTYPE OF (ONEOF(
IfcCircle
,IfcEllipse))
SUBTYPE OF (IfcCurve);
Position : IfcAxis2Placement;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcConnectedFaceSet
SUPERTYPE OF (ONEOF(
IfcClosedShell))
SUBTYPE OF (IfcTopologicalRepresentationItem);
CfsFaces : SET [1:?] OF IfcFace;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcCsgSolid
SUBTYPE OF (IfcSolidModel);
TreeRootExpression : IfcCsgSelect;
END_ENTITY;
|
Documentation |
ENTITY IfcCurve
ABSTRACT SUPERTYPE OF (ONEOF(
IfcBoundedCurve
,IfcConic
,IfcLine))
SUBTYPE OF (IfcGeometricRepresentationItem);
DERIVE
Dim : IfcDimensionCount
:= IfcCurveDim(SELF);
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcCurveBoundedPlane
SUBTYPE OF (IfcSurface);
BasisSurface : IfcPlane;
OuterBoundary : Ifc2DCompositeCurve;
InnerBoundaries : SET [0:?] OF Ifc2DCompositeCurve;
DERIVE
Dim : IfcDimensionCount
:= BasisSurface.Dim;
END_ENTITY;
|
Documentation |
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;
|
Documentation |
Fully Attributed View |
ENTITY IfcEdge
SUPERTYPE OF (ONEOF(
IfcOrientedEdge))
SUBTYPE OF (IfcTopologicalRepresentationItem);
EdgeStart : IfcVertex;
EdgeEnd : IfcVertex;
END_ENTITY;
|
Documentation |
ENTITY IfcElementarySurface
ABSTRACT SUPERTYPE OF (ONEOF(
IfcPlane))
SUBTYPE OF (IfcSurface);
Position : IfcAxis2Placement3D;
DERIVE
Dim : IfcDimensionCount
:= Position.Dim;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcEllipse
SUBTYPE OF (IfcConic);
SemiAxis1 : IfcPositiveLengthMeasure;
SemiAxis2 : IfcPositiveLengthMeasure;
END_ENTITY;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
Fully Attributed View |
ENTITY IfcFaceBound
SUPERTYPE OF (ONEOF(
IfcFaceOuterBound))
SUBTYPE OF (IfcTopologicalRepresentationItem);
Bound : IfcPolyLoop;
Orientation : BOOLEAN;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcFaceOuterBound SUBTYPE OF (IfcFaceBound); END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcFacetedBrep SUBTYPE OF (IfcManifoldSolidBrep); END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcFacetedBrepWithVoids
SUBTYPE OF (IfcManifoldSolidBrep);
Voids : SET [1:?] OF IfcClosedShell;
END_ENTITY;
|
Documentation |
ENTITY IfcGeometricRepresentationItem
ABSTRACT SUPERTYPE OF (ONEOF(
IfcBooleanResult
,IfcBoundingBox
,IfcCompositeCurveSegment
,IfcCurve
,IfcDirection
,IfcHalfSpaceSolid
,IfcPlacement
,IfcPoint
,IfcPolyLoop
,IfcSolidModel
,IfcSurface
,IfcVector));
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcHalfSpaceSolid
SUPERTYPE OF (ONEOF(
IfcBoxedHalfSpace))
SUBTYPE OF (IfcGeometricRepresentationItem);
BaseSurface : IfcSurface;
AgreementFlag : BOOLEAN;
DERIVE
Dim : IfcDimensionCount
:= 3;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcLine
SUBTYPE OF (IfcCurve);
Pnt : IfcCartesianPoint;
Dir : IfcVector;
WHERE
WR31: Dir.Dim = Pnt.Dim;
END_ENTITY;
|
Documentation |
ENTITY IfcManifoldSolidBrep
ABSTRACT SUPERTYPE OF (ONEOF(
IfcFacetedBrep
,IfcFacetedBrepWithVoids))
SUBTYPE OF (IfcSolidModel);
Outer : IfcClosedShell;
END_ENTITY;
|
Documentation |
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;
|
Documentation |
Fully Attributed View |
ENTITY IfcPath
SUBTYPE OF (IfcTopologicalRepresentationItem);
EdgeList : LIST [1:?] OF IfcOrientedEdge;
WHERE
WR21: IfcPathHeadToTail(SELF);
END_ENTITY;
|
Documentation |
ENTITY IfcPlacement
ABSTRACT SUPERTYPE OF (ONEOF(
IfcAxis1Placement
,IfcAxis2Placement2D
,IfcAxis2Placement3D))
SUBTYPE OF (IfcGeometricRepresentationItem);
Location : IfcCartesianPoint;
DERIVE
Dim : IfcDimensionCount
:= Location.Dim;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcPlane SUBTYPE OF (IfcElementarySurface); END_ENTITY;
|
Documentation |
ENTITY IfcPoint
ABSTRACT SUPERTYPE OF (ONEOF(
IfcCartesianPoint))
SUBTYPE OF (IfcGeometricRepresentationItem);
END_ENTITY;
|
Documentation |
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;
|
Documentation |
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;
|
Documentation |
Fully Attributed View |
ENTITY IfcRectangleProfileDef
SUBTYPE OF (IfcAttDrivenProfileDef);
XDim : IfcPositiveLengthMeasure;
YDim : IfcPositiveLengthMeasure;
DERIVE
CurveForSurface : IfcPolyline
:= IfcRectangleProfileIntoCurve(SELF);
END_ENTITY;
|
Documentation |
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;
|
Documentation |
ENTITY IfcSolidModel
ABSTRACT SUPERTYPE OF (ONEOF(
IfcAttDrivenExtrudedSolid
,IfcAttDrivenRevolvedSolid
,IfcCsgSolid
,IfcManifoldSolidBrep
,IfcSweptAreaSolid))
SUBTYPE OF (IfcGeometricRepresentationItem);
DERIVE
Dim : IfcDimensionCount
:= 3;
END_ENTITY;
|
Documentation |
ENTITY IfcSurface
ABSTRACT SUPERTYPE OF (ONEOF(
IfcCurveBoundedPlane
,IfcElementarySurface))
SUBTYPE OF (IfcGeometricRepresentationItem);
END_ENTITY;
|
Documentation |
ENTITY IfcSweptAreaSolid
ABSTRACT SUPERTYPE OF (ONEOF(
IfcExtrudedAreaSolid
,IfcRevolvedAreaSolid))
SUBTYPE OF (IfcSolidModel);
SweptArea : IfcCurveBoundedPlane;
WHERE
WR31: 'IFCGEOMETRYRESOURCE.IFCPLANE' IN TYPEOF(SweptArea.BasisSurface);
END_ENTITY;
|
Documentation |
ENTITY IfcTopologicalRepresentationItem
ABSTRACT SUPERTYPE OF (ONEOF(
IfcConnectedFaceSet
,IfcEdge
,IfcFace
,IfcFaceBound
,IfcPath
,IfcVertex));
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcTrapeziumProfileDef
SUBTYPE OF (IfcAttDrivenProfileDef);
BottomXDim : IfcPositiveLengthMeasure;
TopXDim : IfcPositiveLengthMeasure;
YDim : IfcPositiveLengthMeasure;
TopXOffset : IfcLengthMeasure;
DERIVE
CurveForSurface : IfcPolyline
:= IfcTrapeziumProfileIntoCurve(SELF);
END_ENTITY;
|
Documentation |
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;
|
Documentation |
Fully Attributed View |
ENTITY IfcVector
SUBTYPE OF (IfcGeometricRepresentationItem);
Orientation : IfcDirection;
Magnitude : IfcLengthMeasure;
DERIVE
Dim : IfcDimensionCount
:= Orientation.Dim;
WHERE
WR21: Magnitude >= 0.0;
END_ENTITY;
|
Documentation |
Fully Attributed View |
ENTITY IfcVertex SUBTYPE OF (IfcTopologicalRepresentationItem); END_ENTITY;
FUNCTION IfcBooleanChoose
(B : BOOLEAN ;
Choice1, Choice2 : Generic : Item) : Generic : Item;
IF B THEN
RETURN (Choice1);
ELSE
RETURN (Choice2);
END_IF;
END_FUNCTION;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;