Index Page
Documentation |
EXPRESS-G Diagram |
IDL Definition |
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 IfcBooleanOperator = ENUMERATION OF (
Union
,Intersection
,Difference);
END_TYPE;
Documentation
TYPE IfcTransitionCode = ENUMERATION OF (
Discontinuous
,Continuous
,ContSameGradient
,ContSameGradientSameCurvature);
END_TYPE;
Documentation
TYPE IfcTrimmingPreference = ENUMERATION OF (
Cartesian
,Parameter
,Unspecified);
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 IfcProfileTypeEnum = ENUMERATION OF (
Curve
,Area);
END_TYPE;
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;
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;
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;
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;
Documentation
ENTITY IfcBoundedCurve
ABSTRACT SUPERTYPE OF (ONEOF(
IfcPolyline
,IfcTrimmedCurve
,IfcCompositeCurve))
SUBTYPE OF (IfcCurve);
DERIVE
Dim : IfcDimensionCount
:= IfcBoundedCurveDim(SELF);
END_ENTITY;
Documentation
ENTITY IfcBoundingBox
SUBTYPE OF (
IfcGeometricRepresentationItem );
Corner : IfcCartesianPoint;
XDim : IfcPositiveLengthMeasure;
YDim : IfcPositiveLengthMeasure;
ZDim : IfcPositiveLengthMeasure;
DERIVE
Dim : IfcDimensionCount
:= 3;
END_ENTITY;
Documentation
ENTITY IfcBoxedHalfSpace
SUBTYPE OF(IfcHalfSpaceSolid);
Enclosure : IfcBoundingBox;
WHERE
WR31 : NOT ('IFCGEOMETRYRESOURCE.IFCCURVEBOUNDEDPLANE' IN
TYPEOF(SELF\IfcHalfSpaceSolid.BaseSurface));
END_ENTITY;
Documentation
ENTITY IfcCartesianPoint
SUBTYPE OF (IfcPoint);
Coordinates : LIST [1:3] OF IfcLengthMeasure;
DERIVE
Dim : IfcDimensionCount
:= HIINDEX(Coordinates);
WHERE
WR31 : HIINDEX(Coordinates) >= 2;
END_ENTITY;
Documentation
ENTITY IfcCircle
SUBTYPE OF (IfcConic);
Radius : IfcPositiveLengthMeasure;
END_ENTITY;
Documentation
ENTITY IfcClosedShell SUBTYPE OF (IfcConnectedFaceSet); END_ENTITY;
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;
Documentation
ENTITY Ifc2DCompositeCurve
SUBTYPE OF (IfcCompositeCurve);
WHERE
WR51: SELF\IfcCompositeCurve.ClosedCurve;
WR52: SELF\IfcBoundedCurve.Dim = 2;
END_ENTITY;
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;
Documentation
ENTITY IfcConic
ABSTRACT SUPERTYPE OF (ONEOF(
IfcCircle
,IfcEllipse))
SUBTYPE OF (IfcCurve);
Position : IfcAxis2Placement;
DERIVE
Dim : IfcDimensionCount
:= Position.Dim;
END_ENTITY;
Documentation
ENTITY IfcConnectedFaceSet
SUPERTYPE OF (ONEOF(IfcClosedShell))
SUBTYPE OF (IfcTopologicalRepresentationItem);
CfsFaces : SET [1:?] OF IfcFace;
END_ENTITY;
Documentation
ENTITY IfcCsgSolid
SUBTYPE OF (IfcSolidModel);
TreeRootExpression : IfcCsgSelect;
END_ENTITY;
Documentation
ENTITY IfcCurve
ABSTRACT SUPERTYPE OF (ONEOF(
IfcLine
,IfcConic
,IfcBoundedCurve))
SUBTYPE OF (IfcGeometricRepresentationItem);
END_ENTITY;
Documentation
ENTITY IfcCurveBoundedPlane
SUBTYPE OF (IfcSurface);
BasisSurface : IfcPlane;
OuterBoundary : Ifc2DCompositeCurve;
InnerBoundaries : SET [0:?] OF Ifc2DCompositeCurve;
DERIVE
Dim : IfcDimensionCount
:= BasisSurface.Dim;
END_ENTITY;
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;
Documentation
ENTITY IfcElementarySurface
ABSTRACT SUPERTYPE OF (ONEOF(IfcPlane))
SUBTYPE OF (IfcSurface);
Position : IfcAxis2Placement3D;
DERIVE
Dim : IfcDimensionCount
:= Position.Dim;
END_ENTITY;
Documentation
ENTITY IfcEllipse
SUBTYPE OF (IfcConic);
SemiAxis1 : IfcPositiveLengthMeasure;
SemiAxis2 : IfcPositiveLengthMeasure;
END_ENTITY;
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;
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;
Documentation
ENTITY IfcFaceBound
SUPERTYPE OF (ONEOF(
IfcFaceOuterBound))
SUBTYPE OF (IfcTopologicalRepresentationItem);
Bound : IfcPolyLoop;
Orientation : BOOLEAN;
END_ENTITY;
Documentation
ENTITY IfcFaceOuterBound SUBTYPE OF (IfcFaceBound); END_ENTITY;
Documentation
ENTITY IfcFacetedBrep SUBTYPE OF (IfcManifoldSolidBrep); END_ENTITY;
Documentation
ENTITY IfcFacetedBrepWithVoids
SUBTYPE OF (IfcManifoldSolidBrep);
Voids : SET [1:?] OF IfcClosedShell;
END_ENTITY;
Documentation
ENTITY IfcGeometricRepresentationItem
ABSTRACT SUPERTYPE OF (ONEOF(
IfcBooleanResult
,IfcBoundingBox
,IfcPoint
,IfcCurve
,IfcDirection
,IfcPolyLoop
,IfcPlacement
,IfcSurface
,IfcCompositeCurveSegment
,IfcHalfSpaceSolid
,IfcSolidModel
,IfcVector ));
END_ENTITY;
Documentation
ENTITY IfcHalfSpaceSolid
SUPERTYPE OF (ONEOF(
IfcBoxedHalfSpace))
SUBTYPE OF (IfcGeometricRepresentationItem);
BaseSurface : IfcSurface;
AgreementFlag : BOOLEAN;
DERIVE
Dim : IfcDimensionCount
:= 3;
END_ENTITY;
Documentation
ENTITY IfcLine
SUBTYPE OF (IfcCurve);
Pnt : IfcCartesianPoint;
Dir : IfcVector;
DERIVE
Dim : IfcDimensionCount
:= Pnt.Dim;
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
ENTITY IfcPlacement
ABSTRACT SUPERTYPE OF (ONEOF(
IfcAxis1Placement
,IfcAxis2Placement2D
,IfcAxis2Placement3D))
SUBTYPE OF (IfcGeometricRepresentationItem);
Location : IfcCartesianPoint;
DERIVE
Dim : IfcDimensionCount
:= Location.Dim;
END_ENTITY;
Documentation
ENTITY IfcPlane SUBTYPE OF (IfcElementarySurface); END_ENTITY;
Documentation
ENTITY IfcPoint ABSTRACT SUPERTYPE OF (ONEOF (IfcCartesianPoint)) SUBTYPE OF (IfcGeometricRepresentationItem); END_ENTITY;
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;
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;
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;
Documentation
ENTITY IfcSolidModel
ABSTRACT SUPERTYPE OF (ONEOF(
IfcCsgSolid
,IfcManifoldSolidBrep
,IfcSweptAreaSolid
,IfcAttDrivenExtrudedSolid
,IfcAttDrivenRevolvedSolid))
SUBTYPE OF (IfcGeometricRepresentationItem);
DERIVE
Dim : IfcDimensionCount
:= 3;
END_ENTITY;
Documentation
ENTITY IfcSurface
ABSTRACT SUPERTYPE OF (ONEOF(
IfcElementarySurface
,IfcCurveBoundedPlane))
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
,IfcFace
,IfcFaceBound));
END_ENTITY;
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;
Documentation
ENTITY IfcVector
SUBTYPE OF (IfcGeometricRepresentationItem);
Orientation : IfcDirection;
Magnitude : IfcLengthMeasure;
DERIVE
Dim : IfcDimensionCount
:= Orientation.Dim;
WHERE
WR21: Magnitude >= 0.0;
END_ENTITY;
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;
Documentation
ENTITY IfcAttDrivenClippedExtrudedSolid
SUBTYPE OF (IfcAttDrivenExtrudedSolid);
ClippingHalfSpaces : LIST [1:?] OF IfcHalfSpaceSolid;
END_ENTITY;
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;
Documentation
ENTITY IfcAttDrivenTaperedExtrudedSegment
SUBTYPE OF (IfcAttDrivenExtrudedSegment);
TaperingFactor : IfcPositiveRatioMeasure;
END_ENTITY;
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;
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;
Documentation
ENTITY IfcAttDrivenClippedRevolvedSolid
SUBTYPE OF (IfcAttDrivenRevolvedSolid);
ClippingHalfSpaces : LIST [1:?] OF IfcHalfSpaceSolid;
END_ENTITY;
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;
Documentation
ENTITY IfcAttDrivenTaperedRevolvedSegment
SUBTYPE OF (IfcAttDrivenRevolvedSegment);
TaperingFactor : IfcPositiveRatioMeasure;
END_ENTITY;
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;
Documentation
ENTITY IfcAttDrivenProfileDef
ABSTRACT SUPERTYPE OF (ONEOF(
IfcRectangleProfileDef
,IfcCircleProfileDef
,IfcTrapeziumProfileDef
,IfcArbitraryProfileDef));
Position : IfcAxis2Placement2D;
ProfileType : IfcProfileTypeEnum;
END_ENTITY;
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;
Documentation
ENTITY IfcCircleProfileDef
SUBTYPE OF (IfcAttDrivenProfileDef);
Radius : IfcPositiveLengthMeasure;
DERIVE
CurveForSurface : IfcTrimmedCurve
:= IfcCircleProfileIntoCurve(SELF);
END_ENTITY;
Documentation
ENTITY IfcRectangleProfileDef
SUBTYPE OF (IfcAttDrivenProfileDef);
XDim : IfcPositiveLengthMeasure;
YDim : IfcPositiveLengthMeasure;
DERIVE
CurveForSurface : IfcPolyline
:= IfcRectangleProfileIntoCurve(SELF);
END_ENTITY;
Documentation
ENTITY IfcTrapeziumProfileDef
SUBTYPE OF (IfcAttDrivenProfileDef);
BottomXDim : IfcPositiveLengthMeasure;
TopXDim : IfcPositiveLengthMeasure;
YDim : IfcPositiveLengthMeasure;
TopXOffset : IfcLengthMeasure;
DERIVE
CurveForSurface : IfcPolyline
:= IfcTrapeziumProfileIntoCurve(SELF);
END_ENTITY;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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