RULE unique_gdt_element_id_constraint

(* SCHEMA step_merged_ap_schema; *)
-- IN AP238 STEP-NC/AP242
RULE unique_gdt_element_id_constraint FOR (dimensional_location, dimensional_size, geometric_tolerance, product_definition_shape, shape_aspect, shape_aspect_relationship );
   LOCAL
      bss : BAG OF STRING := [];
      cum_bss : BAG OF STRING := [];
      dssa : SET OF dimensional_size := [];
      dssai : SET OF dimensional_size := [];
      gtsi : SET OF geometric_tolerance := QUERY (gtsi <* geometric_tolerance| EXISTS(gtsi\geometric_tolerance.id));
      sarsa : SET OF shape_aspect_relationship := [];
      sarsai : SET OF shape_aspect_relationship := [];
      ssa : SET OF shape_aspect := [];
      ssai : SET OF shape_aspect := [];
      pass : BOOLEAN := TRUE;
   END_LOCAL;
      REPEAT ii := 1 TO SIZEOF(product_definition_shape) WHILE pass;
         bss := [];
         ssa := bag_to_set(USEDIN(product_definition_shape[ii], 'STEP_MERGED_AP_SCHEMA.SHAPE_ASPECT.OF_SHAPE'));
         ssai := QUERY (sa <* ssa| EXISTS(sa\shape_aspect.id));
         IF (SIZEOF(ssai) > 0) AND (SIZEOF(ssai) <> SIZEOF(ssa)) THEN
            pass := FALSE;
         END_IF;
         REPEAT i := 1 TO SIZEOF(ssai);
            IF ssai[i] IN ssa THEN
               bss := bss + ssai[i]\shape_aspect.id;
            END_IF;
            dssa := bag_to_set(USEDIN(ssai[i], 'STEP_MERGED_AP_SCHEMA.DIMENSIONAL_SIZE.APPLIES_TO'));
            dssai := QUERY (ds <* dssa| EXISTS(ds\dimensional_size.id));
            IF (SIZEOF(dssai) > 0) AND (SIZEOF(dssai) <> SIZEOF(dssa)) THEN
               pass := FALSE;
            END_IF;
            REPEAT j := 1 TO SIZEOF(dssai);
               IF dssai[j]\dimensional_size.applies_to IN ssa THEN
                  bss := bss + dssai[j]\dimensional_size.id;
               END_IF;
            END_REPEAT;
            sarsa := bag_to_set(USEDIN(ssai[i], 'STEP_MERGED_AP_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'));
            sarsai := QUERY (sar <* sarsa| EXISTS(sar\shape_aspect_relationship.id));
            IF (SIZEOF(sarsai) > 0) AND (SIZEOF(sarsai) <> SIZEOF(sarsa)) THEN
               pass := FALSE;
            END_IF;
            REPEAT j := 1 TO SIZEOF(sarsai);
               IF sarsai[j]\shape_aspect_relationship.relating_shape_aspect IN ssa THEN
                  bss := bss + sarsai[j]\shape_aspect_relationship.id;
               END_IF;
            END_REPEAT;
         END_REPEAT;
         cum_bss := cum_bss + bss;
      END_REPEAT;
      IF (SIZEOF(gtsi) > 0) AND (SIZEOF(gtsi) <> SIZEOF(geometric_tolerance)) THEN
         pass := FALSE;
      END_IF;
      REPEAT j := 1 TO SIZEOF(gtsi);
         IF gtsi[j] IN geometric_tolerance THEN
            cum_bss := cum_bss + gtsi[j]\geometric_tolerance.id;
         END_IF;
         IF SIZEOF(bag_to_set(cum_bss)) <> SIZEOF(cum_bss) THEN
            pass := FALSE;
         END_IF;
      END_REPEAT;
   WHERE
      WR1:
         pass;
END_RULE;

[Top Level Definitions] [Exit]

Generated by STEP Tools® EXPRESS to HTML Converter
2026-09-02T09:08:05-04:00