| Integrated generic resource: Shape variation tolerances | ISO 10303-47:2021(E)  © ISO  | 
         
         (*
ISO/TC 184/SC 4/WG 12 N10696 - ISO 10303-47 Shape variation tolerances - EXPRESS
Supersedes 
         ISO/TC 184/SC 4/WG 12 N10087
*)
         
            SCHEMA shape_tolerance_schema;
         REFERENCE FROM 
         basic_attribute_schema   -- ISO 10303-41
  (get_id_value,
           
         id_attribute,
           
         id_attribute_select);
         
         REFERENCE FROM 
         measure_schema   -- ISO 10303-41
  (derive_dimensional_exponents,
           
         dimensional_exponents,
           
         length_measure_with_unit,
           
         measure_with_unit,
           
         measure_value,
           
         plane_angle_measure_with_unit);
         
         REFERENCE FROM 
         product_property_definition_schema   -- ISO 10303-41
  (product_definition_shape,
           
         shape_aspect,
           
         shape_aspect_relationship);
         
         REFERENCE FROM 
         product_property_representation_schema   -- ISO 10303-41
  (item_identified_representation_usage_definition);
         
         REFERENCE FROM 
         qualified_measure_schema   -- ISO 10303-45
  (measure_representation_item);
         
         REFERENCE FROM 
         representation_schema   -- ISO 10303-43
  (representation);
         
         REFERENCE FROM 
         shape_aspect_definition_schema   -- ISO 10303-47
  (datum_reference,
           
         datum_system,
           
         limit_condition,
           
         general_datum_reference);
         
         REFERENCE FROM 
         shape_dimension_schema   -- ISO 10303-47
  (dimensional_characteristic,
           
         dimensional_location,
           
         dimensional_size);
         
         REFERENCE FROM 
         support_resource_schema   -- ISO 10303-41
  (bag_to_set,
           
         identifier,
           
         label,
           
         text,
           
         type_check_function);
         
TYPE area_unit_type =
         
         EXTENSIBLE
         
         ENUMERATION
         
         OF
         
            
         (circular,
    square,
    rectangular,
    cylindrical,
    spherical);
         END_TYPE; 
         
TYPE datum_system_or_reference =
         
         
         SELECT
            (datum_reference, 
    datum_system);
         END_TYPE; 
         
TYPE directed_tolerance_zone_type =
         
         ENUMERATION
         
         OF
         
            
         (perpendicular,
    parallel,
    including);
         END_TYPE; 
         
TYPE geometric_tolerance_auxiliary_classification_enum =
         
         ENUMERATION
         
         OF
         
            
         (all_over,
    unless_otherwise_specified);
         END_TYPE; 
         
TYPE geometric_tolerance_modifier =
         
         EXTENSIBLE
         
         ENUMERATION
         
         OF
         
            
         (circle_a,
    maximum_material_requirement,
    least_material_requirement,
    reciprocity_requirement,
    any_cross_section,
    free_state,
    common_zone,
    minor_diameter,
    major_diameter,
    pitch_diameter,
    line_element,
    not_convex,
    statistical_tolerance,
    tangent_plane,
    each_radial_element,
    separate_requirement,
    united_feature,
    associated_minmax_feature,
    associated_least_square_feature,
    associated_minimum_inscribed_feature,
    associated_tangent_feature,
    associated_maximum_inscribed_feature,
    reference_minimax_feature_without_constraint,
    reference_minimax_feature_with_external_material_constraint,
    reference_minimax_feature_with_internal_material_constraint,
    reference_least_square_feature_without_constraint,
    reference_least_square_feature_with_external_material_constraint,
    reference_least_square_feature_with_internal_material_constraint,
    reference_minimum_circumscribed_feature,
    reference_maximum_inscribed_feature,
    total_range_deviations,
    peak_height,
    valley_depth,
    standard_deviation);
         END_TYPE; 
         
TYPE geometric_tolerance_target =
         
         
         SELECT
            (dimensional_location, 
    dimensional_size, 
    product_definition_shape, 
    shape_aspect);
         END_TYPE; 
         
TYPE gps_filtration_specification_target =
         
         EXTENSIBLE
         
         GENERIC_ENTITY
         
         
         SELECT
            (geometric_tolerance);
         END_TYPE; 
         
TYPE gps_filtration_type =
         
         EXTENSIBLE
         
         
         SELECT
            (geometric_tolerance_modifier);
         END_TYPE; 
         
