Shape Representation Types |
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.
HISTORY New function in IFC2x.
IFC2x3 CHANGE The check for MappedRepresentation has been changed to allow multiple mapped items, and the Annotation2D has been added.
IFC2x4 CHANGE The check for Curve3D, Surface2D, Surface3D, Tesselation, AdvancedBrep, and AdvancedSweptSolid has been added and CSG enhanced.
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 | ('IFCGEOMETRYRESOURCE.IfcPoint' IN TYPEOF(temp))));
END;
'PointCloud' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcCartesianPointList3D' IN TYPEOF(temp))));
END;
'Curve' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcCurve' IN TYPEOF(temp))));
END;
'Curve2D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcCurve' IN TYPEOF(temp))
AND (temp\IfcCurve.Dim = 2)));
END;
'Curve3D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcCurve' IN TYPEOF(temp))
AND (temp\IfcCurve.Dim = 3)));
END;
'Surface' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcSurface' IN TYPEOF(temp))));
END;
'Surface2D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcSurface' IN TYPEOF(temp))
AND (temp\IfcSurface.Dim = 2)));
END;
'Surface3D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcSurface' IN TYPEOF(temp))
AND (temp\IfcSurface.Dim = 3)));
END;
'FillArea' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcAnnotationFillArea' IN TYPEOF(temp))));
END;
'Text' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcTextLiteral' IN TYPEOF(temp))));
END;
'AdvancedSurface' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | 'IFCGEOMETRYRESOURCE.IfcBSplineSurface' IN TYPEOF(temp)));
END;
'Annotation2D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | (
SIZEOF(TYPEOF(temp) * [
'IFCGEOMETRYRESOURCE.IfcPoint',
'IFCGEOMETRYRESOURCE.IfcCurve',
'IFCGEOMETRICMODELRESOURCE.IfcGeometricCurveSet',
'IFCPRESENTATIONDEFINITIONRESOURCE.IfcAnnotationFillArea',
'IFCPRESENTATIONDEFINITIONRESOURCE.IfcTextLiteral']) = 1)
));
END;
'GeometricSet' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRICMODELRESOURCE.IfcGeometricSet' IN TYPEOF(temp))
OR ('IFCGEOMETRYRESOURCE.IfcPoint' IN TYPEOF(temp))
OR ('IFCGEOMETRYRESOURCE.IfcCurve' IN TYPEOF(temp))
OR ('IFCGEOMETRYRESOURCE.IfcSurface' IN TYPEOF(temp))));
END;
'GeometricCurveSet' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRICMODELRESOURCE.IfcGeometricCurveSet' IN TYPEOF(temp))
OR ('IFCGEOMETRICMODELRESOURCE.IfcGeometricSet' IN TYPEOF(temp))
OR ('IFCGEOMETRYRESOURCE.IfcPoint' IN TYPEOF(temp))
OR ('IFCGEOMETRYRESOURCE.IfcCurve' IN TYPEOF(temp))));
REPEAT i:=1 TO HIINDEX(Items);
IF ('IFCGEOMETRYRESOURCE.IfcGeometricSet' IN TYPEOF(Items[i]))
THEN
IF (SIZEOF(QUERY(temp <* Items[i]\IfcGeometricSet.Elements | 'IFCGEOMETRYRESOURCE.IfcSurface' IN TYPEOF(temp))) > 0)
THEN
Count := Count - 1;
END_IF;
END_IF;
END_REPEAT;
END;
'Tessellation' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | 'IFCGEOMETRICMODELRESOURCE.IfcTessellatedItem' IN TYPEOF(temp)));
END;
'SurfaceOrSolidModel' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFCGEOMETRICMODELRESOURCE.IfcTessellatedItem',
'IFCGEOMETRICMODELRESOURCE.IfcShellBasedSurfaceModel',
'IFCGEOMETRICMODELRESOURCE.IfcFaceBasedSurfaceModel',
'IFCGEOMETRICMODELRESOURCE.IfcSolidModel'] * TYPEOF(temp)) >= 1
));
END;
'SurfaceModel' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFCGEOMETRICMODELRESOURCE.IfcTessellatedItem',
'IFCGEOMETRICMODELRESOURCE.IfcShellBasedSurfaceModel',
'IFCGEOMETRICMODELRESOURCE.IfcFaceBasedSurfaceModel'] * TYPEOF(temp)) >= 1
));
END;
'SolidModel' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRICMODELRESOURCE.IfcSolidModel' IN TYPEOF(temp))));
END;
'SweptSolid' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([
'IFCGEOMETRICMODELRESOURCE.IfcExtrudedAreaSolid',
'IFCGEOMETRICMODELRESOURCE.IfcRevolvedAreaSolid'] * TYPEOF(temp)) >= 1
) AND (SIZEOF([
'IFCGEOMETRICMODELRESOURCE.IfcExtrudedAreaSolidTapered',
'IFCGEOMETRICMODELRESOURCE.IfcRevolvedAreaSolidTapered'] * TYPEOF(temp)) = 0
)
));
END;
'AdvancedSweptSolid' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFCGEOMETRICMODELRESOURCE.IfcSweptAreaSolid',
'IFCGEOMETRICMODELRESOURCE.IfcSweptDiskSolid'] * TYPEOF(temp)) >= 1
));
END;
'CSG' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFCGEOMETRICMODELRESOURCE.IfcBooleanResult',
'IFCGEOMETRICMODELRESOURCE.IfcCsgPrimitive3D',
'IFCGEOMETRICMODELRESOURCE.IfcCsgSolid'] * TYPEOF(temp)) >= 1
));
END;
'Clipping' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFCGEOMETRICMODELRESOURCE.IfcCsgSolid',
'IFCGEOMETRICMODELRESOURCE.IfcBooleanClippingResult'] * TYPEOF(temp)) >= 1
));
END;
'Brep' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRICMODELRESOURCE.IfcFacetedBrep' IN TYPEOF(temp))));
END;
'AdvancedBrep' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRICMODELRESOURCE.IfcManifoldSolidBrep' IN TYPEOF(temp))));
END;
'BoundingBox' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRICMODELRESOURCE.IfcBoundingBox' IN TYPEOF(temp))));
IF (SIZEOF(Items) > 1)
THEN
Count := 0;
END_IF;
END;
'SectionedSpine' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRICMODELRESOURCE.IfcSectionedSpine' IN TYPEOF(temp))));
END;
'LightSource' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCPRESENTATIONORGANIZATIONRESOURCE.IfcLightSource' IN TYPEOF(temp))));
END;
'MappedRepresentation' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFCGEOMETRYRESOURCE.IfcMappedItem' IN TYPEOF(temp))));
END;
OTHERWISE : RETURN(?);
END_CASE;
RETURN (Count = SIZEOF(Items));
END_FUNCTION;
References: IfcShapeRepresentation