8.18.6.3 IfcShapeRepresentationTypes(形状表示类型)
8.18.6.3.1 语义定义(Semantic definition)
该函数接收表示类型和分配的表示项集合作为输入,并根据给定的表示类型验证是否正确分配了相应的项。
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_62887e3f.IFCPOINT' IN TYPEOF(temp))
OR ('IFC4X3_DEV_62887e3f.IFCCARTESIANPOINTLIST' IN TYPEOF(temp))));
END;
'PointCloud' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCCARTESIANPOINTLIST3D' IN TYPEOF(temp))));
END;
'Curve' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCCURVE' IN TYPEOF(temp))));
END;
'Curve2D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCCURVE' IN TYPEOF(temp))
AND (temp\IfcCurve.Dim = 2)));
END;
'Curve3D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCCURVE' IN TYPEOF(temp))
AND (temp\IfcCurve.Dim = 3)));
END;
'Segment' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCSEGMENT' IN TYPEOF(temp))));
END;
'Surface' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCSURFACE' IN TYPEOF(temp))));
END;
'Surface2D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCSURFACE' IN TYPEOF(temp))
AND (temp\IfcSurface.Dim = 2)));
END;
'Surface3D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCSURFACE' IN TYPEOF(temp))
AND (temp\IfcSurface.Dim = 3)));
END;
'SectionedSurface' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3_DEV_62887e3f.IFCSECTIONEDSURFACE' IN TYPEOF(temp)));
END;
'FillArea' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCANNOTATIONFILLAREA' IN TYPEOF(temp))));
END;
'Text' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCTEXTLITERAL' IN TYPEOF(temp))));
END;
'AdvancedSurface' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | 'IFC4X3_DEV_62887e3f.IFCBSPLINESURFACE' IN TYPEOF(temp)));
END;
'Annotation2D' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | (
SIZEOF(TYPEOF(temp) * [
'IFC4X3_DEV_62887e3f.IFCPOINT',
'IFC4X3_DEV_62887e3f.IFCCURVE',
'IFC4X3_DEV_62887e3f.IFCGEOMETRICCURVESET',
'IFC4X3_DEV_62887e3f.IFCANNOTATIONFILLAREA',
'IFC4X3_DEV_62887e3f.IFCTEXTLITERAL']) = 1)
));
END;
'GeometricSet' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCGEOMETRICSET' IN TYPEOF(temp))
OR ('IFC4X3_DEV_62887e3f.IFCPOINT' IN TYPEOF(temp))
OR ('IFC4X3_DEV_62887e3f.IFCCURVE' IN TYPEOF(temp))
OR ('IFC4X3_DEV_62887e3f.IFCSURFACE' IN TYPEOF(temp))));
END;
'GeometricCurveSet' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCGEOMETRICCURVESET' IN TYPEOF(temp))
OR ('IFC4X3_DEV_62887e3f.IFCGEOMETRICSET' IN TYPEOF(temp))
OR ('IFC4X3_DEV_62887e3f.IFCPOINT' IN TYPEOF(temp))
OR ('IFC4X3_DEV_62887e3f.IFCCURVE' IN TYPEOF(temp))));
REPEAT i:=1 TO HIINDEX(Items);
IF ('IFC4X3_DEV_62887e3f.IFCGEOMETRICSET' IN TYPEOF(Items[i]))
THEN
IF (SIZEOF(QUERY(temp <* Items[i]\IfcGeometricSet.Elements | 'IFC4X3_DEV_62887e3f.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_62887e3f.IFCTESSELLATEDITEM' IN TYPEOF(temp)));
END;
'SurfaceOrSolidModel' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFC4X3_DEV_62887e3f.IFCTESSELLATEDITEM',
'IFC4X3_DEV_62887e3f.IFCSHELLBASEDSURFACEMODEL',
'IFC4X3_DEV_62887e3f.IFCFACEBASEDSURFACEMODEL',
'IFC4X3_DEV_62887e3f.IFCSOLIDMODEL'] * TYPEOF(temp)) >= 1
));
END;
'SurfaceModel' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFC4X3_DEV_62887e3f.IFCTESSELLATEDITEM',
'IFC4X3_DEV_62887e3f.IFCSHELLBASEDSURFACEMODEL',
'IFC4X3_DEV_62887e3f.IFCFACEBASEDSURFACEMODEL'] * TYPEOF(temp)) >= 1
));
END;
'SolidModel' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCSOLIDMODEL' IN TYPEOF(temp))));
END;
'SweptSolid' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | (SIZEOF([
'IFC4X3_DEV_62887e3f.IFCEXTRUDEDAREASOLID',
'IFC4X3_DEV_62887e3f.IFCREVOLVEDAREASOLID'] * TYPEOF(temp)) >= 1
) AND (SIZEOF([
'IFC4X3_DEV_62887e3f.IFCEXTRUDEDAREASOLIDTAPERED',
'IFC4X3_DEV_62887e3f.IFCREVOLVEDAREASOLIDTAPERED'] * TYPEOF(temp)) = 0
)
));
END;
'AdvancedSweptSolid' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFC4X3_DEV_62887e3f.IFCSWEPTAREASOLID',
'IFC4X3_DEV_62887e3f.IFCSWEPTDISKSOLID',
'IFC4X3_DEV_62887e3f.IFCSECTIONEDSOLIDHORIZONTAL'] * TYPEOF(temp)) >= 1
));
END;
'CSG' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFC4X3_DEV_62887e3f.IFCBOOLEANRESULT',
'IFC4X3_DEV_62887e3f.IFCCSGPRIMITIVE3D',
'IFC4X3_DEV_62887e3f.IFCCSGSOLID'] * TYPEOF(temp)) >= 1
));
END;
'Clipping' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | SIZEOF([
'IFC4X3_DEV_62887e3f.IFCCSGSOLID',
'IFC4X3_DEV_62887e3f.IFCBOOLEANCLIPPINGRESULT'] * TYPEOF(temp)) >= 1
));
END;
'Brep' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCFACETEDBREP' IN TYPEOF(temp))));
END;
'AdvancedBrep' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCMANIFOLDSOLIDBREP' IN TYPEOF(temp))));
END;
'BoundingBox' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCBOUNDINGBOX' IN TYPEOF(temp))));
IF (SIZEOF(Items) > 1)
THEN
Count := 0;
END_IF;
END;
'SectionedSpine' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCSECTIONEDSPINE' IN TYPEOF(temp))));
END;
'LightSource' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCLIGHTSOURCE' IN TYPEOF(temp))));
END;
'MappedRepresentation' :
BEGIN
Count := SIZEOF(QUERY(temp <* Items | ('IFC4X3_DEV_62887e3f.IFCMAPPEDITEM' IN TYPEOF(temp))));
END;
OTHERWISE : RETURN(?);
END_CASE;
RETURN (Count = SIZEOF(Items));
END_FUNCTION;