Integrated generic resource: Shape variation tolerances ISO 10303-47:2021(E)
© ISO

Cover page
Table of contents
Copyright
Foreword
Introduction
1 Scope
2 Normative references
3 Terms, definitions and abbreviated terms
    3.1 Terms and definitions
    3.2 Abbreviated terms

4 Shape aspect definition
   4.1 General
   4.2 Fundamental concepts and assumptions
   4.3 Shape aspect definition type definitions
   4.4 Shape aspect definition entity definitions
   4.5 Shape aspect definition subtype constraint definition
   4.6 Shape aspect definition rule definitions
5 Shape dimension
   5.1 General
   5.2 Fundamental concepts and assumptions
   5.3 Shape dimension type definitions
   5.4 Shape dimension entity definitions
6 Shape tolerance
   6.1 General
   6.2 Fundamental concepts and assumptions
   6.3 Shape tolerance type definitions
   6.4 Shape tolerance entity definitions
   6.5 Shape tolerance function definitions
   6.6 Shape tolerance rule definitions

A Short names of entities
B Information object registration
C Computer interpretable listings
D EXPRESS-G diagrams
E Change history
Bibliography
Index

(*
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