Schema: explicit_geometric_constraint_schema

Source : ISO 10303-108



SCHEMA explicit_geometric_constraint_schema;

REFERENCE FROM measure_schema   -- ISO 10303-41
  (length_measure,
   plane_angle_measure,
   positive_length_measure);

REFERENCE FROM geometry_schema;    -- ISO 10303-42

REFERENCE FROM geometric_model_schema   -- ISO 10303-42
  (extruded_area_solid,
   extruded_face_solid,
   revolved_area_solid,
   revolved_face_solid,
   right_circular_cone,
   right_circular_cylinder,
   sphere,
   swept_area_solid,
   swept_face_solid,
   torus);

REFERENCE FROM representation_schema   -- ISO 10303-43
  (representation_item_relationship);

REFERENCE FROM explicit_constraint_schema   -- ISO 10303-108
  (defined_constraint,
   explicit_constraint);


TYPE axial_geometry_constraint_element = SELECT
   (point,
    line,
    circle,
    plane,
    cylindrical_surface,
    conical_surface,
    spherical_surface,
    toroidal_surface,
    surface_of_revolution,
    sphere,
    right_circular_cone,
    right_circular_cylinder,
    torus,
    revolved_face_solid,
    revolved_area_solid);
END_TYPE;

TYPE curve_or_surface_constraint_element = SELECT
   (curve,
    surface);
END_TYPE;

TYPE geometric_constraint_element = SELECT
   (point,
    curve,
    surface,
    vector,
    direction);
END_TYPE;

TYPE linear_geometry_constraint_element = SELECT
   (line,
    plane,
    direction,
    vector);
END_TYPE;

TYPE non_negative_length_measure = length_measure;
WHERE
  WR1: SELF >= 0;
END_TYPE;

TYPE parallel_offset_type = ENUMERATION OF
   (curve_2d_offset,
    curve_3d_offset,
    surface_offset);
END_TYPE;

TYPE point_curve_or_surface_constraint_element = SELECT
   (point,
    curve,
    surface);
END_TYPE;

TYPE radial_geometry_constraint_element = SELECT
   (circle,
    cylindrical_surface,
    conical_surface,
    spherical_surface,
    right_circular_cylinder,
    right_circular_cone,
    sphere);
END_TYPE;

TYPE swept_surface_or_solid = SELECT
   (swept_surface,
    swept_face_solid,
    swept_area_solid);
END_TYPE;

TYPE tangent_contact_type = ENUMERATION OF
   (point_contact,
    curve_contact,
    surface_contact);
END_TYPE;

ENTITY agc_with_dimension
  SUBTYPE OF (angle_geometric_constraint);
  angle_value : plane_angle_measure;
END_ENTITY;

ENTITY angle_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF linear_geometry_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF linear_geometry_constraint_element;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) = 1) OR (('EXPLICIT_GEOMETRIC_CONSTRAINT_SCHEMA.AGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
END_ENTITY;

ENTITY cdgc_with_dimension
  SUBTYPE OF (curve_distance_geometric_constraint);
  distance_value : non_negative_length_measure;
END_ENTITY;

ENTITY clgc_with_dimension
  SUBTYPE OF (curve_length_geometric_constraint);
  length_value : positive_length_measure;
END_ENTITY;

ENTITY coaxial_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF axial_geometry_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF axial_geometry_constraint_element;
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\explicit_constraint.reference_elements | SIZEOF(TYPEOF(q) * ['GEOMETRY_SCHEMA.POINT','GEOMETRY_SCHEMA.PLANE', 'GEOMETRY_SCHEMA.SPHERICAL_SURFACE','GEOMETRY_SCHEMA.SPHERE']) > 0)) = 0;
END_ENTITY;

