8.18.6.3 IfcShapeRepresentationTypes
8.18.6.3.1 Semantic definition
The function gets the representation type and the assigned set of representation items as input and verifies whether the correct items are assigned according to the representation type given.
8.18.6.3.2 Formal representation
FUNCTION IfcShapeRepresentationTypes (RepType : IfcLabel; Items : SET OF IfcRepresentationItem) : LOGICAL; LOCAL Count : INTEGER := 0; END_LOCAL; CASE RepType OF 'Point' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCPOINT' IN TYPEOF(temp)) OR ('IFC4X3_DEV_738df036.IFCCARTESIANPOINTLIST' IN TYPEOF(temp)))); END; 'PointCloud' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCCARTESIANPOINTLIST3D' IN TYPEOF(temp)))); END; 'Curve' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCCURVE' IN TYPEOF(temp)))); END; 'Curve2D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCCURVE' IN TYPEOF(temp)) AND (temp\IfcCurve.Dim = 2))); END; 'Curve3D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCCURVE' IN TYPEOF(temp)) AND (temp\IfcCurve.Dim = 3))); END; 'Segment' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCSEGMENT' IN TYPEOF(temp)))); END; 'Surface' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCSURFACE' IN TYPEOF(temp)))); END; 'Surface2D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCSURFACE' IN TYPEOF(temp)) AND (temp\IfcSurface.Dim = 2))); END; 'Surface3D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCSURFACE' IN TYPEOF(temp)) AND (temp\IfcSurface.Dim = 3))); END; 'SectionedSurface' : BEGIN Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3_DEV_738df036.IFCSECTIONEDSURFACE' IN TYPEOF(temp))); END; 'FillArea' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCANNOTATIONFILLAREA' IN TYPEOF(temp)))); END; 'Text' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCTEXTLITERAL' IN TYPEOF(temp)))); END; 'AdvancedSurface' : BEGIN Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3_DEV_738df036.IFCBSPLINESURFACE' IN TYPEOF(temp))); END; 'Annotation2D' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ( SIZEOF(TYPEOF(temp) * [ 'IFC4X3_DEV_738df036.IFCPOINT', 'IFC4X3_DEV_738df036.IFCCURVE', 'IFC4X3_DEV_738df036.IFCGEOMETRICCURVESET', 'IFC4X3_DEV_738df036.IFCANNOTATIONFILLAREA', 'IFC4X3_DEV_738df036.IFCTEXTLITERAL']) = 1) )); END; 'GeometricSet' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCGEOMETRICSET' IN TYPEOF(temp)) OR ('IFC4X3_DEV_738df036.IFCPOINT' IN TYPEOF(temp)) OR ('IFC4X3_DEV_738df036.IFCCURVE' IN TYPEOF(temp)) OR ('IFC4X3_DEV_738df036.IFCSURFACE' IN TYPEOF(temp)))); END; 'GeometricCurveSet' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCGEOMETRICCURVESET' IN TYPEOF(temp)) OR ('IFC4X3_DEV_738df036.IFCGEOMETRICSET' IN TYPEOF(temp)) OR ('IFC4X3_DEV_738df036.IFCPOINT' IN TYPEOF(temp)) OR ('IFC4X3_DEV_738df036.IFCCURVE' IN TYPEOF(temp)))); REPEAT i:=1 TO HIINDEX(Items); IF ('IFC4X3_DEV_738df036.IFCGEOMETRICSET' IN TYPEOF(Items[i])) THEN IF (SIZEOF(QUERY(temp <* Items[i]\IfcGeometricSet.Elements | 'IFC4X3_DEV_738df036.IFCSURFACE' IN TYPEOF(temp))) > 0) THEN Count := Count - 1; END_IF; END_IF; END_REPEAT; END; 'Tessellation' : BEGIN Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3_DEV_738df036.IFCTESSELLATEDITEM' IN TYPEOF(temp))); END; 'SurfaceOrSolidModel' : BEGIN Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ 'IFC4X3_DEV_738df036.IFCTESSELLATEDITEM', 'IFC4X3_DEV_738df036.IFCSHELLBASEDSURFACEMODEL', 'IFC4X3_DEV_738df036.IFCFACEBASEDSURFACEMODEL', 'IFC4X3_DEV_738df036.IFCSOLIDMODEL'] * TYPEOF(temp)) >= 1 )); END; 'SurfaceModel' : BEGIN Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ 'IFC4X3_DEV_738df036.IFCTESSELLATEDITEM', 'IFC4X3_DEV_738df036.IFCSHELLBASEDSURFACEMODEL', 'IFC4X3_DEV_738df036.IFCFACEBASEDSURFACEMODEL'] * TYPEOF(temp)) >= 1 )); END; 'SolidModel' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCSOLIDMODEL' IN TYPEOF(temp)))); END; 'SweptSolid' : BEGIN Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([ 'IFC4X3_DEV_738df036.IFCEXTRUDEDAREASOLID', 'IFC4X3_DEV_738df036.IFCREVOLVEDAREASOLID'] * TYPEOF(temp)) >= 1 ) AND (SIZEOF([ 'IFC4X3_DEV_738df036.IFCEXTRUDEDAREASOLIDTAPERED', 'IFC4X3_DEV_738df036.IFCREVOLVEDAREASOLIDTAPERED'] * TYPEOF(temp)) = 0 ) )); END; 'AdvancedSweptSolid' : BEGIN Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ 'IFC4X3_DEV_738df036.IFCSWEPTAREASOLID', 'IFC4X3_DEV_738df036.IFCSWEPTDISKSOLID', 'IFC4X3_DEV_738df036.IFCSECTIONEDSOLIDHORIZONTAL'] * TYPEOF(temp)) >= 1 )); END; 'CSG' : BEGIN Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ 'IFC4X3_DEV_738df036.IFCBOOLEANRESULT', 'IFC4X3_DEV_738df036.IFCCSGPRIMITIVE3D', 'IFC4X3_DEV_738df036.IFCCSGSOLID'] * TYPEOF(temp)) >= 1 )); END; 'Clipping' : BEGIN Count := SIZEOF(QUERY(temp <* Items | SIZEOF([ 'IFC4X3_DEV_738df036.IFCCSGSOLID', 'IFC4X3_DEV_738df036.IFCBOOLEANCLIPPINGRESULT'] * TYPEOF(temp)) >= 1 )); END; 'Brep' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCFACETEDBREP' IN TYPEOF(temp)))); END; 'AdvancedBrep' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCMANIFOLDSOLIDBREP' IN TYPEOF(temp)))); END; 'BoundingBox' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCBOUNDINGBOX' IN TYPEOF(temp)))); IF (SIZEOF(Items) > 1) THEN Count := 0; END_IF; END; 'SectionedSpine' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCSECTIONEDSPINE' IN TYPEOF(temp)))); END; 'LightSource' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCLIGHTSOURCE' IN TYPEOF(temp)))); END; 'MappedRepresentation' : BEGIN Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_738df036.IFCMAPPEDITEM' IN TYPEOF(temp)))); END; OTHERWISE : RETURN(?); END_CASE; RETURN (Count = SIZEOF(Items)); END_FUNCTION;