TYPE length_or_plane_angle_measure_with_unit_select =
         
         
         SELECT
            (length_measure_with_unit, 
    plane_angle_measure_with_unit);
         END_TYPE; 
         
TYPE oriented_tolerance_zone_type =
         
         ENUMERATION
         
         OF
         
            
         (perpendicular,
    parallel,
    angular);
         END_TYPE; 
         
TYPE shape_tolerance_select =
         
         
         SELECT
            (geometric_tolerance, 
    plus_minus_tolerance);
         END_TYPE; 
         
TYPE st_id_attribute_select =
         
         
         SELECT
         BASED_ON
         id_attribute_select
         WITH 
         
            (geometric_tolerance);
         END_TYPE; 
         
TYPE sts_item_identified_representation_usage_definition =
         
         EXTENSIBLE
         
         GENERIC_ENTITY
         
         
         SELECT
         BASED_ON
         item_identified_representation_usage_definition
         WITH 
         
            (geometric_tolerance);
         END_TYPE; 
         
TYPE tolerance_method_definition =
         
         
         SELECT
            (limits_and_fits, 
    tolerance_value);
         END_TYPE; 
         
TYPE tolerance_zone_target =
         
         
         SELECT
            (dimensional_location, 
    dimensional_size, 
    geometric_tolerance, 
    general_datum_reference);
         END_TYPE; 
         
ENTITY angularity_tolerance
           SUBTYPE OF (geometric_tolerance_with_datum_reference);
         
         END_ENTITY;
ENTITY circular_runout_tolerance
           SUBTYPE OF (geometric_tolerance_with_datum_reference);
         
         END_ENTITY;
ENTITY coaxiality_tolerance
           SUBTYPE OF (geometric_tolerance_with_datum_reference);
         
         END_ENTITY;
ENTITY concentricity_tolerance
           SUBTYPE OF (geometric_tolerance_with_datum_reference);
         
         END_ENTITY;
ENTITY cylindricity_tolerance
           SUBTYPE OF (geometric_tolerance);