ENTITY curve_distance_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:2] OF curve;
  SELF\explicit_constraint.reference_elements : SET[0:4] OF point_curve_or_surface_constraint_element;
  near_points : SET[0:4] OF near_point_relationship;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (('EXPLICIT_GEOMETRIC_CONSTRAINT_SCHEMA.CDGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
  WR2: SIZEOF(near_points) <= SIZEOF(SELF\explicit_constraint.reference_elements);
  WR3: SIZEOF(QUERY(q <* near_points | NOT (q\representation_item_relationship.relating_representation_item IN SELF\explicit_constraint.reference_elements))) = 0;
END_ENTITY;

ENTITY curve_length_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF bounded_curve;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY curve_segment_set
  SUBTYPE OF (geometric_representation_item);
  segments : SET[1:?] OF composite_curve_segment;
END_ENTITY;

ENTITY curve_smoothness_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:1] OF curve_segment_set;
  smoothness : transition_code;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY explicit_geometric_constraint
  ABSTRACT SUPERTYPE OF (ONEOF (fixed_element_geometric_constraint,
                                parallel_geometric_constraint,
                                point_distance_geometric_constraint,
                                skew_line_distance_geometric_constraint,
                                curve_distance_geometric_constraint,
                                surface_distance_geometric_constraint,
                                radius_geometric_constraint,
                                curve_length_geometric_constraint,
                                parallel_offset_geometric_constraint,
                                angle_geometric_constraint,
                                perpendicular_geometric_constraint,
                                incidence_geometric_constraint,
                                coaxial_geometric_constraint,
                                tangent_geometric_constraint,
                                symmetry_geometric_constraint,
                                swept_point_curve_geometric_constraint,
                                swept_curve_surface_geometric_constraint,
                                curve_smoothness_geometric_constraint,
                                surface_smoothness_geometric_constraint))
  SUBTYPE OF (defined_constraint, geometric_representation_item);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF geometric_representation_item;
  SELF\explicit_constraint.reference_elements : SET[0:?] OF geometric_representation_item;
END_ENTITY;

ENTITY fixed_element_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF geometric_constraint_element;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY incidence_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF geometric_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:?] OF geometric_constraint_element;
  near_points : SET[0:?] OF near_point_relationship;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
  WR2: SIZEOF(near_points) <= SIZEOF(SELF\explicit_constraint.reference_elements);
  WR3: SIZEOF(QUERY(q <* near_points | NOT (q\representation_item_relationship.relating_representation_item IN SELF\explicit_constraint.reference_elements))) = 0;
END_ENTITY;

ENTITY near_point_relationship
  SUBTYPE OF (representation_item_relationship);
  SELF\representation_item_relationship.relating_representation_item : curve_or_surface_constraint_element;
  SELF\representation_item_relationship.related_representation_item : point;
END_ENTITY;

ENTITY parallel_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF linear_geometry_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF linear_geometry_constraint_element;
END_ENTITY;

ENTITY parallel_offset_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF curve_or_surface_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF curve_or_surface_constraint_element;
  offset_type : parallel_offset_type;
WHERE
  WR1: NOT(((offset_type = curve_2d_offset) OR (offset_type = curve_3d_offset)) AND (SIZEOF(QUERY( q <* (SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) | 'GEOMETRY_SCHEMA.SURFACE' IN TYPEOF(q))) > 0));
  WR2: NOT((offset_type = surface_offset) AND (SIZEOF(QUERY( q <* (SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) | 'GEOMETRY_SCHEMA.CURVE' IN TYPEOF(q))) > 0));
END_ENTITY;

ENTITY pdgc_with_dimension
  SUBTYPE OF (point_distance_geometric_constraint);
  distance_value : non_negative_length_measure;
END_ENTITY;

ENTITY perpendicular_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF linear_geometry_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:2] OF linear_geometry_constraint_element;
WHERE
  WR1: NOT ((SIZEOF(SELF\explicit_constraint.reference_elements) = 2) AND NOT ((SIZEOF(QUERY(q <* SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements | 'GEOMETRY_SCHEMA.LINE' IN TYPEOF(q))) = SIZEOF(SELF\explicit_constraint.reference_elements + SELF\explicit_constraint.constrained_elements)) XOR (SIZEOF(QUERY(q <* SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements | 'GEOMETRY_SCHEMA.PLANE' IN TYPEOF(q))) = SIZEOF(SELF\explicit_constraint.reference_elements + SELF\explicit_constraint.constrained_elements))));
  WR2: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) IN [2,3]);
  WR3: NOT ((SIZEOF(SELF\explicit_constraint.reference_elements) = 0) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 3)) AND NOT ((SIZEOF(QUERY(q <* SELF\explicit_constraint.constrained_elements | 'GEOMETRY_SCHEMA.LINE' IN TYPEOF(q))) = 3) XOR (SIZEOF(QUERY(q <* SELF\explicit_constraint.constrained_elements | 'GEOMETRY_SCHEMA.PLANE' IN TYPEOF(q))) = 3));
END_ENTITY;

