Correct Object Assignment |
This function checks, whether the correct object types are used within the IfcRelAssigns relationship (or one of its subtypes).
HISTORY New function in IFC2x
FUNCTION IfcCorrectObjectAssignment
(Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObjectDefinition)
: LOGICAL ;
LOCAL
Count : INTEGER := 0;
END_LOCAL;
IF NOT(EXISTS(Constraint)) THEN
RETURN(TRUE);
END_IF;
CASE Constraint OF
IfcObjectTypeEnum.NOTDEFINED : RETURN(TRUE);
IfcObjectTypeEnum.PRODUCT :
BEGIN
Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IfcProduct' IN TYPEOF(temp))));
RETURN(Count = 0);
END;
IfcObjectTypeEnum.PROCESS :
BEGIN
Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IfcProcess' IN TYPEOF(temp))));
RETURN(Count = 0);
END;
IfcObjectTypeEnum.CONTROL :
BEGIN
Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IfcControl' IN TYPEOF(temp))));
RETURN(Count = 0);
END;
IfcObjectTypeEnum.RESOURCE :
BEGIN
Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IfcResource' IN TYPEOF(temp))));
RETURN(Count = 0);
END;
IfcObjectTypeEnum.ACTOR :
BEGIN
Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IfcActor' IN TYPEOF(temp))));
RETURN(Count = 0);
END;
IfcObjectTypeEnum.GROUP :
BEGIN
Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IfcGroup' IN TYPEOF(temp))));
RETURN(Count = 0);
END;
IfcObjectTypeEnum.PROJECT :
BEGIN
Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IfcProject' IN TYPEOF(temp))));
RETURN(Count = 0);
END;
OTHERWISE : RETURN(?);
END_CASE;
END_FUNCTION;
References: IfcRelAssigns