Navigation

IfcCorrectObjectAssignment

This function checks, whether the correct object types are used within the IfcRelAssigns relationship (or one of its subtypes).

EXPRESS specification:

FUNCTION IfcCorrectObjectAssignment
  (Constraint: IfcObjectTypeEnum; Objects : SET[1:?] OF IfcObject)
  : LOGICAL ;
  
LOCAL
  Count : INTEGER := 0;
END_LOCAL;

  IF (NOT(EXISTS(Constraint)) OR (Constraint = IfcObjectTypeEnum.NOTDEFINED))
  THEN 
    RETURN(?);
    ELSE
    IF (Constraint = IfcObjectTypeEnum.PRODUCT)
    THEN
      Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IFCPRODUCT' IN TYPEOF(temp))));
      RETURN(Count = 0);
      ELSE
      IF (Constraint = IfcObjectTypeEnum.PROCESS)
      THEN
        Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IFCPROCESS' IN TYPEOF(temp))));
        RETURN(Count = 0);
        ELSE
        IF (Constraint = IfcObjectTypeEnum.CONTROL)
        THEN
          Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IFCCONTROL' IN TYPEOF(temp))));
          RETURN(Count = 0);
          ELSE
          IF (Constraint = IfcObjectTypeEnum.RESOURCE)
          THEN
            Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IFCRESOURCE' IN TYPEOF(temp))));
            RETURN(Count = 0);
            ELSE
            IF (Constraint = IfcObjectTypeEnum.ACTOR)
            THEN
              Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IFCACTOR' IN TYPEOF(temp))));
              RETURN(Count = 0);
              ELSE
              IF (Constraint = IfcObjectTypeEnum.GROUP)
              THEN
                Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IFCGROUP' IN TYPEOF(temp))));
                RETURN(Count = 0);
                ELSE
                IF (Constraint = IfcObjectTypeEnum.PROJECT)
                THEN
                  Count := SIZEOF(QUERY(temp <* Objects | NOT('IFCKERNEL.IFCPROJECT' IN TYPEOF(temp))));
                  RETURN(Count = 0);
                END_IF;
              END_IF;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
  END_IF;
  RETURN(?);

END_FUNCTION;