ENTITY pgc_with_dimension
  SUBTYPE OF (parallel_geometric_constraint);
  distance_value : non_negative_length_measure;
  negative_direction : BOOLEAN;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) = 1) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
  WR2: SIZEOF(QUERY(q <* (SELF\explicit_constraint.reference_elements + SELF\explicit_constraint.constrained_elements) | SIZEOF(TYPEOF(q) * ['GEOMETRY_SCHEMA.DIRECTION', 'GEOMETRY_SCHEMA.VECTOR']) > 0)) = 0;
END_ENTITY;

ENTITY pogc_with_dimension
  SUBTYPE OF (parallel_offset_geometric_constraint);
  offset_value : positive_length_measure;
  offset_direction_constrained : BOOLEAN;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) = 1) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
  WR2: (NOT (offset_direction_constrained = TRUE) AND ((offset_type = curve_2d_offset) OR (offset_type = surface_offset)));
END_ENTITY;

ENTITY point_distance_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF point;
  SELF\explicit_constraint.reference_elements : SET[0:4] OF point_curve_or_surface_constraint_element;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (('EXPLICIT_GEOMETRIC_CONSTRAINT_SCHEMA.PDGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
END_ENTITY;

ENTITY radius_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF radial_geometry_constraint_element;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY rgc_with_dimension
  SUBTYPE OF (radius_geometric_constraint);
  radius_value : positive_length_measure;
END_ENTITY;

ENTITY sdgc_with_dimension
  SUBTYPE OF (surface_distance_geometric_constraint);
  distance_value : non_negative_length_measure;
END_ENTITY;

ENTITY skew_line_distance_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:2] OF line;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF line;
  distance_value : non_negative_length_measure;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) = 2;
END_ENTITY;

ENTITY surface_distance_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:2] OF surface;
  SELF\explicit_constraint.reference_elements : SET[0:4] OF point_curve_or_surface_constraint_element;
  near_points : SET[0:4] OF near_point_relationship;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (('EXPLICIT_GEOMETRIC_CONSTRAINT_SCHEMA.SDGC_WITH_DIMENSION' IN TYPEOF(SELF)) AND (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2));
  WR2: SIZEOF(near_points) <= SIZEOF(SELF\explicit_constraint.reference_elements);
  WR3: SIZEOF(QUERY(q <* near_points | NOT (q\representation_item_relationship.relating_representation_item IN SELF\explicit_constraint.reference_elements))) = 0;
END_ENTITY;

ENTITY surface_patch_set
  SUBTYPE OF (geometric_representation_item);
  patches : SET[1:?] OF surface_patch;
END_ENTITY;

ENTITY surface_smoothness_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:1] OF surface_patch_set;
  u_smoothness : transition_code;
  v_smoothness : transition_code;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
END_ENTITY;

ENTITY swept_curve_surface_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF surface;
  SELF\explicit_constraint.reference_elements : SET[1:1] OF swept_surface_or_solid;
END_ENTITY;

ENTITY swept_point_curve_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF curve;
  SELF\explicit_constraint.reference_elements : SET[1:1] OF swept_face_solid;
END_ENTITY;

ENTITY symmetry_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[2:2] OF geometric_representation_item;
  mirror_element : linear_geometry_constraint_element;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.reference_elements) = 0;
  WR2: SIZEOF(TYPEOF(mirror_element) * ['GEOMETRY_SCHEMA.DIRECTION','GEOMETRY_SCHEMA.VECTOR']) = 0;
  WR3: NOT ((SELF\geometric_representation_item.dim = 2) AND ('GEOMETRY_SCHEMA.PLANE' IN TYPEOF(mirror_element)));
END_ENTITY;

ENTITY tangent_geometric_constraint
  SUBTYPE OF (explicit_geometric_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF curve_or_surface_constraint_element;
  SELF\explicit_constraint.reference_elements : SET[0:?] OF curve_or_surface_constraint_element;
  near_points : SET[0:?] OF near_point_relationship;
  tangent_contact : tangent_contact_type;
WHERE
  WR1: (SIZEOF(SELF\explicit_constraint.reference_elements) > 0) OR (SIZEOF(SELF\explicit_constraint.constrained_elements) = 2);
  WR2: NOT ((SELF\geometric_representation_item.dim = 2) AND (tangent_contact = surface_contact));
  WR3: SIZEOF(QUERY(q <* near_points | NOT (q\representation_item_relationship.relating_representation_item IN SELF\explicit_constraint.reference_elements))) = 0;
END_ENTITY;

END_SCHEMA;  -- explicit_geometric_constraint_schema