WHERE
           WR1: NOT ('SHAPE_TOLERANCE_SCHEMA.' + 'GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF (SELF));
         
         END_ENTITY;
ENTITY dimension_related_tolerance_zone_element;
           related_dimension : dimensional_location;
           related_element : tolerance_zone_definition;
         
         END_ENTITY;
ENTITY directed_tolerance_zone
           SUBTYPE OF (tolerance_zone_with_datum);
           direction : directed_tolerance_zone_type;
         
         END_ENTITY;
ENTITY flatness_tolerance
           SUBTYPE OF (geometric_tolerance);
WHERE
           WR1: NOT ('SHAPE_TOLERANCE_SCHEMA.' + 'GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF (SELF));
         
         END_ENTITY;
ENTITY geometric_tolerance
           ABSTRACT SUPERTYPE
         
         OF (geometric_tolerance_with_datum_reference
                         ANDOR geometric_tolerance_with_defined_unit
                        ANDOR ONEOF (geometric_tolerance_with_modifiers,
                             modified_geometric_tolerance)
                      ANDOR unequally_disposed_geometric_tolerance
                     ANDOR ONEOF (cylindricity_tolerance,
                          flatness_tolerance,
                          line_profile_tolerance,
                          position_tolerance,
                          roundness_tolerance,
                          straightness_tolerance,
                          surface_profile_tolerance));
           name : label;
           description : 
         OPTIONAL 
         text;
           magnitude : 
         OPTIONAL 
         length_measure_with_unit;
           toleranced_shape_aspect : geometric_tolerance_target;
DERIVE
           controlling_shape : product_definition_shape := sts_get_product_definition_shape(toleranced_shape_aspect);
           id : identifier := get_id_value(SELF);
INVERSE
           auxiliary_classification : SET[0:?] OF geometric_tolerance_auxiliary_classification FOR described_item;
           tolerance_relationship : SET[0:?] OF geometric_tolerance_relationship FOR relating_geometric_tolerance;
UNIQUE
           UR1: id, controlling_shape;
WHERE
           WR1: magnitude\measure_with_unit.value_component >= 0.0;
           WR2: EXISTS(controlling_shape);
           WR3: NOT ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP' IN TYPEOF(toleranced_shape_aspect))
            OR (toleranced_shape_aspect\shape_aspect_relationship.relating_shape_aspect.of_shape :=:
            toleranced_shape_aspect\shape_aspect_relationship.related_shape_aspect.of_shape);
           WR4: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
           WR5: SIZEOF(QUERY( tr <* tolerance_relationship | tr.name = 'composite tolerance')) <= 1;
         
         END_ENTITY;
ENTITY geometric_tolerance_auxiliary_classification;
           attribute_value : geometric_tolerance_auxiliary_classification_enum;
           described_item : geometric_tolerance;
         
         END_ENTITY;
ENTITY geometric_tolerance_relationship;
           name : label;
           description : text;
           relating_geometric_tolerance : geometric_tolerance;
           related_geometric_tolerance : geometric_tolerance;
WHERE
           WR1: NOT(name = 'composite tolerance') OR
            (('SHAPE_TOLERANCE_SCHEMA.POSITION_TOLERANCE' IN TYPEOF(relating_geometric_tolerance)) AND
            ('SHAPE_TOLERANCE_SCHEMA.POSITION_TOLERANCE' IN TYPEOF(related_geometric_tolerance))) OR
            (('SHAPE_TOLERANCE_SCHEMA.LINE_PROFILE_TOLERANCE' IN TYPEOF(relating_geometric_tolerance)) AND
            ('SHAPE_TOLERANCE_SCHEMA.LINE_PROFILE_TOLERANCE' IN TYPEOF(related_geometric_tolerance))) OR
            (('SHAPE_TOLERANCE_SCHEMA.SURFACE_PROFILE_TOLERANCE' IN TYPEOF(relating_geometric_tolerance)) AND
            ('SHAPE_TOLERANCE_SCHEMA.SURFACE_PROFILE_TOLERANCE' IN TYPEOF(related_geometric_tolerance)));
           WR2: NOT(name = 'composite tolerance') OR
            (relating_geometric_tolerance\geometric_tolerance.toleranced_shape_aspect :=:
            related_geometric_tolerance\geometric_tolerance.toleranced_shape_aspect);
           WR3: acyclic_geometric_tolerance_relationship(SELF, [related_geometric_tolerance],
            'SHAPE_TOLERANCE_SCHEMA.GEOMETRIC_TOLERANCE');
         
         END_ENTITY;
ENTITY geometric_tolerance_with_datum_reference
           SUPERTYPE OF 
         (ONEOF (angularity_tolerance,
                       circular_runout_tolerance,
                       coaxiality_tolerance,
                       concentricity_tolerance,
                       parallelism_tolerance,
                       perpendicularity_tolerance,
                       symmetry_tolerance,
                       total_runout_tolerance))
           SUBTYPE OF (geometric_tolerance);
           datum_system : SET[1:?] OF datum_system_or_reference;
WHERE
           WR1: (SIZEOF(QUERY(ds <* datum_system | 'SHAPE_TOLERANCE_SCHEMA.' + 'DATUM_SYSTEM' in TYPEOF(ds)))=0) OR (SIZEOF(datum_system)=1);
         
         END_ENTITY;
ENTITY geometric_tolerance_with_defined_area_unit
           SUBTYPE OF (geometric_tolerance_with_defined_unit);
           area_type : area_unit_type;
           second_unit_size : 
         OPTIONAL 
         length_or_plane_angle_measure_with_unit_select;
WHERE
           WR1: NOT (EXISTS(second_unit_size) XOR (area_type IN [area_unit_type.rectangular, area_unit_type.cylindrical, area_unit_type.spherical]));
           WR2: NOT(area_type = area_unit_type.cylindrical)
            	   OR  ('MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(unit_size))
            	   AND ('MEASURE_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(second_unit_size));
           WR3: NOT (area_type =  area_unit_type.rectangular)
            OR ('MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(unit_size))
            	   AND ('MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(second_unit_size));
           WR4: NOT(area_type = area_unit_type.spherical)
            	   OR  ('MEASURE_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(unit_size))
            	   AND ('MEASURE_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(second_unit_size));
           WR5: NOT(area_type =  area_unit_type.spherical)
            	   OR  (SIZEOF(QUERY (tz <* USEDIN(SELF,'SHAPE_TOLERANCE_SCHEMA.TOLERANCE_ZONE.DEFINING_TOLERANCE') |
            	       ('SHAPE_TOLERANCE_SCHEMA.ORIENTED_TOLERANCE_ZONE' IN TYPEOF(tz))
            	       )) <> 0 );
         
         END_ENTITY;
ENTITY geometric_tolerance_with_defined_unit
           SUBTYPE OF (geometric_tolerance);
           unit_size : length_or_plane_angle_measure_with_unit_select;
WHERE
           WR1: ('NUMBER' IN TYPEOF (unit_size\measure_with_unit.value_component)) AND (unit_size\measure_with_unit.value_component >
            0.0);
         
         END_ENTITY;
ENTITY geometric_tolerance_with_maximum_tolerance
           SUBTYPE OF (geometric_tolerance_with_modifiers);
           maximum_upper_tolerance : length_measure_with_unit;
WHERE
           WR1: (geometric_tolerance_modifier.maximum_material_requirement IN SELF\geometric_tolerance_with_modifiers.modifiers) OR (geometric_tolerance_modifier.least_material_requirement
            IN SELF\geometric_tolerance_with_modifiers.modifiers);
           WR2: (maximum_upper_tolerance\measure_with_unit.unit_component = SELF\geometric_tolerance.magnitude\measure_with_unit.unit_component)
            AND (maximum_upper_tolerance\measure_with_unit.value_component > SELF\geometric_tolerance.magnitude\measure_with_unit.value_component);
         
         END_ENTITY;
ENTITY geometric_tolerance_with_modifiers
           SUBTYPE OF (geometric_tolerance);
           modifiers : SET[1:?] OF geometric_tolerance_modifier;
WHERE
           WR1: NOT (geometric_tolerance_modifier.circle_a IN modifiers) OR
            (('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT' IN
            TYPEOF(SELF\geometric_tolerance.toleranced_shape_aspect)) AND
            (SELF\geometric_tolerance.toleranced_shape_aspect\shape_aspect.product_definitional =
            TRUE) OR
            ('SHAPE_DIMENSION_SCHEMA.DIMENSIONAL_SIZE' IN
            TYPEOF(SELF\geometric_tolerance.toleranced_shape_aspect)));
         
         END_ENTITY;
ENTITY gps_filter;
           filter_type : gps_filtration_type;
           filter_data : LIST[1:?] OF measure_with_unit;
INVERSE
           owner : gps_filtration_specification FOR filter_data;
WHERE
           WR1: NOT ('SHAPE_TOLERANCE_SCHEMA.GEOMETRIC_TOLERANCE_WITH_MODIFIERS' IN TYPEOF(owner\gps_filtration_specification.base_target))
            
            OR
            (SIZEOF([
            geometric_tolerance_modifier.reference_minimax_feature_without_constraint,
            geometric_tolerance_modifier.reference_minimax_feature_with_external_material_constraint,
            geometric_tolerance_modifier.reference_minimax_feature_with_internal_material_constraint,
            geometric_tolerance_modifier.reference_least_square_feature_without_constraint,
            geometric_tolerance_modifier.reference_least_square_feature_with_external_material_constraint,
            geometric_tolerance_modifier.reference_least_square_feature_with_internal_material_constraint,
            geometric_tolerance_modifier.reference_minimum_circumscribed_feature,
            geometric_tolerance_modifier.reference_maximum_inscribed_feature,
            geometric_tolerance_modifier.total_range_deviations,
            geometric_tolerance_modifier.peak_height,
            geometric_tolerance_modifier.valley_depth,
            geometric_tolerance_modifier.standard_deviation ] *
            owner\gps_filtration_specification.base_target\geometric_tolerance_with_modifiers.modifiers) <> 0 );
         
         END_ENTITY;
ENTITY gps_filtration_specification;
           base_target : gps_filtration_specification_target;
           filter_data : LIST[1:?] OF gps_filter;
         
         END_ENTITY;
ENTITY limits_and_fits;
           form_variance : label;
           zone_variance : label;
           grade : label;
           source : text;
         
         END_ENTITY;
ENTITY line_profile_tolerance
           SUBTYPE OF (geometric_tolerance);
         
         END_ENTITY;
ENTITY modified_geometric_tolerance
           SUBTYPE OF (geometric_tolerance);
           modifier : limit_condition;
         
         END_ENTITY;
ENTITY non_uniform_zone_definition
           SUBTYPE OF (tolerance_zone_definition);
         
         END_ENTITY;
ENTITY oriented_tolerance_zone
           SUBTYPE OF (tolerance_zone_with_datum);
           orientation : oriented_tolerance_zone_type;
           angle : 
         OPTIONAL 
         plane_angle_measure_with_unit;
WHERE
           WR1: (orientation <> oriented_tolerance_zone_type.angular) XOR EXISTS(angle);
         
         END_ENTITY;
ENTITY parallelism_tolerance
           SUBTYPE OF (geometric_tolerance_with_datum_reference);
         
         END_ENTITY;
ENTITY perpendicularity_tolerance
           SUBTYPE OF (geometric_tolerance_with_datum_reference);
         
         END_ENTITY;
ENTITY plus_minus_tolerance;
           range : tolerance_method_definition;
           toleranced_dimension : dimensional_characteristic;
UNIQUE
           UR1: toleranced_dimension;
         
         END_ENTITY;
ENTITY position_tolerance
           SUBTYPE OF (geometric_tolerance);
         
         END_ENTITY;
ENTITY projected_zone_definition
           SUBTYPE OF (tolerance_zone_definition);
           projection_end : shape_aspect;
           projected_length : length_measure_with_unit;
WHERE
           WR1: ('NUMBER' IN TYPEOF (projected_length\measure_with_unit.value_component)) AND (projected_length\measure_with_unit.value_component
            > 0.0);
           WR2: (derive_dimensional_exponents (projected_length\measure_with_unit.unit_component)= dimensional_exponents(1,0,0,0,0,0,0));
         
         END_ENTITY;
ENTITY projected_zone_definition_with_offset
           SUBTYPE OF (projected_zone_definition);
           offset : length_measure_with_unit;
         
         END_ENTITY;
ENTITY roundness_tolerance
           SUBTYPE OF (geometric_tolerance);
WHERE
           WR1: NOT ('SHAPE_TOLERANCE_SCHEMA.' + 'GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF (SELF));
         
         END_ENTITY;
ENTITY runout_zone_definition
           SUBTYPE OF (tolerance_zone_definition);
           orientation : runout_zone_orientation;
         
         END_ENTITY;
ENTITY runout_zone_orientation;
           angle : plane_angle_measure_with_unit;
         
         END_ENTITY;
ENTITY runout_zone_orientation_reference_direction
           SUBTYPE OF (runout_zone_orientation);
           orientation_defining_relationship : shape_aspect_relationship;
         
         END_ENTITY;
ENTITY statistical_distribution_for_tolerance
           SUBTYPE OF (representation);
WHERE
           WR1: SIZEOF (QUERY (item <* SELF\representation.items | NOT ('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF
            (item)))) = 0;
         
         END_ENTITY;
ENTITY straightness_tolerance
           SUBTYPE OF (geometric_tolerance);
WHERE
           WR1: NOT ('SHAPE_TOLERANCE_SCHEMA.' + 'GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE' IN TYPEOF (SELF));
         
         END_ENTITY;
ENTITY surface_profile_tolerance
           SUBTYPE OF (geometric_tolerance);
         
         END_ENTITY;
ENTITY symmetry_tolerance
           SUBTYPE OF (geometric_tolerance_with_datum_reference);
         
         END_ENTITY;
ENTITY tolerance_value;
           lower_bound : measure_with_unit;
           upper_bound : measure_with_unit;
DERIVE
           ubvc : REAL := upper_bound\measure_with_unit.value_component;
           lbvc : REAL := lower_bound\measure_with_unit.value_component;
WHERE
           WR1: ubvc > lbvc;
           WR2: upper_bound\measure_with_unit.unit_component = lower_bound\measure_with_unit.unit_component;
         
         END_ENTITY;
ENTITY tolerance_with_statistical_distribution;
           associated_tolerance : shape_tolerance_select;
           tolerance_allocation : statistical_distribution_for_tolerance;
         
         END_ENTITY;
ENTITY tolerance_zone
           SUBTYPE OF (shape_aspect);
           defining_tolerance : SET[1:?] OF tolerance_zone_target;
           form : tolerance_zone_form;
         
         END_ENTITY;
ENTITY tolerance_zone_definition
           SUPERTYPE OF 
         (ONEOF (projected_zone_definition,
                       non_uniform_zone_definition,
                       runout_zone_definition));
           zone : tolerance_zone;
           boundaries : SET[0:?] OF shape_aspect;
         
         END_ENTITY;
ENTITY tolerance_zone_form;
           name : label;
         
         END_ENTITY;
ENTITY tolerance_zone_with_datum
           SUPERTYPE OF 
         (ONEOF (directed_tolerance_zone,
                       oriented_tolerance_zone))
           SUBTYPE OF (tolerance_zone);
           datum_reference : datum_system;
         
         END_ENTITY;
ENTITY total_runout_tolerance
           SUBTYPE OF (geometric_tolerance_with_datum_reference);
         
         END_ENTITY;
ENTITY unequally_disposed_geometric_tolerance
           SUBTYPE OF (geometric_tolerance);
           displacement : length_measure_with_unit;
WHERE
           WR1: 'NUMBER' IN TYPEOF(displacement\measure_with_unit.value_component);
         
         END_ENTITY;
RULE 
            subtype_exclusiveness_geometric_tolerance FOR 
         (geometric_tolerance);
WHERE
           WR1: SIZEOF(QUERY (gt <* geometric_tolerance | NOT (type_check_function(gt, ['SHAPE_TOLERANCE_SCHEMA.ANGULARITY_TOLERANCE',
            'SHAPE_TOLERANCE_SCHEMA.CIRCULAR_RUNOUT_TOLERANCE', 'SHAPE_TOLERANCE_SCHEMA.COAXIALITY_TOLERANCE', 'SHAPE_TOLERANCE_SCHEMA.CONCENTRICITY_TOLERANCE',
            'SHAPE_TOLERANCE_SCHEMA.CYLINDRICITY_TOLERANCE', 'SHAPE_TOLERANCE_SCHEMA.FLATNESS_TOLERANCE', 'SHAPE_TOLERANCE_SCHEMA.LINE_PROFILE_TOLERANCE',
            'SHAPE_TOLERANCE_SCHEMA.PARALLELISM_TOLERANCE', 'SHAPE_TOLERANCE_SCHEMA.PERPENDICULARITY_TOLERANCE', 'SHAPE_TOLERANCE_SCHEMA.POSITION_TOLERANCE',
            'SHAPE_TOLERANCE_SCHEMA.ROUNDNESS_TOLERANCE', 'SHAPE_TOLERANCE_SCHEMA.STRAIGHTNESS_TOLERANCE', 'SHAPE_TOLERANCE_SCHEMA.SURFACE_PROFILE_TOLERANCE',
            'SHAPE_TOLERANCE_SCHEMA.SYMMETRY_TOLERANCE', 'SHAPE_TOLERANCE_SCHEMA.TOTAL_RUNOUT_TOLERANCE'] , 2 ) ))) = 0;
         END_RULE;
         
FUNCTION acyclic_geometric_tolerance_relationship
 (relation : geometric_tolerance_relationship; relatives : SET[1:?] OF geometric_tolerance; specific_relation : STRING) : BOOLEAN;
         LOCAL
      x : SET OF geometric_tolerance_relationship;
    END_LOCAL;
    IF relation.relating_geometric_tolerance IN relatives THEN
      RETURN (FALSE);
    END_IF;
    x := QUERY(geotol <* bag_to_set(
              USEDIN(relation.relating_geometric_tolerance,
              'SHAPE_TOLERANCE_SCHEMA.' + 'GEOMETRIC_TOLERANCE_RELATIONSHIP.' + 'RELATED_GEOMETRIC_TOLERANCE')) | specific_relation IN TYPEOF(geotol));
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_geometric_tolerance_relationship(x[i], relatives + relation.relating_geometric_tolerance, specific_relation) THEN
        RETURN (FALSE);
      END_IF;
    END_REPEAT;
    RETURN (TRUE);
         END_FUNCTION;
         
FUNCTION sts_get_product_definition_shape
 (input : geometric_tolerance_target) : product_definition_shape;
         CASE TRUE OF ('SHAPE_DIMENSION_SCHEMA.DIMENSIONAL_LOCATION' IN TYPEOF(input)) :
                 RETURN(input\shape_aspect_relationship.relating_shape_aspect\shape_aspect.of_shape);
               ('SHAPE_DIMENSION_SCHEMA.DIMENSIONAL_SIZE' IN TYPEOF(input)) :
                 RETURN(input\dimensional_size.applies_to\shape_aspect.of_shape);
               ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(input)) :
                 RETURN(input);
               ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT' IN TYPEOF(input)) :
                 RETURN(input\shape_aspect.of_shape);
  OTHERWISE : RETURN(?);
  END_CASE;
         END_FUNCTION;
         
         END_SCHEMA;  -- shape_tolerance_schema
© ISO 2021 — All rights reserved