(* This is a MODIFIED version of AP203 Amd. 1. The change was to remove a useless IF...ELSE...ENDIF statement that always evaluated the same way. Statements in the branch that were never executed caused problems with libexpress, and it was easier to modify the schema than to come up with a generic fix for libexpress. This change does *not* affect the behavior of the schema. Based on: AIM long form for ISO 10303-203 amendment 1 ISO TC184/SC4/WG3 N916 Larry McKee 2000-05-04 *) SCHEMA config_control_design; CONSTANT (* FIXME: gcc error on next statement with c99/POSIX: Syntax error: "(" unexpected *) dummy_gri : geometric_representation_item := representation_item('') || geometric_representation_item(); dummy_tri : topological_representation_item := representation_item('') || topological_representation_item(); END_CONSTANT; TYPE ahead_or_behind = ENUMERATION OF (ahead, behind); END_TYPE; -- ahead_or_behind TYPE approved_item = SELECT (product_definition_formation, product_definition, configuration_effectivity, configuration_item, security_classification, change_request, change, start_request, start_work, certification, contract); END_TYPE; -- approved_item TYPE area_measure = REAL; END_TYPE; -- area_measure TYPE axis2_placement = SELECT (axis2_placement_2d, axis2_placement_3d); END_TYPE; -- axis2_placement TYPE b_spline_curve_form = ENUMERATION OF (polyline_form, circular_arc, elliptic_arc, parabolic_arc, hyperbolic_arc, unspecified); END_TYPE; -- b_spline_curve_form TYPE b_spline_surface_form = ENUMERATION OF (plane_surf, cylindrical_surf, conical_surf, spherical_surf, toroidal_surf, surf_of_revolution, ruled_surf, generalised_cone, quadric_surf, surf_of_linear_extrusion, unspecified); END_TYPE; -- b_spline_surface_form TYPE boolean_operand = SELECT (solid_model); END_TYPE; -- boolean_operand TYPE certified_item = SELECT (supplied_part_relationship); END_TYPE; -- certified_item TYPE change_request_item = SELECT (product_definition_formation); END_TYPE; -- change_request_item TYPE characterized_definition = SELECT (characterized_product_definition, shape_definition); END_TYPE; -- characterized_definition TYPE characterized_product_definition = SELECT (product_definition, product_definition_relationship); END_TYPE; -- characterized_product_definition TYPE classified_item = SELECT (product_definition_formation, assembly_component_usage); END_TYPE; -- classified_item TYPE context_dependent_measure = REAL; END_TYPE; -- context_dependent_measure TYPE contracted_item = SELECT (product_definition_formation); END_TYPE; -- contracted_item TYPE count_measure = NUMBER; END_TYPE; -- count_measure TYPE curve_on_surface = SELECT (pcurve, surface_curve, composite_curve_on_surface); END_TYPE; -- curve_on_surface TYPE date_time_item = SELECT (product_definition, change_request, start_request, change, start_work, approval_person_organization, contract, security_classification, certification); END_TYPE; -- date_time_item TYPE date_time_select = SELECT (date, local_time, date_and_time); END_TYPE; -- date_time_select TYPE day_in_month_number = INTEGER; END_TYPE; -- day_in_month_number TYPE day_in_week_number = INTEGER; WHERE wr1: ((1 <= SELF) AND (SELF <= 7)); END_TYPE; -- day_in_week_number TYPE day_in_year_number = INTEGER; END_TYPE; -- day_in_year_number TYPE descriptive_measure = STRING; END_TYPE; -- descriptive_measure TYPE dimension_count = INTEGER; WHERE wr1: (SELF > 0); END_TYPE; -- dimension_count TYPE founded_item_select = SELECT (founded_item, representation_item); END_TYPE; -- founded_item_select TYPE geometric_set_select = SELECT (point, curve, surface); END_TYPE; -- geometric_set_select TYPE hour_in_day = INTEGER; WHERE wr1: ((0 <= SELF) AND (SELF < 24)); END_TYPE; -- hour_in_day TYPE identifier = STRING; END_TYPE; -- identifier TYPE knot_type = ENUMERATION OF (uniform_knots, unspecified, quasi_uniform_knots, piecewise_bezier_knots); END_TYPE; -- knot_type TYPE label = STRING; END_TYPE; -- label TYPE length_measure = REAL; END_TYPE; -- length_measure TYPE list_of_reversible_topology_item = LIST [0:?] OF reversible_topology_item; END_TYPE; -- list_of_reversible_topology_item TYPE mass_measure = REAL; END_TYPE; -- mass_measure TYPE measure_value = SELECT (length_measure, mass_measure, plane_angle_measure, solid_angle_measure, area_measure, volume_measure, parameter_value, context_dependent_measure, descriptive_measure, positive_length_measure, positive_plane_angle_measure, count_measure); END_TYPE; -- measure_value TYPE minute_in_hour = INTEGER; WHERE wr1: ((0 <= SELF) AND (SELF <= 59)); END_TYPE; -- minute_in_hour TYPE month_in_year_number = INTEGER; WHERE wr1: ((1 <= SELF) AND (SELF <= 12)); END_TYPE; -- month_in_year_number TYPE parameter_value = REAL; END_TYPE; -- parameter_value TYPE pcurve_or_surface = SELECT (pcurve, surface); END_TYPE; -- pcurve_or_surface TYPE person_organization_item = SELECT (change, start_work, change_request, start_request, configuration_item, product, product_definition_formation, product_definition, contract, security_classification); END_TYPE; -- person_organization_item TYPE person_organization_select = SELECT (person, organization, person_and_organization); END_TYPE; -- person_organization_select TYPE plane_angle_measure = REAL; END_TYPE; -- plane_angle_measure TYPE positive_length_measure = length_measure; WHERE wr1: (SELF > 0); END_TYPE; -- positive_length_measure TYPE positive_plane_angle_measure = plane_angle_measure; WHERE wr1: (SELF > 0); END_TYPE; -- positive_plane_angle_measure TYPE preferred_surface_curve_representation = ENUMERATION OF (curve_3d, pcurve_s1, pcurve_s2); END_TYPE; -- preferred_surface_curve_representation TYPE reversible_topology = SELECT (reversible_topology_item, list_of_reversible_topology_item, set_of_reversible_topology_item); END_TYPE; -- reversible_topology TYPE reversible_topology_item = SELECT (edge, path, face, face_bound, closed_shell, open_shell); END_TYPE; -- reversible_topology_item TYPE second_in_minute = REAL; WHERE wr1: ((0 <= SELF) AND (SELF < 60)); END_TYPE; -- second_in_minute TYPE set_of_reversible_topology_item = SET [0:?] OF reversible_topology_item; END_TYPE; -- set_of_reversible_topology_item TYPE shape_definition = SELECT (product_definition_shape, shape_aspect, shape_aspect_relationship); END_TYPE; -- shape_definition TYPE shell = SELECT (vertex_shell, wire_shell, open_shell, closed_shell); END_TYPE; -- shell TYPE si_prefix = ENUMERATION OF (exa, peta, tera, giga, mega, kilo, hecto, deca, deci, centi, milli, micro, nano, pico, femto, atto); END_TYPE; -- si_prefix TYPE si_unit_name = ENUMERATION OF (metre, gram, second, ampere, kelvin, mole, candela, radian, steradian, hertz, newton, pascal, joule, watt, coulomb, volt, farad, ohm, siemens, weber, tesla, henry, degree_celsius, lumen, lux, becquerel, gray, sievert); END_TYPE; -- si_unit_name TYPE solid_angle_measure = REAL; END_TYPE; -- solid_angle_measure TYPE source = ENUMERATION OF (made, bought, not_known); END_TYPE; -- source TYPE specified_item = SELECT (product_definition, shape_aspect); END_TYPE; -- specified_item TYPE start_request_item = SELECT (product_definition_formation); END_TYPE; -- start_request_item TYPE supported_item = SELECT (action_directive, action, action_method); END_TYPE; -- supported_item TYPE surface_model = SELECT (shell_based_surface_model); END_TYPE; -- surface_model TYPE text = STRING; END_TYPE; -- text TYPE transformation = SELECT (item_defined_transformation, functionally_defined_transformation); END_TYPE; -- transformation TYPE transition_code = ENUMERATION OF (discontinuous, continuous, cont_same_gradient, cont_same_gradient_same_curvature); END_TYPE; -- transition_code TYPE trimming_preference = ENUMERATION OF (cartesian, parameter, unspecified); END_TYPE; -- trimming_preference TYPE trimming_select = SELECT (cartesian_point, parameter_value); END_TYPE; -- trimming_select TYPE unit = SELECT (named_unit); END_TYPE; -- unit TYPE vector_or_direction = SELECT (vector, direction); END_TYPE; -- vector_or_direction TYPE volume_measure = REAL; END_TYPE; -- volume_measure TYPE week_in_year_number = INTEGER; WHERE wr1: ((1 <= SELF) AND (SELF <= 53)); END_TYPE; -- week_in_year_number TYPE wireframe_model = SELECT (shell_based_wireframe_model, edge_based_wireframe_model); END_TYPE; -- wireframe_model TYPE work_item = SELECT (product_definition_formation); END_TYPE; -- work_item TYPE year_number = INTEGER; END_TYPE; -- year_number ENTITY action; name : label; description : text; chosen_method : action_method; END_ENTITY; -- action ENTITY action_assignment ABSTRACT SUPERTYPE; assigned_action : action; END_ENTITY; -- action_assignment ENTITY action_directive; name : label; description : text; analysis : text; comment : text; requests : SET [1:?] OF versioned_action_request; END_ENTITY; -- action_directive ENTITY action_method; name : label; description : text; consequence : text; purpose : text; END_ENTITY; -- action_method ENTITY action_request_assignment ABSTRACT SUPERTYPE; assigned_action_request : versioned_action_request; END_ENTITY; -- action_request_assignment ENTITY action_request_solution; method : action_method; request : versioned_action_request; END_ENTITY; -- action_request_solution ENTITY action_request_status; status : label; assigned_request : versioned_action_request; END_ENTITY; -- action_request_status ENTITY action_status; status : label; assigned_action : executed_action; END_ENTITY; -- action_status ENTITY address; internal_location : OPTIONAL label; street_number : OPTIONAL label; street : OPTIONAL label; postal_box : OPTIONAL label; town : OPTIONAL label; region : OPTIONAL label; postal_code : OPTIONAL label; country : OPTIONAL label; facsimile_number : OPTIONAL label; telephone_number : OPTIONAL label; electronic_mail_address : OPTIONAL label; telex_number : OPTIONAL label; WHERE wr1: (EXISTS(internal_location) OR EXISTS(street_number) OR EXISTS( street) OR EXISTS(postal_box) OR EXISTS(town) OR EXISTS( region) OR EXISTS(postal_code) OR EXISTS(country) OR EXISTS( facsimile_number) OR EXISTS(telephone_number) OR EXISTS( electronic_mail_address) OR EXISTS(telex_number)); END_ENTITY; -- address ENTITY advanced_brep_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: (SIZEOF(QUERY ( it <* SELF.items | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.MANIFOLD_SOLID_BREP', 'CONFIG_CONTROL_DESIGN.FACETED_BREP', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM', 'CONFIG_CONTROL_DESIGN.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1)) )) = 0); wr2: (SIZEOF(QUERY ( it <* SELF.items | (SIZEOF([ 'CONFIG_CONTROL_DESIGN.MANIFOLD_SOLID_BREP', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM'] * TYPEOF(it)) = 1) )) > 0); wr3: (SIZEOF(QUERY ( msb <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( csh <* msb_shells(msb) | (NOT ( SIZEOF(QUERY ( fcs <* csh\connected_face_set.cfs_faces | ( NOT ('CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fcs))) )) = 0)) )) = 0)) )) = 0); wr4: (SIZEOF(QUERY ( msb <* QUERY ( it <* items | ( 'CONFIG_CONTROL_DESIGN.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) ) | ('CONFIG_CONTROL_DESIGN.ORIENTED_CLOSED_SHELL' IN TYPEOF( msb\manifold_solid_brep.outer)) )) = 0); wr5: (SIZEOF(QUERY ( brv <* QUERY ( it <* items | ( 'CONFIG_CONTROL_DESIGN.BREP_WITH_VOIDS' IN TYPEOF(it)) ) | ( NOT (SIZEOF(QUERY ( csh <* brv\brep_with_voids.voids | csh\ oriented_closed_shell.orientation )) = 0)) )) = 0); wr6: (SIZEOF(QUERY ( mi <* QUERY ( it <* items | ( 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM' IN TYPEOF(it)) ) | (NOT ('CONFIG_CONTROL_DESIGN.ADVANCED_BREP_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source. mapped_representation))) )) = 0); END_ENTITY; -- advanced_brep_shape_representation ENTITY advanced_face SUBTYPE OF (face_surface); WHERE wr1 : (SIZEOF(['CONFIG_CONTROL_DESIGN.ELEMENTARY_SURFACE', 'CONFIG_CONTROL_DESIGN.B_SPLINE_SURFACE', 'CONFIG_CONTROL_DESIGN.SWEPT_SURFACE'] * TYPEOF( face_geometry)) = 1); wr2 : (SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe <* elp_fbnds.bound\path. edge_list | (NOT ('CONFIG_CONTROL_DESIGN.EDGE_CURVE' IN TYPEOF(oe\oriented_edge.edge_element))) )) = 0)) )) = 0); wr3 : (SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe <* elp_fbnds.bound\path. edge_list | (NOT (SIZEOF(['CONFIG_CONTROL_DESIGN.LINE', 'CONFIG_CONTROL_DESIGN.CONIC', 'CONFIG_CONTROL_DESIGN.POLYLINE', 'CONFIG_CONTROL_DESIGN.SURFACE_CURVE', 'CONFIG_CONTROL_DESIGN.B_SPLINE_CURVE'] * TYPEOF(oe. edge_element\edge_curve.edge_geometry)) = 1)) )) = 0)) )) = 0); wr4 : (SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe <* elp_fbnds.bound\path. edge_list | (NOT (('CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(oe\edge.edge_start)) AND ( 'CONFIG_CONTROL_DESIGN.CARTESIAN_POINT' IN TYPEOF(oe\edge. edge_start\vertex_point.vertex_geometry)) AND ( 'CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(oe\edge. edge_end)) AND ('CONFIG_CONTROL_DESIGN.CARTESIAN_POINT' IN TYPEOF(oe\edge.edge_end\vertex_point.vertex_geometry)))) )) = 0)) )) = 0); wr5 : (SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | ('CONFIG_CONTROL_DESIGN.ORIENTED_PATH' IN TYPEOF( elp_fbnds.bound)) )) = 0); wr6 : ((NOT ('CONFIG_CONTROL_DESIGN.SWEPT_SURFACE' IN TYPEOF( face_geometry))) OR (SIZEOF(['CONFIG_CONTROL_DESIGN.LINE', 'CONFIG_CONTROL_DESIGN.CONIC', 'CONFIG_CONTROL_DESIGN.POLYLINE', 'CONFIG_CONTROL_DESIGN.B_SPLINE_CURVE'] * TYPEOF( face_geometry\swept_surface.swept_curve)) = 1)); wr7 : (SIZEOF(QUERY ( vlp_fbnds <* QUERY ( bnds <* bounds | ( 'CONFIG_CONTROL_DESIGN.VERTEX_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (('CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF( vlp_fbnds\face_bound.bound\vertex_loop.loop_vertex)) AND ( 'CONFIG_CONTROL_DESIGN.CARTESIAN_POINT' IN TYPEOF(vlp_fbnds \face_bound.bound\vertex_loop.loop_vertex\vertex_point. vertex_geometry)))) )) = 0); wr8 : (SIZEOF(QUERY ( bnd <* bounds | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.EDGE_LOOP', 'CONFIG_CONTROL_DESIGN.VERTEX_LOOP'] * TYPEOF(bnd.bound)) = 1)) )) = 0); wr9 : (SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe <* elp_fbnds.bound\path. edge_list | (('CONFIG_CONTROL_DESIGN.SURFACE_CURVE' IN TYPEOF(oe\oriented_edge.edge_element\edge_curve. edge_geometry)) AND (NOT (SIZEOF(QUERY ( sc_ag <* oe. edge_element\edge_curve.edge_geometry\surface_curve. associated_geometry | (NOT ('CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(sc_ag))) )) = 0))) )) = 0)) )) = 0); wr10: (((NOT ('CONFIG_CONTROL_DESIGN.SWEPT_SURFACE' IN TYPEOF( face_geometry))) OR (NOT ('CONFIG_CONTROL_DESIGN.POLYLINE' IN TYPEOF(face_geometry\swept_surface.swept_curve))) OR ( SIZEOF(face_geometry\swept_surface.swept_curve\polyline. points) >= 3)) AND (SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ('CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe <* elp_fbnds.bound\path.edge_list | (( 'CONFIG_CONTROL_DESIGN.POLYLINE' IN TYPEOF(oe\oriented_edge .edge_element\edge_curve.edge_geometry)) AND (NOT (SIZEOF( oe\oriented_edge.edge_element\edge_curve.edge_geometry\ polyline.points) >= 3))) )) = 0)) )) = 0)); END_ENTITY; -- advanced_face ENTITY alternate_product_relationship; name : label; definition : text; alternate : product; base : product; basis : text; UNIQUE ur1 : alternate, base; WHERE wr1: (alternate :<>: base); END_ENTITY; -- alternate_product_relationship ENTITY application_context; application : text; INVERSE context_elements : SET [1:?] OF application_context_element FOR frame_of_reference; END_ENTITY; -- application_context ENTITY application_context_element SUPERTYPE OF (ONEOF (product_context,product_definition_context, product_concept_context)); name : label; frame_of_reference : application_context; END_ENTITY; -- application_context_element ENTITY application_protocol_definition; status : label; application_interpreted_model_schema_name : label; application_protocol_year : year_number; application : application_context; END_ENTITY; -- application_protocol_definition ENTITY approval; status : approval_status; level : label; END_ENTITY; -- approval ENTITY approval_assignment ABSTRACT SUPERTYPE; assigned_approval : approval; END_ENTITY; -- approval_assignment ENTITY approval_date_time; date_time : date_time_select; dated_approval : approval; END_ENTITY; -- approval_date_time ENTITY approval_person_organization; person_organization : person_organization_select; authorized_approval : approval; role : approval_role; END_ENTITY; -- approval_person_organization ENTITY approval_relationship; name : label; description : text; relating_approval : approval; related_approval : approval; END_ENTITY; -- approval_relationship ENTITY approval_role; role : label; END_ENTITY; -- approval_role ENTITY approval_status; name : label; END_ENTITY; -- approval_status ENTITY area_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1: ('CONFIG_CONTROL_DESIGN.AREA_UNIT' IN TYPEOF(SELF\ measure_with_unit.unit_component)); END_ENTITY; -- area_measure_with_unit ENTITY area_unit SUBTYPE OF (named_unit); WHERE wr1: ((SELF\named_unit.dimensions.length_exponent = 2) AND (SELF\ named_unit.dimensions.mass_exponent = 0) AND (SELF\ named_unit.dimensions.time_exponent = 0) AND (SELF\ named_unit.dimensions.electric_current_exponent = 0) AND ( SELF\named_unit.dimensions. thermodynamic_temperature_exponent = 0) AND (SELF\named_unit .dimensions.amount_of_substance_exponent = 0) AND (SELF\ named_unit.dimensions.luminous_intensity_exponent = 0)); END_ENTITY; -- area_unit ENTITY assembly_component_usage SUPERTYPE OF (ONEOF (next_assembly_usage_occurrence, specified_higher_usage_occurrence,promissory_usage_occurrence)) SUBTYPE OF (product_definition_usage); reference_designator : OPTIONAL identifier; END_ENTITY; -- assembly_component_usage ENTITY assembly_component_usage_substitute; name : label; definition : text; base : assembly_component_usage; substitute : assembly_component_usage; UNIQUE ur1 : base, substitute; WHERE wr1: (base.relating_product_definition :=: substitute. relating_product_definition); wr2: (base :<>: substitute); END_ENTITY; -- assembly_component_usage_substitute ENTITY axis1_placement SUBTYPE OF (placement); axis : OPTIONAL direction; DERIVE z : direction := NVL(normalise(axis),dummy_gri || direction([0,0,1])); WHERE wr1: (SELF\geometric_representation_item.dim = 3); END_ENTITY; -- axis1_placement ENTITY axis2_placement_2d SUBTYPE OF (placement); ref_direction : OPTIONAL direction; DERIVE p : LIST [2:2] OF direction := build_2axes(ref_direction); WHERE wr1: (SELF\geometric_representation_item.dim = 2); END_ENTITY; -- axis2_placement_2d ENTITY axis2_placement_3d SUBTYPE OF (placement); axis : OPTIONAL direction; ref_direction : OPTIONAL direction; DERIVE p : LIST [3:3] OF direction := build_axes(axis,ref_direction); WHERE wr1: (SELF\placement.location.dim = 3); wr2: ((NOT EXISTS(axis)) OR (axis.dim = 3)); wr3: ((NOT EXISTS(ref_direction)) OR (ref_direction.dim = 3)); wr4: ((NOT EXISTS(axis)) OR (NOT EXISTS(ref_direction)) OR ( cross_product(axis,ref_direction).magnitude > 0)); END_ENTITY; -- axis2_placement_3d ENTITY b_spline_curve SUPERTYPE OF (ONEOF (uniform_curve,b_spline_curve_with_knots, quasi_uniform_curve,bezier_curve) ANDOR rational_b_spline_curve) SUBTYPE OF (bounded_curve); degree : INTEGER; control_points_list : LIST [2:?] OF cartesian_point; curve_form : b_spline_curve_form; closed_curve : LOGICAL; self_intersect : LOGICAL; DERIVE upper_index_on_control_points : INTEGER := SIZEOF( control_points_list) - 1; control_points : ARRAY [0: upper_index_on_control_points] OF cartesian_point := list_to_array( control_points_list,0, upper_index_on_control_points); WHERE wr1: (('CONFIG_CONTROL_DESIGN.UNIFORM_CURVE' IN TYPEOF(SELF)) OR ( 'CONFIG_CONTROL_DESIGN.QUASI_UNIFORM_CURVE' IN TYPEOF(SELF)) OR ('CONFIG_CONTROL_DESIGN.BEZIER_CURVE' IN TYPEOF(SELF)) OR ('CONFIG_CONTROL_DESIGN.B_SPLINE_CURVE_WITH_KNOTS' IN TYPEOF(SELF))); END_ENTITY; -- b_spline_curve ENTITY b_spline_curve_with_knots SUBTYPE OF (b_spline_curve); knot_multiplicities : LIST [2:?] OF INTEGER; knots : LIST [2:?] OF parameter_value; knot_spec : knot_type; DERIVE upper_index_on_knots : INTEGER := SIZEOF(knots); WHERE wr1: constraints_param_b_spline(degree,upper_index_on_knots, upper_index_on_control_points,knot_multiplicities,knots); wr2: (SIZEOF(knot_multiplicities) = upper_index_on_knots); END_ENTITY; -- b_spline_curve_with_knots ENTITY b_spline_surface SUPERTYPE OF (ONEOF (b_spline_surface_with_knots,uniform_surface, quasi_uniform_surface,bezier_surface) ANDOR rational_b_spline_surface) SUBTYPE OF (bounded_surface); u_degree : INTEGER; v_degree : INTEGER; control_points_list : LIST [2:?] OF LIST [2:?] OF cartesian_point; surface_form : b_spline_surface_form; u_closed : LOGICAL; v_closed : LOGICAL; self_intersect : LOGICAL; DERIVE u_upper : INTEGER := SIZEOF(control_points_list) - 1; v_upper : INTEGER := SIZEOF(control_points_list[1]) - 1; control_points : ARRAY [0:u_upper] OF ARRAY [0:v_upper] OF cartesian_point := make_array_of_array( control_points_list,0,u_upper,0,v_upper); WHERE wr1: (('CONFIG_CONTROL_DESIGN.UNIFORM_SURFACE' IN TYPEOF(SELF)) OR ( 'CONFIG_CONTROL_DESIGN.QUASI_UNIFORM_SURFACE' IN TYPEOF(SELF)) OR ('CONFIG_CONTROL_DESIGN.BEZIER_SURFACE' IN TYPEOF(SELF)) OR ('CONFIG_CONTROL_DESIGN.B_SPLINE_SURFACE_WITH_KNOTS' IN TYPEOF(SELF))); END_ENTITY; -- b_spline_surface ENTITY b_spline_surface_with_knots SUBTYPE OF (b_spline_surface); u_multiplicities : LIST [2:?] OF INTEGER; v_multiplicities : LIST [2:?] OF INTEGER; u_knots : LIST [2:?] OF parameter_value; v_knots : LIST [2:?] OF parameter_value; knot_spec : knot_type; DERIVE knot_u_upper : INTEGER := SIZEOF(u_knots); knot_v_upper : INTEGER := SIZEOF(v_knots); WHERE wr1: constraints_param_b_spline(SELF\b_spline_surface.u_degree, knot_u_upper,SELF\b_spline_surface.u_upper,u_multiplicities, u_knots); wr2: constraints_param_b_spline(SELF\b_spline_surface.v_degree, knot_v_upper,SELF\b_spline_surface.v_upper,v_multiplicities, v_knots); wr3: (SIZEOF(u_multiplicities) = knot_u_upper); wr4: (SIZEOF(v_multiplicities) = knot_v_upper); END_ENTITY; -- b_spline_surface_with_knots ENTITY bezier_curve SUBTYPE OF (b_spline_curve); END_ENTITY; -- bezier_curve ENTITY bezier_surface SUBTYPE OF (b_spline_surface); END_ENTITY; -- bezier_surface ENTITY boundary_curve SUBTYPE OF (composite_curve_on_surface); WHERE wr1: SELF\composite_curve.closed_curve; END_ENTITY; -- boundary_curve ENTITY bounded_curve SUPERTYPE OF (ONEOF (polyline,b_spline_curve,trimmed_curve, bounded_pcurve,bounded_surface_curve,composite_curve)) SUBTYPE OF (curve); END_ENTITY; -- bounded_curve ENTITY bounded_pcurve SUBTYPE OF (pcurve, bounded_curve); WHERE wr1: ('CONFIG_CONTROL_DESIGN.BOUNDED_CURVE' IN TYPEOF(SELF\pcurve. reference_to_curve.items[1])); END_ENTITY; -- bounded_pcurve ENTITY bounded_surface SUPERTYPE OF (ONEOF (b_spline_surface,rectangular_trimmed_surface, curve_bounded_surface,rectangular_composite_surface)) SUBTYPE OF (surface); END_ENTITY; -- bounded_surface ENTITY bounded_surface_curve SUBTYPE OF (surface_curve, bounded_curve); WHERE wr1: ('CONFIG_CONTROL_DESIGN.BOUNDED_CURVE' IN TYPEOF(SELF\ surface_curve.curve_3d)); END_ENTITY; -- bounded_surface_curve ENTITY brep_with_voids SUBTYPE OF (manifold_solid_brep); voids : SET [1:?] OF oriented_closed_shell; END_ENTITY; -- brep_with_voids ENTITY calendar_date SUBTYPE OF (date); day_component : day_in_month_number; month_component : month_in_year_number; WHERE wr1: valid_calendar_date(SELF); END_ENTITY; -- calendar_date ENTITY cartesian_point SUBTYPE OF (point); coordinates : LIST [1:3] OF length_measure; END_ENTITY; -- cartesian_point ENTITY cartesian_transformation_operator SUPERTYPE OF (cartesian_transformation_operator_3d) SUBTYPE OF (geometric_representation_item, functionally_defined_transformation); axis1 : OPTIONAL direction; axis2 : OPTIONAL direction; local_origin : cartesian_point; scale : OPTIONAL REAL; DERIVE scl : REAL := NVL(scale,1); WHERE wr1: (scl > 0); END_ENTITY; -- cartesian_transformation_operator ENTITY cartesian_transformation_operator_3d SUBTYPE OF (cartesian_transformation_operator); axis3 : OPTIONAL direction; DERIVE u : LIST [3:3] OF direction := base_axis(3,SELF\ cartesian_transformation_operator.axis1,SELF\ cartesian_transformation_operator.axis2,axis3); WHERE wr1: (SELF\geometric_representation_item.dim = 3); END_ENTITY; -- cartesian_transformation_operator_3d ENTITY cc_design_approval SUBTYPE OF (approval_assignment); items : SET [1:?] OF approved_item; END_ENTITY; -- cc_design_approval ENTITY cc_design_certification SUBTYPE OF (certification_assignment); items : SET [1:?] OF certified_item; END_ENTITY; -- cc_design_certification ENTITY cc_design_contract SUBTYPE OF (contract_assignment); items : SET [1:?] OF contracted_item; END_ENTITY; -- cc_design_contract ENTITY cc_design_date_and_time_assignment SUBTYPE OF (date_and_time_assignment); items : SET [1:?] OF date_time_item; WHERE wr1: cc_design_date_time_correlation(SELF); END_ENTITY; -- cc_design_date_and_time_assignment ENTITY cc_design_person_and_organization_assignment SUBTYPE OF (person_and_organization_assignment); items : SET [1:?] OF person_organization_item; WHERE wr1: cc_design_person_and_organization_correlation(SELF); END_ENTITY; -- cc_design_person_and_organization_assignment ENTITY cc_design_security_classification SUBTYPE OF (security_classification_assignment); items : SET [1:?] OF classified_item; END_ENTITY; -- cc_design_security_classification ENTITY cc_design_specification_reference SUBTYPE OF (document_reference); items : SET [1:?] OF specified_item; END_ENTITY; -- cc_design_specification_reference ENTITY certification; name : label; purpose : text; kind : certification_type; END_ENTITY; -- certification ENTITY certification_assignment ABSTRACT SUPERTYPE; assigned_certification : certification; END_ENTITY; -- certification_assignment ENTITY certification_type; description : label; END_ENTITY; -- certification_type ENTITY change SUBTYPE OF (action_assignment); items : SET [1:?] OF work_item; END_ENTITY; -- change ENTITY change_request SUBTYPE OF (action_request_assignment); items : SET [1:?] OF change_request_item; END_ENTITY; -- change_request ENTITY circle SUBTYPE OF (conic); radius : positive_length_measure; END_ENTITY; -- circle ENTITY closed_shell SUBTYPE OF (connected_face_set); END_ENTITY; -- closed_shell ENTITY composite_curve SUBTYPE OF (bounded_curve); segments : LIST [1:?] OF composite_curve_segment; self_intersect : LOGICAL; DERIVE n_segments : INTEGER := SIZEOF(segments); closed_curve : LOGICAL := segments[n_segments].transition <> discontinuous; WHERE wr1: (((NOT closed_curve) AND (SIZEOF(QUERY ( temp <* segments | ( temp.transition = discontinuous) )) = 1)) OR (closed_curve AND (SIZEOF(QUERY ( temp <* segments | (temp.transition = discontinuous) )) = 0))); END_ENTITY; -- composite_curve ENTITY composite_curve_on_surface SUPERTYPE OF (boundary_curve) SUBTYPE OF (composite_curve); DERIVE basis_surface : SET [0:2] OF surface := get_basis_surface(SELF); WHERE wr1: (SIZEOF(basis_surface) > 0); wr2: constraints_composite_curve_on_surface(SELF); END_ENTITY; -- composite_curve_on_surface ENTITY composite_curve_segment SUBTYPE OF (founded_item); transition : transition_code; same_sense : BOOLEAN; parent_curve : curve; INVERSE using_curves : BAG [1:?] OF composite_curve FOR segments; WHERE wr1: ('CONFIG_CONTROL_DESIGN.BOUNDED_CURVE' IN TYPEOF(parent_curve)); END_ENTITY; -- composite_curve_segment ENTITY configuration_design; configuration : configuration_item; design : product_definition_formation; UNIQUE ur1 : configuration, design; END_ENTITY; -- configuration_design ENTITY configuration_effectivity SUBTYPE OF (product_definition_effectivity); configuration : configuration_design; UNIQUE ur1 : configuration, usage, id; WHERE wr1: ('CONFIG_CONTROL_DESIGN.PRODUCT_DEFINITION_USAGE' IN TYPEOF( SELF\product_definition_effectivity.usage)); END_ENTITY; -- configuration_effectivity ENTITY configuration_item; id : identifier; name : label; description : OPTIONAL text; item_concept : product_concept; purpose : OPTIONAL label; UNIQUE ur1 : id; END_ENTITY; -- configuration_item ENTITY conic SUPERTYPE OF (ONEOF (circle,ellipse,hyperbola,parabola)) SUBTYPE OF (curve); position : axis2_placement; END_ENTITY; -- conic ENTITY conical_surface SUBTYPE OF (elementary_surface); radius : length_measure; semi_angle : plane_angle_measure; WHERE wr1: (radius >= 0); END_ENTITY; -- conical_surface ENTITY connected_edge_set SUBTYPE OF (topological_representation_item); ces_edges : SET [1:?] OF edge; END_ENTITY; -- connected_edge_set ENTITY connected_face_set SUPERTYPE OF (ONEOF (closed_shell,open_shell)) SUBTYPE OF (topological_representation_item); cfs_faces : SET [1:?] OF face; END_ENTITY; -- connected_face_set ENTITY context_dependent_shape_representation; representation_relation : shape_representation_relationship; represented_product_relation : product_definition_shape; WHERE wr1: ('CONFIG_CONTROL_DESIGN.PRODUCT_DEFINITION_RELATIONSHIP' IN TYPEOF(SELF.represented_product_relation.definition)); END_ENTITY; -- context_dependent_shape_representation ENTITY context_dependent_unit SUBTYPE OF (named_unit); name : label; END_ENTITY; -- context_dependent_unit ENTITY contract; name : label; purpose : text; kind : contract_type; END_ENTITY; -- contract ENTITY contract_assignment ABSTRACT SUPERTYPE; assigned_contract : contract; END_ENTITY; -- contract_assignment ENTITY contract_type; description : label; END_ENTITY; -- contract_type ENTITY conversion_based_unit SUBTYPE OF (named_unit); name : label; conversion_factor : measure_with_unit; END_ENTITY; -- conversion_based_unit ENTITY coordinated_universal_time_offset; hour_offset : hour_in_day; minute_offset : OPTIONAL minute_in_hour; sense : ahead_or_behind; END_ENTITY; -- coordinated_universal_time_offset ENTITY curve SUPERTYPE OF (ONEOF (line,conic,pcurve,surface_curve,offset_curve_3d, curve_replica)) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- curve ENTITY curve_bounded_surface SUBTYPE OF (bounded_surface); basis_surface : surface; boundaries : SET [1:?] OF boundary_curve; implicit_outer : BOOLEAN; WHERE wr1: (NOT (implicit_outer AND ( 'CONFIG_CONTROL_DESIGN.OUTER_BOUNDARY_CURVE' IN TYPEOF( boundaries)))); wr2: ((NOT implicit_outer) OR ( 'CONFIG_CONTROL_DESIGN.BOUNDED_SURFACE' IN TYPEOF( basis_surface))); wr3: (SIZEOF(QUERY ( temp <* boundaries | ( 'CONFIG_CONTROL_DESIGN.OUTER_BOUNDARY_CURVE' IN TYPEOF(temp)) )) <= 1); wr4: (SIZEOF(QUERY ( temp <* boundaries | (temp\ composite_curve_on_surface.basis_surface[1] <> SELF. basis_surface) )) = 0); END_ENTITY; -- curve_bounded_surface ENTITY curve_replica SUBTYPE OF (curve); parent_curve : curve; transformation : cartesian_transformation_operator; WHERE wr1: (transformation.dim = parent_curve.dim); wr2: acyclic_curve_replica(SELF,parent_curve); END_ENTITY; -- curve_replica ENTITY cylindrical_surface SUBTYPE OF (elementary_surface); radius : positive_length_measure; END_ENTITY; -- cylindrical_surface ENTITY date SUPERTYPE OF (ONEOF (calendar_date,ordinal_date, week_of_year_and_day_date)); year_component : year_number; END_ENTITY; -- date ENTITY date_and_time; date_component : date; time_component : local_time; END_ENTITY; -- date_and_time ENTITY date_and_time_assignment ABSTRACT SUPERTYPE; assigned_date_and_time : date_and_time; role : date_time_role; END_ENTITY; -- date_and_time_assignment ENTITY date_time_role; name : label; END_ENTITY; -- date_time_role ENTITY dated_effectivity SUBTYPE OF (effectivity); effectivity_start_date : date_and_time; effectivity_end_date : OPTIONAL date_and_time; END_ENTITY; -- dated_effectivity ENTITY definitional_representation SUBTYPE OF (representation); WHERE wr1: ('CONFIG_CONTROL_DESIGN.PARAMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(SELF\representation.context_of_items)); END_ENTITY; -- definitional_representation ENTITY degenerate_pcurve SUBTYPE OF (point); basis_surface : surface; reference_to_curve : definitional_representation; WHERE wr1: (SIZEOF(reference_to_curve\representation.items) = 1); wr2: ('CONFIG_CONTROL_DESIGN.CURVE' IN TYPEOF(reference_to_curve\ representation.items[1])); wr3: (reference_to_curve\representation.items[1]\ geometric_representation_item.dim = 2); END_ENTITY; -- degenerate_pcurve ENTITY degenerate_toroidal_surface SUBTYPE OF (toroidal_surface); select_outer : BOOLEAN; WHERE wr1: (major_radius < minor_radius); END_ENTITY; -- degenerate_toroidal_surface ENTITY design_context SUBTYPE OF (product_definition_context); WHERE wr1: (SELF.life_cycle_stage = 'design'); END_ENTITY; -- design_context ENTITY design_make_from_relationship SUBTYPE OF (product_definition_relationship); END_ENTITY; -- design_make_from_relationship ENTITY dimensional_exponents; length_exponent : REAL; mass_exponent : REAL; time_exponent : REAL; electric_current_exponent : REAL; thermodynamic_temperature_exponent : REAL; amount_of_substance_exponent : REAL; luminous_intensity_exponent : REAL; END_ENTITY; -- dimensional_exponents ENTITY directed_action SUBTYPE OF (executed_action); directive : action_directive; END_ENTITY; -- directed_action ENTITY direction SUBTYPE OF (geometric_representation_item); direction_ratios : LIST [2:3] OF REAL; WHERE wr1: (SIZEOF(QUERY ( tmp <* direction_ratios | (tmp <> 0) )) > 0); END_ENTITY; -- direction ENTITY document; id : identifier; name : label; description : text; kind : document_type; UNIQUE ur1 : id; END_ENTITY; -- document ENTITY document_reference ABSTRACT SUPERTYPE; assigned_document : document; source : label; END_ENTITY; -- document_reference ENTITY document_relationship; name : label; description : text; relating_document : document; related_document : document; END_ENTITY; -- document_relationship ENTITY document_type; product_data_type : label; END_ENTITY; -- document_type ENTITY document_usage_constraint; source : document; subject_element : label; subject_element_value : text; END_ENTITY; -- document_usage_constraint ENTITY document_with_class SUBTYPE OF (document); class : identifier; END_ENTITY; -- document_with_class ENTITY edge SUPERTYPE OF (ONEOF (edge_curve,oriented_edge)) SUBTYPE OF (topological_representation_item); edge_start : vertex; edge_end : vertex; END_ENTITY; -- edge ENTITY edge_based_wireframe_model SUBTYPE OF (geometric_representation_item); ebwm_boundary : SET [1:?] OF connected_edge_set; END_ENTITY; -- edge_based_wireframe_model ENTITY edge_based_wireframe_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: (SIZEOF(QUERY ( it <* SELF.items | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.EDGE_BASED_WIREFRAME_MODEL', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM', 'CONFIG_CONTROL_DESIGN.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1)) )) = 0); wr2: (SIZEOF(QUERY ( it <* SELF.items | (SIZEOF([ 'CONFIG_CONTROL_DESIGN.EDGE_BASED_WIREFRAME_MODEL', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM'] * TYPEOF(it)) = 1) )) >= 1); wr3: (SIZEOF(QUERY ( ebwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | (NOT (SIZEOF( QUERY ( edges <* eb.ces_edges | (NOT ( 'CONFIG_CONTROL_DESIGN.EDGE_CURVE' IN TYPEOF(edges))) )) = 0)) )) = 0)) )) = 0); wr4: (SIZEOF(QUERY ( ebwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | (NOT (SIZEOF( QUERY ( pline_edges <* QUERY ( edges <* eb.ces_edges | ( 'CONFIG_CONTROL_DESIGN.POLYLINE' IN TYPEOF(edges\edge_curve. edge_geometry)) ) | (NOT (SIZEOF(pline_edges\edge_curve. edge_geometry\polyline.points) > 2)) )) = 0)) )) = 0)) )) = 0); wr5: (SIZEOF(QUERY ( ebwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | (NOT (SIZEOF( QUERY ( edges <* eb.ces_edges | (NOT (( 'CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(edges. edge_start)) AND ('CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(edges.edge_end)))) )) = 0)) )) = 0)) )) = 0); wr6: (SIZEOF(QUERY ( ebwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | (NOT (SIZEOF( QUERY ( edges <* eb.ces_edges | (NOT valid_wireframe_edge_curve(edges\edge_curve.edge_geometry)) )) = 0)) )) = 0)) )) = 0); wr7: (SIZEOF(QUERY ( ebwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.EDGE_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | (NOT (SIZEOF( QUERY ( edges <* eb.ces_edges | (NOT ( valid_wireframe_vertex_point(edges.edge_start\vertex_point. vertex_geometry) AND valid_wireframe_vertex_point(edges. edge_end\vertex_point.vertex_geometry))) )) = 0)) )) = 0)) )) = 0); wr8: (SIZEOF(QUERY ( mi <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM' IN TYPEOF(it)) ) | (NOT (('CONFIG_CONTROL_DESIGN.' + 'EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION') IN TYPEOF(mi\ mapped_item.mapping_source.mapped_representation))) )) = 0); wr9: (SELF.context_of_items\geometric_representation_context. coordinate_space_dimension = 3); END_ENTITY; -- edge_based_wireframe_shape_representation ENTITY edge_curve SUBTYPE OF (edge, geometric_representation_item); edge_geometry : curve; same_sense : BOOLEAN; END_ENTITY; -- edge_curve ENTITY edge_loop SUBTYPE OF (loop, path); DERIVE ne : INTEGER := SIZEOF(SELF\path.edge_list); WHERE wr1: (SELF\path.edge_list[1].edge_start :=: SELF\path.edge_list[ne]. edge_end); END_ENTITY; -- edge_loop ENTITY effectivity SUPERTYPE OF (ONEOF (serial_numbered_effectivity,dated_effectivity, lot_effectivity)); id : identifier; END_ENTITY; -- effectivity ENTITY elementary_surface SUPERTYPE OF (ONEOF (plane,cylindrical_surface,conical_surface, spherical_surface,toroidal_surface)) SUBTYPE OF (surface); position : axis2_placement_3d; END_ENTITY; -- elementary_surface ENTITY ellipse SUBTYPE OF (conic); semi_axis_1 : positive_length_measure; semi_axis_2 : positive_length_measure; END_ENTITY; -- ellipse ENTITY evaluated_degenerate_pcurve SUBTYPE OF (degenerate_pcurve); equivalent_point : cartesian_point; END_ENTITY; -- evaluated_degenerate_pcurve ENTITY executed_action SUBTYPE OF (action); END_ENTITY; -- executed_action ENTITY face SUPERTYPE OF (ONEOF (face_surface,oriented_face)) SUBTYPE OF (topological_representation_item); bounds : SET [1:?] OF face_bound; WHERE wr1: (NOT mixed_loop_type_set(list_to_set(list_face_loops(SELF)))); wr2: (SIZEOF(QUERY ( temp <* bounds | ( 'CONFIG_CONTROL_DESIGN.FACE_OUTER_BOUND' IN TYPEOF(temp)) )) <= 1); END_ENTITY; -- face ENTITY face_bound SUBTYPE OF (topological_representation_item); bound : loop; orientation : BOOLEAN; END_ENTITY; -- face_bound ENTITY face_outer_bound SUBTYPE OF (face_bound); END_ENTITY; -- face_outer_bound ENTITY face_surface SUBTYPE OF (face, geometric_representation_item); face_geometry : surface; same_sense : BOOLEAN; END_ENTITY; -- face_surface ENTITY faceted_brep SUBTYPE OF (manifold_solid_brep); END_ENTITY; -- faceted_brep ENTITY faceted_brep_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: (SIZEOF(QUERY ( it <* items | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.FACETED_BREP', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM', 'CONFIG_CONTROL_DESIGN.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1)) )) = 0); wr2: (SIZEOF(QUERY ( it <* items | (SIZEOF([ 'CONFIG_CONTROL_DESIGN.FACETED_BREP', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM'] * TYPEOF(it)) = 1) )) > 0); wr3: (SIZEOF(QUERY ( fbrep <* QUERY ( it <* items | ( 'CONFIG_CONTROL_DESIGN.FACETED_BREP' IN TYPEOF(it)) ) | ( NOT (SIZEOF(QUERY ( csh <* msb_shells(fbrep) | (NOT (SIZEOF( QUERY ( fcs <* csh\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.FACE_SURFACE' IN TYPEOF(fcs)) AND ( 'CONFIG_CONTROL_DESIGN.PLANE' IN TYPEOF(fcs\face_surface. face_geometry)) AND ('CONFIG_CONTROL_DESIGN.CARTESIAN_POINT' IN TYPEOF(fcs\face_surface.face_geometry\elementary_surface. position.location)))) )) = 0)) )) = 0)) )) = 0); wr4: (SIZEOF(QUERY ( fbrep <* QUERY ( it <* items | ( 'CONFIG_CONTROL_DESIGN.FACETED_BREP' IN TYPEOF(it)) ) | ( NOT (SIZEOF(QUERY ( csh <* msb_shells(fbrep) | (NOT (SIZEOF( QUERY ( fcs <* csh\connected_face_set.cfs_faces | (NOT ( SIZEOF(QUERY ( bnds <* fcs.bounds | ( 'CONFIG_CONTROL_DESIGN.FACE_OUTER_BOUND' IN TYPEOF(bnds)) )) = 1)) )) = 0)) )) = 0)) )) = 0); wr5: (SIZEOF(QUERY ( msb <* QUERY ( it <* items | ( 'CONFIG_CONTROL_DESIGN.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) ) | ('CONFIG_CONTROL_DESIGN.ORIENTED_CLOSED_SHELL' IN TYPEOF( msb\manifold_solid_brep.outer)) )) = 0); wr6: (SIZEOF(QUERY ( brv <* QUERY ( it <* items | ( 'CONFIG_CONTROL_DESIGN.BREP_WITH_VOIDS' IN TYPEOF(it)) ) | ( NOT (SIZEOF(QUERY ( csh <* brv\brep_with_voids.voids | csh\ oriented_closed_shell.orientation )) = 0)) )) = 0); wr7: (SIZEOF(QUERY ( mi <* QUERY ( it <* items | ( 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM' IN TYPEOF(it)) ) | (NOT ('CONFIG_CONTROL_DESIGN.FACETED_BREP_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source. mapped_representation))) )) = 0); END_ENTITY; -- faceted_brep_shape_representation ENTITY founded_item; END_ENTITY; -- founded_item ENTITY functionally_defined_transformation; name : label; description : text; END_ENTITY; -- functionally_defined_transformation ENTITY geometric_curve_set SUBTYPE OF (geometric_set); WHERE wr1: (SIZEOF(QUERY ( temp <* SELF\geometric_set.elements | ( 'CONFIG_CONTROL_DESIGN.SURFACE' IN TYPEOF(temp)) )) = 0); END_ENTITY; -- geometric_curve_set ENTITY geometric_representation_context SUBTYPE OF (representation_context); coordinate_space_dimension : dimension_count; END_ENTITY; -- geometric_representation_context ENTITY geometric_representation_item SUPERTYPE OF (ONEOF (point,direction,vector,placement, cartesian_transformation_operator,curve,surface,edge_curve, face_surface,poly_loop,vertex_point,solid_model, shell_based_surface_model,shell_based_wireframe_model, edge_based_wireframe_model,geometric_set)) SUBTYPE OF (representation_item); DERIVE dim : dimension_count := dimension_of(SELF); WHERE wr1: (SIZEOF(QUERY ( using_rep <* using_representations(SELF) | ( NOT ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(using_rep.context_of_items))) )) = 0); END_ENTITY; -- geometric_representation_item ENTITY geometric_set SUPERTYPE OF (geometric_curve_set) SUBTYPE OF (geometric_representation_item); elements : SET [1:?] OF geometric_set_select; END_ENTITY; -- geometric_set ENTITY geometrically_bounded_surface_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: (SIZEOF(QUERY ( it <* SELF.items | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.GEOMETRIC_SET', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM', 'CONFIG_CONTROL_DESIGN.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1)) )) = 0); wr2: (SIZEOF(QUERY ( it <* SELF.items | (SIZEOF([ 'CONFIG_CONTROL_DESIGN.GEOMETRIC_SET', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM'] * TYPEOF(it)) = 1) )) > 0); wr3: (SIZEOF(QUERY ( mi <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM' IN TYPEOF(it)) ) | (NOT ((('CONFIG_CONTROL_DESIGN.' + 'GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION') IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation)) AND (SIZEOF(QUERY ( mr_it <* mi\mapped_item.mapping_source. mapped_representation.items | ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_SET' IN TYPEOF(mr_it)) )) > 0))) )) = 0); wr4: (SIZEOF(QUERY ( gs <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_SET' IN TYPEOF(it)) ) | ( NOT (SIZEOF(QUERY ( pnt <* QUERY ( gsel <* gs\geometric_set. elements | ('CONFIG_CONTROL_DESIGN.POINT' IN TYPEOF(gsel)) ) | (NOT gbsf_check_point(pnt)) )) = 0)) )) = 0); wr5: (SIZEOF(QUERY ( gs <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_SET' IN TYPEOF(it)) ) | ( NOT (SIZEOF(QUERY ( cv <* QUERY ( gsel <* gs\geometric_set. elements | ('CONFIG_CONTROL_DESIGN.CURVE' IN TYPEOF(gsel)) ) | (NOT gbsf_check_curve(cv)) )) = 0)) )) = 0); wr6: (SIZEOF(QUERY ( gs <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_SET' IN TYPEOF(it)) ) | ( NOT (SIZEOF(QUERY ( sf <* QUERY ( gsel <* gs\geometric_set. elements | ('CONFIG_CONTROL_DESIGN.SURFACE' IN TYPEOF(gsel)) ) | (NOT gbsf_check_surface(sf)) )) = 0)) )) = 0); wr7: (SIZEOF(QUERY ( gs <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_SET' IN TYPEOF(it)) ) | ( SIZEOF(QUERY ( gsel <* gs\geometric_set.elements | ( 'CONFIG_CONTROL_DESIGN.SURFACE' IN TYPEOF(gsel)) )) > 0) )) > 0); END_ENTITY; -- geometrically_bounded_surface_shape_representation ENTITY geometrically_bounded_wireframe_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: (SIZEOF(QUERY ( it <* SELF.items | (NOT (SIZEOF(TYPEOF(it) * [ 'CONFIG_CONTROL_DESIGN.GEOMETRIC_CURVE_SET', 'CONFIG_CONTROL_DESIGN.AXIS2_PLACEMENT_3D', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM']) = 1)) )) = 0); wr2: (SIZEOF(QUERY ( it <* SELF.items | (SIZEOF(TYPEOF(it) * [ 'CONFIG_CONTROL_DESIGN.GEOMETRIC_CURVE_SET', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM']) = 1) )) >= 1); wr3: (SIZEOF(QUERY ( gcs <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_CURVE_SET' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( crv <* QUERY ( elem <* gcs\ geometric_set.elements | ('CONFIG_CONTROL_DESIGN.CURVE' IN TYPEOF(elem)) ) | (NOT valid_geometrically_bounded_wf_curve( crv)) )) = 0)) )) = 0); wr4: (SIZEOF(QUERY ( gcs <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_CURVE_SET' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( pnts <* QUERY ( elem <* gcs\ geometric_set.elements | ('CONFIG_CONTROL_DESIGN.POINT' IN TYPEOF(elem)) ) | (NOT valid_geometrically_bounded_wf_point( pnts)) )) = 0)) )) = 0); wr5: (SIZEOF(QUERY ( gcs <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_CURVE_SET' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cnc <* QUERY ( elem <* gcs\ geometric_set.elements | ('CONFIG_CONTROL_DESIGN.CONIC' IN TYPEOF(elem)) ) | (NOT ( 'CONFIG_CONTROL_DESIGN.AXIS2_PLACEMENT_3D' IN TYPEOF(cnc\ conic.position))) )) = 0)) )) = 0); wr6: (SIZEOF(QUERY ( gcs <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_CURVE_SET' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( pline <* QUERY ( elem <* gcs\ geometric_set.elements | ('CONFIG_CONTROL_DESIGN.POLYLINE' IN TYPEOF(elem)) ) | (NOT (SIZEOF(pline\polyline.points) > 2)) )) = 0)) )) = 0); wr7: (SIZEOF(QUERY ( mi <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM' IN TYPEOF(it)) ) | (NOT (('CONFIG_CONTROL_DESIGN.' + 'GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION') IN TYPEOF(mi\mapped_item.mapping_source.mapped_representation) )) )) = 0); END_ENTITY; -- geometrically_bounded_wireframe_shape_representation ENTITY global_uncertainty_assigned_context SUBTYPE OF (representation_context); uncertainty : SET [1:?] OF uncertainty_measure_with_unit; END_ENTITY; -- global_uncertainty_assigned_context ENTITY global_unit_assigned_context SUBTYPE OF (representation_context); units : SET [1:?] OF unit; END_ENTITY; -- global_unit_assigned_context ENTITY hyperbola SUBTYPE OF (conic); semi_axis : positive_length_measure; semi_imag_axis : positive_length_measure; END_ENTITY; -- hyperbola ENTITY intersection_curve SUBTYPE OF (surface_curve); WHERE wr1: (SIZEOF(SELF\surface_curve.associated_geometry) = 2); wr2: (associated_surface(SELF\surface_curve.associated_geometry[1]) <> associated_surface(SELF\surface_curve.associated_geometry [2])); END_ENTITY; -- intersection_curve ENTITY item_defined_transformation; name : label; description : text; transform_item_1 : representation_item; transform_item_2 : representation_item; END_ENTITY; -- item_defined_transformation ENTITY length_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1: ('CONFIG_CONTROL_DESIGN.LENGTH_UNIT' IN TYPEOF(SELF\ measure_with_unit.unit_component)); END_ENTITY; -- length_measure_with_unit ENTITY length_unit SUBTYPE OF (named_unit); WHERE wr1: ((SELF\named_unit.dimensions.length_exponent = 1) AND (SELF\ named_unit.dimensions.mass_exponent = 0) AND (SELF\ named_unit.dimensions.time_exponent = 0) AND (SELF\ named_unit.dimensions.electric_current_exponent = 0) AND ( SELF\named_unit.dimensions. thermodynamic_temperature_exponent = 0) AND (SELF\named_unit .dimensions.amount_of_substance_exponent = 0) AND (SELF\ named_unit.dimensions.luminous_intensity_exponent = 0)); END_ENTITY; -- length_unit ENTITY line SUBTYPE OF (curve); pnt : cartesian_point; dir : vector; WHERE wr1: (dir.dim = pnt.dim); END_ENTITY; -- line ENTITY local_time; hour_component : hour_in_day; minute_component : OPTIONAL minute_in_hour; second_component : OPTIONAL second_in_minute; zone : coordinated_universal_time_offset; WHERE wr1: valid_time(SELF); END_ENTITY; -- local_time ENTITY loop SUPERTYPE OF (ONEOF (vertex_loop,edge_loop,poly_loop)) SUBTYPE OF (topological_representation_item); END_ENTITY; -- loop ENTITY lot_effectivity SUBTYPE OF (effectivity); effectivity_lot_id : identifier; effectivity_lot_size : measure_with_unit; END_ENTITY; -- lot_effectivity ENTITY manifold_solid_brep SUBTYPE OF (solid_model); outer : closed_shell; END_ENTITY; -- manifold_solid_brep ENTITY manifold_surface_shape_representation SUBTYPE OF (shape_representation); WHERE wr1 : (SIZEOF(QUERY ( it <* SELF.items | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM', 'CONFIG_CONTROL_DESIGN.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1)) )) = 0); wr2 : (SIZEOF(QUERY ( it <* SELF.items | (SIZEOF([ 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM'] * TYPEOF(it)) = 1) )) > 0); wr3 : (SIZEOF(QUERY ( mi <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM' IN TYPEOF(it)) ) | ( NOT (('CONFIG_CONTROL_DESIGN.'+ 'MANIFOLD_SURFACE_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source. mapped_representation)) AND (SIZEOF(QUERY ( mr_it <* mi\ mapped_item.mapping_source.mapped_representation.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(mr_it)) )) > 0))) )) = 0); wr4 : (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( sh <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.OPEN_SHELL', 'CONFIG_CONTROL_DESIGN.ORIENTED_CLOSED_SHELL', 'CONFIG_CONTROL_DESIGN.CLOSED_SHELL'] * TYPEOF(sh)) = 1)) )) = 0)) )) = 0); wr5 : (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT ( SIZEOF(['CONFIG_CONTROL_DESIGN.FACE_SURFACE', 'CONFIG_CONTROL_DESIGN.ORIENTED_FACE'] * TYPEOF(fa)) = 1)) )) = 0)) )) = 0)) )) = 0); wr6 : (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( f_sf <* QUERY ( fa <* cfs\connected_face_set. cfs_faces | ('CONFIG_CONTROL_DESIGN.FACE_SURFACE' IN TYPEOF(fa)) ) | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(f_sf)) OR ( SIZEOF(['CONFIG_CONTROL_DESIGN.B_SPLINE_SURFACE', 'CONFIG_CONTROL_DESIGN.ELEMENTARY_SURFACE', 'CONFIG_CONTROL_DESIGN.OFFSET_SURFACE', 'CONFIG_CONTROL_DESIGN.SURFACE_REPLICA', 'CONFIG_CONTROL_DESIGN.SWEPT_SURFACE'] * TYPEOF(f_sf\ face_surface.face_geometry)) = 1))) )) = 0)) )) = 0)) )) = 0); wr7 : (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fa)) OR msf_surface_check(fa\face_surface.face_geometry))) )) = 0)) )) = 0)) )) = 0); wr8 : (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fa)) OR ( SIZEOF(QUERY ( bnds <* fa.bounds | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.EDGE_LOOP', 'CONFIG_CONTROL_DESIGN.VERTEX_LOOP'] * TYPEOF(bnds.bound)) = 1)) )) = 0))) )) = 0)) )) = 0)) )) = 0); wr9 : (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fa)) OR ( SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe <* elp_fbnds\path.edge_list | ( NOT ('CONFIG_CONTROL_DESIGN.EDGE_CURVE' IN TYPEOF(oe. edge_element))))) = 0)))) = 0))))) = 0)) )) = 0)) )) = 0); wr10: (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fa)) OR ( SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe_cv <* QUERY ( oe <* elp_fbnds\ path.edge_list | ('CONFIG_CONTROL_DESIGN.EDGE_CURVE' IN TYPEOF(oe.edge_element)) ) | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.B_SPLINE_CURVE', 'CONFIG_CONTROL_DESIGN.CONIC', 'CONFIG_CONTROL_DESIGN.CURVE_REPLICA', 'CONFIG_CONTROL_DESIGN.LINE', 'CONFIG_CONTROL_DESIGN.OFFSET_CURVE_3D', 'CONFIG_CONTROL_DESIGN.PCURVE', 'CONFIG_CONTROL_DESIGN.POLYLINE', 'CONFIG_CONTROL_DESIGN.SURFACE_CURVE'] * TYPEOF(oe_cv. edge_element\edge_curve.edge_geometry)) = 1)) )) = 0)) )) = 0))) )) = 0)) )) = 0)) )) = 0); wr11: (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fa)) OR ( SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe <* elp_fbnds\path.edge_list | ( NOT msf_curve_check(oe.edge_element\edge_curve. edge_geometry)) )) = 0)) )) = 0))) )) = 0)) )) = 0)) )) = 0); wr12: (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fa)) OR ( SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe <* elp_fbnds\path.edge_list | ( NOT (('CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(oe. edge_element.edge_start)) AND ( 'CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(oe. edge_element.edge_end)))) )) = 0)) )) = 0))) )) = 0)) )) = 0)) )) = 0); wr13: (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fa)) OR ( SIZEOF(QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ( 'CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(QUERY ( oe <* elp_fbnds\path.edge_list | ( NOT ((SIZEOF(['CONFIG_CONTROL_DESIGN.CARTESIAN_POINT', 'CONFIG_CONTROL_DESIGN.DEGENERATE_PCURVE', 'CONFIG_CONTROL_DESIGN.POINT_ON_CURVE', 'CONFIG_CONTROL_DESIGN.POINT_ON_SURFACE'] * TYPEOF(oe. edge_element.edge_start\vertex_point.vertex_geometry)) = 1) AND (SIZEOF(['CONFIG_CONTROL_DESIGN.CARTESIAN_POINT', 'CONFIG_CONTROL_DESIGN.DEGENERATE_PCURVE', 'CONFIG_CONTROL_DESIGN.POINT_ON_CURVE', 'CONFIG_CONTROL_DESIGN.POINT_ON_SURFACE'] * TYPEOF(oe. edge_element.edge_end\vertex_point.vertex_geometry)) = 1))) )) = 0)) )) = 0))) )) = 0)) )) = 0)) )) = 0); wr14: (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fa)) OR ( SIZEOF(QUERY ( vlp_fbnds <* QUERY ( bnds <* fa.bounds | ( 'CONFIG_CONTROL_DESIGN.VERTEX_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT ('CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF( vlp_fbnds\vertex_loop.loop_vertex))) )) = 0))) )) = 0)) )) = 0)) )) = 0); wr15: (SIZEOF(QUERY ( sbsm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_SURFACE_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | (NOT (SIZEOF( QUERY ( fa <* cfs\connected_face_set.cfs_faces | (NOT (( 'CONFIG_CONTROL_DESIGN.ADVANCED_FACE' IN TYPEOF(fa)) OR ( SIZEOF(QUERY ( vlp_fbnds <* QUERY ( bnds <* fa.bounds | ( 'CONFIG_CONTROL_DESIGN.VERTEX_LOOP' IN TYPEOF(bnds.bound)) ) | (NOT (SIZEOF(['CONFIG_CONTROL_DESIGN.CARTESIAN_POINT', 'CONFIG_CONTROL_DESIGN.DEGENERATE_PCURVE', 'CONFIG_CONTROL_DESIGN.POINT_ON_CURVE', 'CONFIG_CONTROL_DESIGN.POINT_ON_SURFACE'] * TYPEOF( vlp_fbnds\vertex_loop.loop_vertex\vertex_point. vertex_geometry)) = 1)) )) = 0))) )) = 0)) )) = 0)) )) = 0); END_ENTITY; -- manifold_surface_shape_representation ENTITY mapped_item SUBTYPE OF (representation_item); mapping_source : representation_map; mapping_target : representation_item; WHERE wr1: acyclic_mapped_representation(using_representations(SELF), [SELF]); END_ENTITY; -- mapped_item ENTITY mass_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1: ('CONFIG_CONTROL_DESIGN.MASS_UNIT' IN TYPEOF(SELF\ measure_with_unit.unit_component)); END_ENTITY; -- mass_measure_with_unit ENTITY mass_unit SUBTYPE OF (named_unit); WHERE wr1: ((SELF\named_unit.dimensions.length_exponent = 0) AND (SELF\ named_unit.dimensions.mass_exponent = 1) AND (SELF\ named_unit.dimensions.time_exponent = 0) AND (SELF\ named_unit.dimensions.electric_current_exponent = 0) AND ( SELF\named_unit.dimensions. thermodynamic_temperature_exponent = 0) AND (SELF\named_unit .dimensions.amount_of_substance_exponent = 0) AND (SELF\ named_unit.dimensions.luminous_intensity_exponent = 0)); END_ENTITY; -- mass_unit ENTITY measure_with_unit SUPERTYPE OF (ONEOF (length_measure_with_unit,mass_measure_with_unit, plane_angle_measure_with_unit,solid_angle_measure_with_unit, area_measure_with_unit,volume_measure_with_unit)); value_component : measure_value; unit_component : unit; WHERE wr1: valid_units(SELF); END_ENTITY; -- measure_with_unit ENTITY mechanical_context SUBTYPE OF (product_context); WHERE wr1: (SELF.discipline_type = 'mechanical'); END_ENTITY; -- mechanical_context ENTITY named_unit SUPERTYPE OF (ONEOF (si_unit,conversion_based_unit, context_dependent_unit) ANDOR ONEOF (length_unit,mass_unit, plane_angle_unit,solid_angle_unit,area_unit,volume_unit)); dimensions : dimensional_exponents; END_ENTITY; -- named_unit ENTITY next_assembly_usage_occurrence SUBTYPE OF (assembly_component_usage); END_ENTITY; -- next_assembly_usage_occurrence ENTITY offset_curve_3d SUBTYPE OF (curve); basis_curve : curve; distance : length_measure; self_intersect : LOGICAL; ref_direction : direction; WHERE wr1: ((basis_curve.dim = 3) AND (ref_direction.dim = 3)); END_ENTITY; -- offset_curve_3d ENTITY offset_surface SUBTYPE OF (surface); basis_surface : surface; distance : length_measure; self_intersect : LOGICAL; END_ENTITY; -- offset_surface ENTITY open_shell SUBTYPE OF (connected_face_set); END_ENTITY; -- open_shell ENTITY ordinal_date SUBTYPE OF (date); day_component : day_in_year_number; WHERE wr1: (((NOT leap_year(SELF.year_component)) AND (1 <= day_component) AND (day_component <= 365)) OR (leap_year(SELF. year_component) AND (1 <= day_component) AND (day_component <= 366))); END_ENTITY; -- ordinal_date ENTITY organization; id : OPTIONAL identifier; name : label; description : text; END_ENTITY; -- organization ENTITY organization_relationship; name : label; description : text; relating_organization : organization; related_organization : organization; END_ENTITY; -- organization_relationship ENTITY organizational_address SUBTYPE OF (address); organizations : SET [1:?] OF organization; description : text; END_ENTITY; -- organizational_address ENTITY organizational_project; name : label; description : text; responsible_organizations : SET [1:?] OF organization; END_ENTITY; -- organizational_project ENTITY oriented_closed_shell SUBTYPE OF (closed_shell); closed_shell_element : closed_shell; orientation : BOOLEAN; DERIVE SELF\connected_face_set.cfs_faces : SET [1:?] OF face := conditional_reverse(SELF.orientation,SELF. closed_shell_element.cfs_faces); WHERE wr1: (NOT ('CONFIG_CONTROL_DESIGN.ORIENTED_CLOSED_SHELL' IN TYPEOF( SELF.closed_shell_element))); END_ENTITY; -- oriented_closed_shell ENTITY oriented_edge SUBTYPE OF (edge); edge_element : edge; orientation : BOOLEAN; DERIVE SELF\edge.edge_start : vertex := boolean_choose(SELF.orientation, SELF.edge_element.edge_start,SELF. edge_element.edge_end); SELF\edge.edge_end : vertex := boolean_choose(SELF.orientation, SELF.edge_element.edge_end,SELF. edge_element.edge_start); WHERE wr1: (NOT ('CONFIG_CONTROL_DESIGN.ORIENTED_EDGE' IN TYPEOF(SELF. edge_element))); END_ENTITY; -- oriented_edge ENTITY oriented_face SUBTYPE OF (face); face_element : face; orientation : BOOLEAN; DERIVE SELF\face.bounds : SET [1:?] OF face_bound := conditional_reverse( SELF.orientation,SELF.face_element.bounds); WHERE wr1: (NOT ('CONFIG_CONTROL_DESIGN.ORIENTED_FACE' IN TYPEOF(SELF. face_element))); END_ENTITY; -- oriented_face ENTITY oriented_open_shell SUBTYPE OF (open_shell); open_shell_element : open_shell; orientation : BOOLEAN; DERIVE SELF\connected_face_set.cfs_faces : SET [1:?] OF face := conditional_reverse(SELF. orientation,SELF. open_shell_element.cfs_faces); WHERE wr1: (NOT ('CONFIG_CONTROL_DESIGN.ORIENTED_OPEN_SHELL' IN TYPEOF( SELF.open_shell_element))); END_ENTITY; -- oriented_open_shell ENTITY oriented_path SUBTYPE OF (path); path_element : path; orientation : BOOLEAN; DERIVE SELF\path.edge_list : LIST [1:?] OF UNIQUE oriented_edge := conditional_reverse(SELF.orientation,SELF. path_element.edge_list); WHERE wr1: (NOT ('CONFIG_CONTROL_DESIGN.ORIENTED_PATH' IN TYPEOF(SELF. path_element))); END_ENTITY; -- oriented_path ENTITY outer_boundary_curve SUBTYPE OF (boundary_curve); END_ENTITY; -- outer_boundary_curve ENTITY parabola SUBTYPE OF (conic); focal_dist : length_measure; WHERE wr1: (focal_dist <> 0); END_ENTITY; -- parabola ENTITY parametric_representation_context SUBTYPE OF (representation_context); END_ENTITY; -- parametric_representation_context ENTITY path SUPERTYPE OF (ONEOF (edge_loop,oriented_path)) SUBTYPE OF (topological_representation_item); edge_list : LIST [1:?] OF UNIQUE oriented_edge; WHERE wr1: path_head_to_tail(SELF); END_ENTITY; -- path ENTITY pcurve SUBTYPE OF (curve); basis_surface : surface; reference_to_curve : definitional_representation; WHERE wr1: (SIZEOF(reference_to_curve\representation.items) = 1); wr2: ('CONFIG_CONTROL_DESIGN.CURVE' IN TYPEOF(reference_to_curve\ representation.items[1])); wr3: (reference_to_curve\representation.items[1]\ geometric_representation_item.dim = 2); END_ENTITY; -- pcurve ENTITY person; id : identifier; last_name : OPTIONAL label; first_name : OPTIONAL label; middle_names : OPTIONAL LIST [1:?] OF label; prefix_titles : OPTIONAL LIST [1:?] OF label; suffix_titles : OPTIONAL LIST [1:?] OF label; UNIQUE ur1 : id; WHERE wr1: (EXISTS(last_name) OR EXISTS(first_name)); END_ENTITY; -- person ENTITY person_and_organization; the_person : person; the_organization : organization; END_ENTITY; -- person_and_organization ENTITY person_and_organization_assignment ABSTRACT SUPERTYPE; assigned_person_and_organization : person_and_organization; role : person_and_organization_role; END_ENTITY; -- person_and_organization_assignment ENTITY person_and_organization_role; name : label; END_ENTITY; -- person_and_organization_role ENTITY personal_address SUBTYPE OF (address); people : SET [1:?] OF person; description : text; END_ENTITY; -- personal_address ENTITY placement SUPERTYPE OF (ONEOF (axis1_placement,axis2_placement_2d, axis2_placement_3d)) SUBTYPE OF (geometric_representation_item); location : cartesian_point; END_ENTITY; -- placement ENTITY plane SUBTYPE OF (elementary_surface); END_ENTITY; -- plane ENTITY plane_angle_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1: ('CONFIG_CONTROL_DESIGN.PLANE_ANGLE_UNIT' IN TYPEOF(SELF\ measure_with_unit.unit_component)); END_ENTITY; -- plane_angle_measure_with_unit ENTITY plane_angle_unit SUBTYPE OF (named_unit); WHERE wr1: ((SELF\named_unit.dimensions.length_exponent = 0) AND (SELF\ named_unit.dimensions.mass_exponent = 0) AND (SELF\ named_unit.dimensions.time_exponent = 0) AND (SELF\ named_unit.dimensions.electric_current_exponent = 0) AND ( SELF\named_unit.dimensions. thermodynamic_temperature_exponent = 0) AND (SELF\named_unit .dimensions.amount_of_substance_exponent = 0) AND (SELF\ named_unit.dimensions.luminous_intensity_exponent = 0)); END_ENTITY; -- plane_angle_unit ENTITY point SUPERTYPE OF (ONEOF (cartesian_point,point_on_curve,point_on_surface, point_replica,degenerate_pcurve)) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- point ENTITY point_on_curve SUBTYPE OF (point); basis_curve : curve; point_parameter : parameter_value; END_ENTITY; -- point_on_curve ENTITY point_on_surface SUBTYPE OF (point); basis_surface : surface; point_parameter_u : parameter_value; point_parameter_v : parameter_value; END_ENTITY; -- point_on_surface ENTITY point_replica SUBTYPE OF (point); parent_pt : point; transformation : cartesian_transformation_operator; WHERE wr1: (transformation.dim = parent_pt.dim); wr2: acyclic_point_replica(SELF,parent_pt); END_ENTITY; -- point_replica ENTITY poly_loop SUBTYPE OF (loop, geometric_representation_item); polygon : LIST [3:?] OF UNIQUE cartesian_point; END_ENTITY; -- poly_loop ENTITY polyline SUBTYPE OF (bounded_curve); points : LIST [2:?] OF cartesian_point; END_ENTITY; -- polyline ENTITY product; id : identifier; name : label; description : text; frame_of_reference : SET [1:?] OF product_context; UNIQUE ur1 : id; END_ENTITY; -- product ENTITY product_category; name : label; description : OPTIONAL text; END_ENTITY; -- product_category ENTITY product_category_relationship; name : label; description : text; category : product_category; sub_category : product_category; WHERE wr1: acyclic_product_category_relationship(SELF,[SELF.sub_category]); END_ENTITY; -- product_category_relationship ENTITY product_concept; id : identifier; name : label; description : text; market_context : product_concept_context; UNIQUE ur1 : id; END_ENTITY; -- product_concept ENTITY product_concept_context SUBTYPE OF (application_context_element); market_segment_type : label; END_ENTITY; -- product_concept_context ENTITY product_context SUBTYPE OF (application_context_element); discipline_type : label; END_ENTITY; -- product_context ENTITY product_definition; id : identifier; description : text; formation : product_definition_formation; frame_of_reference : product_definition_context; END_ENTITY; -- product_definition ENTITY product_definition_context SUBTYPE OF (application_context_element); life_cycle_stage : label; END_ENTITY; -- product_definition_context ENTITY product_definition_effectivity SUBTYPE OF (effectivity); usage : product_definition_relationship; UNIQUE ur1 : usage, id; END_ENTITY; -- product_definition_effectivity ENTITY product_definition_formation; id : identifier; description : text; of_product : product; UNIQUE ur1 : id, of_product; END_ENTITY; -- product_definition_formation ENTITY product_definition_formation_with_specified_source SUBTYPE OF (product_definition_formation); make_or_buy : source; END_ENTITY; -- product_definition_formation_with_specified_source ENTITY product_definition_relationship; id : identifier; name : label; description : text; relating_product_definition : product_definition; related_product_definition : product_definition; END_ENTITY; -- product_definition_relationship ENTITY product_definition_shape SUBTYPE OF (property_definition); UNIQUE ur1 : definition; WHERE wr1: (NOT ('CONFIG_CONTROL_DESIGN.SHAPE_DEFINITION' IN TYPEOF(SELF\ property_definition.definition))); END_ENTITY; -- product_definition_shape ENTITY product_definition_usage SUPERTYPE OF (assembly_component_usage) SUBTYPE OF (product_definition_relationship); UNIQUE ur1 : id, relating_product_definition, related_product_definition; WHERE wr1: acyclic_product_definition_relationship(SELF,[SELF\ product_definition_relationship.related_product_definition], 'CONFIG_CONTROL_DESIGN.PRODUCT_DEFINITION_USAGE'); END_ENTITY; -- product_definition_usage ENTITY product_definition_with_associated_documents SUBTYPE OF (product_definition); documentation_ids : SET [1:?] OF document; END_ENTITY; -- product_definition_with_associated_documents ENTITY product_related_product_category SUBTYPE OF (product_category); products : SET [1:?] OF product; END_ENTITY; -- product_related_product_category ENTITY promissory_usage_occurrence SUBTYPE OF (assembly_component_usage); END_ENTITY; -- promissory_usage_occurrence ENTITY property_definition; name : label; description : text; definition : characterized_definition; END_ENTITY; -- property_definition ENTITY property_definition_representation; definition : property_definition; used_representation : representation; END_ENTITY; -- property_definition_representation ENTITY quantified_assembly_component_usage SUBTYPE OF (assembly_component_usage); quantity : measure_with_unit; END_ENTITY; -- quantified_assembly_component_usage ENTITY quasi_uniform_curve SUBTYPE OF (b_spline_curve); END_ENTITY; -- quasi_uniform_curve ENTITY quasi_uniform_surface SUBTYPE OF (b_spline_surface); END_ENTITY; -- quasi_uniform_surface ENTITY rational_b_spline_curve SUBTYPE OF (b_spline_curve); weights_data : LIST [2:?] OF REAL; DERIVE weights : ARRAY [0:upper_index_on_control_points] OF REAL := list_to_array(weights_data,0, upper_index_on_control_points); WHERE wr1: (SIZEOF(weights_data) = SIZEOF(SELF\b_spline_curve. control_points_list)); wr2: curve_weights_positive(SELF); END_ENTITY; -- rational_b_spline_curve ENTITY rational_b_spline_surface SUBTYPE OF (b_spline_surface); weights_data : LIST [2:?] OF LIST [2:?] OF REAL; DERIVE weights : ARRAY [0:u_upper] OF ARRAY [0:v_upper] OF REAL := make_array_of_array(weights_data,0,u_upper,0,v_upper); WHERE wr1: ((SIZEOF(weights_data) = SIZEOF(SELF\b_spline_surface. control_points_list)) AND (SIZEOF(weights_data[1]) = SIZEOF( SELF\b_spline_surface.control_points_list[1]))); wr2: surface_weights_positive(SELF); END_ENTITY; -- rational_b_spline_surface ENTITY rectangular_composite_surface SUBTYPE OF (bounded_surface); segments : LIST [1:?] OF LIST [1:?] OF surface_patch; DERIVE n_u : INTEGER := SIZEOF(segments); n_v : INTEGER := SIZEOF(segments[1]); WHERE wr1: ([] = QUERY ( s <* segments | (n_v <> SIZEOF(s)) )); wr2: constraints_rectangular_composite_surface(SELF); END_ENTITY; -- rectangular_composite_surface ENTITY rectangular_trimmed_surface SUBTYPE OF (bounded_surface); basis_surface : surface; u1 : parameter_value; u2 : parameter_value; v1 : parameter_value; v2 : parameter_value; usense : BOOLEAN; vsense : BOOLEAN; WHERE wr1: (u1 <> u2); wr2: (v1 <> v2); wr3: ((('CONFIG_CONTROL_DESIGN.ELEMENTARY_SURFACE' IN TYPEOF( basis_surface)) AND (NOT ('CONFIG_CONTROL_DESIGN.PLANE' IN TYPEOF(basis_surface)))) OR ( 'CONFIG_CONTROL_DESIGN.SURFACE_OF_REVOLUTION' IN TYPEOF( basis_surface)) OR (usense = (u2 > u1))); wr4: (('CONFIG_CONTROL_DESIGN.SPHERICAL_SURFACE' IN TYPEOF( basis_surface)) OR ('CONFIG_CONTROL_DESIGN.TOROIDAL_SURFACE' IN TYPEOF(basis_surface)) OR (vsense = (v2 > v1))); END_ENTITY; -- rectangular_trimmed_surface ENTITY reparametrised_composite_curve_segment SUBTYPE OF (composite_curve_segment); param_length : parameter_value; WHERE wr1: (param_length > 0); END_ENTITY; -- reparametrised_composite_curve_segment ENTITY representation; name : label; items : SET [1:?] OF representation_item; context_of_items : representation_context; END_ENTITY; -- representation ENTITY representation_context; context_identifier : identifier; context_type : text; INVERSE representations_in_context : SET [1:?] OF representation FOR context_of_items; END_ENTITY; -- representation_context ENTITY representation_item; name : label; WHERE wr1: (SIZEOF(using_representations(SELF)) > 0); END_ENTITY; -- representation_item ENTITY representation_map; mapping_origin : representation_item; mapped_representation : representation; INVERSE map_usage : SET [1:?] OF mapped_item FOR mapping_source; WHERE wr1: item_in_context(SELF.mapping_origin,SELF.mapped_representation. context_of_items); END_ENTITY; -- representation_map ENTITY representation_relationship; name : label; description : text; rep_1 : representation; rep_2 : representation; END_ENTITY; -- representation_relationship ENTITY representation_relationship_with_transformation SUBTYPE OF (representation_relationship); transformation_operator : transformation; WHERE wr1: (SELF\representation_relationship.rep_1.context_of_items :<>: SELF\representation_relationship.rep_2.context_of_items); END_ENTITY; -- representation_relationship_with_transformation ENTITY seam_curve SUBTYPE OF (surface_curve); WHERE wr1: (SIZEOF(SELF\surface_curve.associated_geometry) = 2); wr2: (associated_surface(SELF\surface_curve.associated_geometry[1]) = associated_surface(SELF\surface_curve.associated_geometry[ 2])); wr3: ('CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(SELF\surface_curve. associated_geometry[1])); wr4: ('CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(SELF\surface_curve. associated_geometry[2])); END_ENTITY; -- seam_curve ENTITY security_classification; name : label; purpose : text; security_level : security_classification_level; END_ENTITY; -- security_classification ENTITY security_classification_assignment ABSTRACT SUPERTYPE; assigned_security_classification : security_classification; END_ENTITY; -- security_classification_assignment ENTITY security_classification_level; name : label; END_ENTITY; -- security_classification_level ENTITY serial_numbered_effectivity SUBTYPE OF (effectivity); effectivity_start_id : identifier; effectivity_end_id : OPTIONAL identifier; END_ENTITY; -- serial_numbered_effectivity ENTITY shape_aspect; name : label; description : text; of_shape : product_definition_shape; product_definitional : LOGICAL; END_ENTITY; -- shape_aspect ENTITY shape_aspect_relationship; name : label; description : text; relating_shape_aspect : shape_aspect; related_shape_aspect : shape_aspect; END_ENTITY; -- shape_aspect_relationship ENTITY shape_definition_representation SUBTYPE OF (property_definition_representation); WHERE wr1: (('CONFIG_CONTROL_DESIGN.SHAPE_DEFINITION' IN TYPEOF(SELF. definition.definition)) OR ( 'CONFIG_CONTROL_DESIGN.PRODUCT_DEFINITION_SHAPE' IN TYPEOF( SELF.definition))); wr2: ('CONFIG_CONTROL_DESIGN.SHAPE_REPRESENTATION' IN TYPEOF(SELF. used_representation)); END_ENTITY; -- shape_definition_representation ENTITY shape_representation SUBTYPE OF (representation); END_ENTITY; -- shape_representation ENTITY shape_representation_relationship SUBTYPE OF (representation_relationship); WHERE wr1: ('CONFIG_CONTROL_DESIGN.SHAPE_REPRESENTATION' IN (TYPEOF(SELF\ representation_relationship.rep_1) + TYPEOF(SELF\ representation_relationship.rep_2))); END_ENTITY; -- shape_representation_relationship ENTITY shell_based_surface_model SUBTYPE OF (geometric_representation_item); sbsm_boundary : SET [1:?] OF shell; WHERE wr1: constraints_geometry_shell_based_surface_model(SELF); END_ENTITY; -- shell_based_surface_model ENTITY shell_based_wireframe_model SUBTYPE OF (geometric_representation_item); sbwm_boundary : SET [1:?] OF shell; WHERE wr1: constraints_geometry_shell_based_wireframe_model(SELF); END_ENTITY; -- shell_based_wireframe_model ENTITY shell_based_wireframe_shape_representation SUBTYPE OF (shape_representation); WHERE wr1 : (SIZEOF(QUERY ( it <* SELF.items | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM', 'CONFIG_CONTROL_DESIGN.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1)) )) = 0); wr2 : (SIZEOF(QUERY ( it <* SELF.items | (SIZEOF([ 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL', 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM'] * TYPEOF(it)) = 1) )) >= 1); wr3 : (SIZEOF(QUERY ( sbwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( ws <* QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ( 'CONFIG_CONTROL_DESIGN.WIRE_SHELL' IN TYPEOF(sb)) ) | (NOT (SIZEOF(QUERY ( eloop <* QUERY ( wsb <* ws\wire_shell. wire_shell_extent | ('CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(wsb)) ) | (NOT (SIZEOF(QUERY ( el <* eloop\path. edge_list | (NOT ('CONFIG_CONTROL_DESIGN.EDGE_CURVE' IN TYPEOF(el.edge_element))) )) = 0)) )) = 0)) )) = 0)) )) = 0); wr4 : (SIZEOF(QUERY ( sbwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( ws <* QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ( 'CONFIG_CONTROL_DESIGN.WIRE_SHELL' IN TYPEOF(sb)) ) | (NOT (SIZEOF(QUERY ( eloop <* QUERY ( wsb <* ws\wire_shell. wire_shell_extent | ('CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(wsb)) ) | (NOT (SIZEOF(QUERY ( pline_el <* QUERY ( el <* eloop\path.edge_list | ( 'CONFIG_CONTROL_DESIGN.POLYLINE' IN TYPEOF(el.edge_element\ edge_curve.edge_geometry)) ) | (NOT (SIZEOF(pline_el. edge_element\edge_curve.edge_geometry\polyline.points) > 2)) )) = 0)) )) = 0)) )) = 0)) )) = 0); wr5 : (SIZEOF(QUERY ( sbwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( ws <* QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ( 'CONFIG_CONTROL_DESIGN.WIRE_SHELL' IN TYPEOF(sb)) ) | (NOT (SIZEOF(QUERY ( eloop <* QUERY ( wsb <* ws\wire_shell. wire_shell_extent | ('CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(wsb)) ) | (NOT (SIZEOF(QUERY ( el <* eloop\path. edge_list | (NOT valid_wireframe_edge_curve(el.edge_element \edge_curve.edge_geometry)) )) = 0)) )) = 0)) )) = 0)) )) = 0); wr6 : (SIZEOF(QUERY ( sbwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( ws <* QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ( 'CONFIG_CONTROL_DESIGN.WIRE_SHELL' IN TYPEOF(sb)) ) | (NOT (SIZEOF(QUERY ( eloop <* QUERY ( wsb <* ws\wire_shell. wire_shell_extent | ('CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(wsb)) ) | (NOT (SIZEOF(QUERY ( el <* eloop\path. edge_list | (NOT (('CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(el.edge_element.edge_start)) AND ( 'CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(el. edge_element.edge_end)))) )) = 0)) )) = 0)) )) = 0)) )) = 0); wr7 : (SIZEOF(QUERY ( sbwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( ws <* QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ( 'CONFIG_CONTROL_DESIGN.WIRE_SHELL' IN TYPEOF(sb)) ) | (NOT (SIZEOF(QUERY ( eloop <* QUERY ( wsb <* ws\wire_shell. wire_shell_extent | ('CONFIG_CONTROL_DESIGN.EDGE_LOOP' IN TYPEOF(wsb)) ) | (NOT (SIZEOF(QUERY ( el <* eloop\path. edge_list | (NOT (valid_wireframe_vertex_point(el. edge_element.edge_start\vertex_point.vertex_geometry) AND valid_wireframe_vertex_point(el.edge_element.edge_end\ vertex_point.vertex_geometry))) )) = 0)) )) = 0)) )) = 0)) )) = 0); wr8 : (SIZEOF(QUERY ( sbwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( ws <* QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ( 'CONFIG_CONTROL_DESIGN.WIRE_SHELL' IN TYPEOF(sb)) ) | (NOT (SIZEOF(QUERY ( vloop <* QUERY ( wsb <* ws\wire_shell. wire_shell_extent | ('CONFIG_CONTROL_DESIGN.VERTEX_LOOP' IN TYPEOF(wsb)) ) | (NOT ( 'CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(vloop\ vertex_loop.loop_vertex))) )) = 0)) )) = 0)) )) = 0); wr9 : (SIZEOF(QUERY ( sbwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( ws <* QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ( 'CONFIG_CONTROL_DESIGN.WIRE_SHELL' IN TYPEOF(sb)) ) | (NOT (SIZEOF(QUERY ( vloop <* QUERY ( wsb <* ws\wire_shell. wire_shell_extent | ('CONFIG_CONTROL_DESIGN.VERTEX_LOOP' IN TYPEOF(wsb)) ) | (NOT valid_wireframe_vertex_point(vloop\ vertex_loop.loop_vertex\vertex_point.vertex_geometry)) )) = 0)) )) = 0)) )) = 0); wr10: (SIZEOF(QUERY ( sbwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( vs <* QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ( 'CONFIG_CONTROL_DESIGN.VERTEX_SHELL' IN TYPEOF(sb)) ) | ( NOT ('CONFIG_CONTROL_DESIGN.VERTEX_POINT' IN TYPEOF(vs\ vertex_shell.vertex_shell_extent.loop_vertex))) )) = 0)) )) = 0); wr11: (SIZEOF(QUERY ( sbwm <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.SHELL_BASED_WIREFRAME_MODEL' IN TYPEOF(it)) ) | (NOT (SIZEOF(QUERY ( vs <* QUERY ( sb <* sbwm\shell_based_wireframe_model.sbwm_boundary | ( 'CONFIG_CONTROL_DESIGN.VERTEX_SHELL' IN TYPEOF(sb)) ) | ( NOT valid_wireframe_vertex_point(vs\vertex_shell. vertex_shell_extent.loop_vertex\vertex_point. vertex_geometry)) )) = 0)) )) = 0); wr12: (SIZEOF(QUERY ( mi <* QUERY ( it <* SELF.items | ( 'CONFIG_CONTROL_DESIGN.MAPPED_ITEM' IN TYPEOF(it)) ) | ( NOT (('CONFIG_CONTROL_DESIGN.' + 'SHELL_BASED_WIREFRAME_SHAPE_REPRESENTATION') IN TYPEOF(mi\ mapped_item.mapping_source.mapped_representation))) )) = 0); wr13: (SELF.context_of_items\geometric_representation_context. coordinate_space_dimension = 3); END_ENTITY; -- shell_based_wireframe_shape_representation ENTITY si_unit SUBTYPE OF (named_unit); prefix : OPTIONAL si_prefix; name : si_unit_name; DERIVE SELF\named_unit.dimensions : dimensional_exponents := dimensions_for_si_unit(SELF.name); END_ENTITY; -- si_unit ENTITY solid_angle_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1: ('CONFIG_CONTROL_DESIGN.SOLID_ANGLE_UNIT' IN TYPEOF(SELF\ measure_with_unit.unit_component)); END_ENTITY; -- solid_angle_measure_with_unit ENTITY solid_angle_unit SUBTYPE OF (named_unit); WHERE wr1: ((SELF\named_unit.dimensions.length_exponent = 0) AND (SELF\ named_unit.dimensions.mass_exponent = 0) AND (SELF\ named_unit.dimensions.time_exponent = 0) AND (SELF\ named_unit.dimensions.electric_current_exponent = 0) AND ( SELF\named_unit.dimensions. thermodynamic_temperature_exponent = 0) AND (SELF\named_unit .dimensions.amount_of_substance_exponent = 0) AND (SELF\ named_unit.dimensions.luminous_intensity_exponent = 0)); END_ENTITY; -- solid_angle_unit ENTITY solid_model SUPERTYPE OF (manifold_solid_brep) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- solid_model ENTITY specified_higher_usage_occurrence SUBTYPE OF (assembly_component_usage); upper_usage : assembly_component_usage; next_usage : next_assembly_usage_occurrence; UNIQUE ur1 : upper_usage, next_usage; WHERE wr1: (SELF :<>: upper_usage); wr2: (SELF\product_definition_relationship. relating_product_definition :=: upper_usage. relating_product_definition); wr3: (SELF\product_definition_relationship. related_product_definition :=: next_usage. related_product_definition); wr4: (upper_usage.related_product_definition :=: next_usage. relating_product_definition); wr5: (NOT ('CONFIG_CONTROL_DESIGN.PROMISSORY_USAGE_OCCURRENCE' IN TYPEOF(upper_usage))); END_ENTITY; -- specified_higher_usage_occurrence ENTITY spherical_surface SUBTYPE OF (elementary_surface); radius : positive_length_measure; END_ENTITY; -- spherical_surface ENTITY start_request SUBTYPE OF (action_request_assignment); items : SET [1:?] OF start_request_item; END_ENTITY; -- start_request ENTITY start_work SUBTYPE OF (action_assignment); items : SET [1:?] OF work_item; END_ENTITY; -- start_work ENTITY supplied_part_relationship SUBTYPE OF (product_definition_relationship); END_ENTITY; -- supplied_part_relationship ENTITY surface SUPERTYPE OF (ONEOF (elementary_surface,swept_surface,bounded_surface, offset_surface,surface_replica)) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- surface ENTITY surface_curve SUPERTYPE OF (ONEOF (intersection_curve,seam_curve) ANDOR bounded_surface_curve) SUBTYPE OF (curve); curve_3d : curve; associated_geometry : LIST [1:2] OF pcurve_or_surface; master_representation : preferred_surface_curve_representation; DERIVE basis_surface : SET [1:2] OF surface := get_basis_surface(SELF); WHERE wr1: (curve_3d.dim = 3); wr2: (('CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(associated_geometry[ 1])) OR (master_representation <> pcurve_s1)); wr3: (('CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(associated_geometry[ 2])) OR (master_representation <> pcurve_s2)); wr4: (NOT ('CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(curve_3d))); END_ENTITY; -- surface_curve ENTITY surface_of_linear_extrusion SUBTYPE OF (swept_surface); extrusion_axis : vector; END_ENTITY; -- surface_of_linear_extrusion ENTITY surface_of_revolution SUBTYPE OF (swept_surface); axis_position : axis1_placement; DERIVE axis_line : line := dummy_gri || curve() || line(axis_position. location,dummy_gri || vector(axis_position.z,1)); END_ENTITY; -- surface_of_revolution ENTITY surface_patch SUBTYPE OF (founded_item); parent_surface : bounded_surface; u_transition : transition_code; v_transition : transition_code; u_sense : BOOLEAN; v_sense : BOOLEAN; INVERSE using_surfaces : BAG [1:?] OF rectangular_composite_surface FOR segments; WHERE wr1: (NOT ('CONFIG_CONTROL_DESIGN.CURVE_BOUNDED_SURFACE' IN TYPEOF( parent_surface))); END_ENTITY; -- surface_patch ENTITY surface_replica SUBTYPE OF (surface); parent_surface : surface; transformation : cartesian_transformation_operator_3d; WHERE wr1: acyclic_surface_replica(SELF,parent_surface); END_ENTITY; -- surface_replica ENTITY swept_surface SUPERTYPE OF (ONEOF (surface_of_linear_extrusion, surface_of_revolution)) SUBTYPE OF (surface); swept_curve : curve; END_ENTITY; -- swept_surface ENTITY topological_representation_item SUPERTYPE OF (ONEOF (vertex,edge,face_bound,face,vertex_shell, wire_shell,connected_edge_set,connected_face_set,loop ANDOR path)) SUBTYPE OF (representation_item); END_ENTITY; -- topological_representation_item ENTITY toroidal_surface SUBTYPE OF (elementary_surface); major_radius : positive_length_measure; minor_radius : positive_length_measure; END_ENTITY; -- toroidal_surface ENTITY trimmed_curve SUBTYPE OF (bounded_curve); basis_curve : curve; trim_1 : SET [1:2] OF trimming_select; trim_2 : SET [1:2] OF trimming_select; sense_agreement : BOOLEAN; master_representation : trimming_preference; WHERE wr1: ((HIINDEX(trim_1) = 1) OR (TYPEOF(trim_1[1]) <> TYPEOF(trim_1[2]))); wr2: ((HIINDEX(trim_2) = 1) OR (TYPEOF(trim_2[1]) <> TYPEOF(trim_2[2]))); END_ENTITY; -- trimmed_curve ENTITY uncertainty_measure_with_unit SUBTYPE OF (measure_with_unit); name : label; description : text; WHERE wr1: valid_measure_value(SELF\measure_with_unit.value_component); END_ENTITY; -- uncertainty_measure_with_unit ENTITY uniform_curve SUBTYPE OF (b_spline_curve); END_ENTITY; -- uniform_curve ENTITY uniform_surface SUBTYPE OF (b_spline_surface); END_ENTITY; -- uniform_surface ENTITY vector SUBTYPE OF (geometric_representation_item); orientation : direction; magnitude : length_measure; WHERE wr1: (magnitude >= 0); END_ENTITY; -- vector ENTITY versioned_action_request; id : identifier; version : label; purpose : text; description : text; END_ENTITY; -- versioned_action_request ENTITY vertex SUBTYPE OF (topological_representation_item); END_ENTITY; -- vertex ENTITY vertex_loop SUBTYPE OF (loop); loop_vertex : vertex; END_ENTITY; -- vertex_loop ENTITY vertex_point SUBTYPE OF (vertex, geometric_representation_item); vertex_geometry : point; END_ENTITY; -- vertex_point ENTITY vertex_shell SUBTYPE OF (topological_representation_item); vertex_shell_extent : vertex_loop; END_ENTITY; -- vertex_shell ENTITY volume_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1: ('CONFIG_CONTROL_DESIGN.VOLUME_UNIT' IN TYPEOF(SELF\ measure_with_unit.unit_component)); END_ENTITY; -- volume_measure_with_unit ENTITY volume_unit SUBTYPE OF (named_unit); WHERE wr1: ((SELF\named_unit.dimensions.length_exponent = 3) AND (SELF\ named_unit.dimensions.mass_exponent = 0) AND (SELF\ named_unit.dimensions.time_exponent = 0) AND (SELF\ named_unit.dimensions.electric_current_exponent = 0) AND ( SELF\named_unit.dimensions. thermodynamic_temperature_exponent = 0) AND (SELF\named_unit .dimensions.amount_of_substance_exponent = 0) AND (SELF\ named_unit.dimensions.luminous_intensity_exponent = 0)); END_ENTITY; -- volume_unit ENTITY week_of_year_and_day_date SUBTYPE OF (date); week_component : week_in_year_number; day_component : OPTIONAL day_in_week_number; END_ENTITY; -- week_of_year_and_day_date ENTITY wire_shell SUBTYPE OF (topological_representation_item); wire_shell_extent : SET [1:?] OF loop; WHERE wr1: (NOT mixed_loop_type_set(wire_shell_extent)); END_ENTITY; -- wire_shell RULE acu_requires_security_classification FOR (assembly_component_usage, cc_design_security_classification); WHERE wr1: (SIZEOF(QUERY ( acu <* assembly_component_usage | (NOT (SIZEOF( QUERY ( ccdsc <* cc_design_security_classification | (acu IN ccdsc.items) )) = 1)) )) = 0); END_RULE; -- acu_requires_security_classification RULE application_context_requires_ap_definition FOR (application_context, application_protocol_definition); WHERE wr1: (SIZEOF(QUERY ( ac <* application_context | (NOT (SIZEOF( QUERY ( apd <* application_protocol_definition | ((ac :=: apd. application) AND (apd. application_interpreted_model_schema_name = 'config_control_design')) )) = 1)) )) = 0); END_RULE; -- application_context_requires_ap_definition RULE approval_date_time_constraints FOR (approval_date_time); WHERE wr1: (SIZEOF(QUERY ( adt <* approval_date_time | (NOT (SIZEOF(TYPEOF( adt.date_time) * ['CONFIG_CONTROL_DESIGN.DATE_AND_TIME']) = 1)) )) = 0); END_RULE; -- approval_date_time_constraints RULE approval_person_organization_constraints FOR ( approval_person_organization); WHERE wr1: (SIZEOF(QUERY ( apo <* approval_person_organization | (NOT ( SIZEOF(TYPEOF(apo.person_organization) * [ 'CONFIG_CONTROL_DESIGN.PERSON_AND_ORGANIZATION']) = 1)) )) = 0); END_RULE; -- approval_person_organization_constraints RULE approval_requires_approval_date_time FOR (approval, approval_date_time); WHERE wr1: (SIZEOF(QUERY ( app <* approval | (NOT (SIZEOF(QUERY ( adt <* approval_date_time | (app :=: adt.dated_approval) )) = 1)) )) = 0); END_RULE; -- approval_requires_approval_date_time RULE approval_requires_approval_person_organization FOR (approval, approval_person_organization); WHERE wr1: (SIZEOF(QUERY ( app <* approval | (NOT (SIZEOF(QUERY ( apo <* approval_person_organization | (app :=: apo. authorized_approval) )) >= 1)) )) = 0); END_RULE; -- approval_requires_approval_person_organization RULE approvals_are_assigned FOR (approval, approval_assignment); WHERE wr1: (SIZEOF(QUERY ( app <* approval | (NOT (SIZEOF(QUERY ( aa <* approval_assignment | (app :=: aa.assigned_approval) )) >= 1)) )) = 0); END_RULE; -- approvals_are_assigned RULE as_required_quantity FOR (measure_with_unit); WHERE wr1: (SIZEOF(QUERY ( m <* measure_with_unit | (( 'CONFIG_CONTROL_DESIGN.DESCRIPTIVE_MEASURE' IN TYPEOF(m. value_component)) AND (NOT (m.value_component = 'as_required'))) )) = 0); END_RULE; -- as_required_quantity RULE certification_requires_approval FOR (certification, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( cert <* certification | (NOT (SIZEOF( QUERY ( ccda <* cc_design_approval | (cert IN ccda.items) )) = 1)) )) = 0); END_RULE; -- certification_requires_approval RULE certification_requires_date_time FOR (certification, cc_design_date_and_time_assignment); WHERE wr1: (SIZEOF(QUERY ( cert <* certification | (NOT (SIZEOF( QUERY ( ccdta <* cc_design_date_and_time_assignment | (cert IN ccdta.items) )) = 1)) )) = 0); END_RULE; -- certification_requires_date_time RULE change_request_requires_approval FOR (change_request, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( cr <* change_request | (NOT (SIZEOF( QUERY ( ccda <* cc_design_approval | (cr IN ccda.items) )) = 1)) )) = 0); END_RULE; -- change_request_requires_approval RULE change_request_requires_date_time FOR (change_request, cc_design_date_and_time_assignment); WHERE wr1: (SIZEOF(QUERY ( cr <* change_request | (NOT (SIZEOF( QUERY ( ccdta <* cc_design_date_and_time_assignment | (cr IN ccdta.items) )) = 1)) )) = 0); END_RULE; -- change_request_requires_date_time RULE change_request_requires_person_organization FOR (change_request, cc_design_person_and_organization_assignment); WHERE wr1: (SIZEOF(QUERY ( cr <* change_request | (NOT (SIZEOF( QUERY ( ccpoa <* cc_design_person_and_organization_assignment | (cr IN ccpoa.items) )) >= 1)) )) = 0); END_RULE; -- change_request_requires_person_organization RULE change_requires_approval FOR (change, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( chg <* change | (NOT (SIZEOF(QUERY ( ccda <* cc_design_approval | (chg IN ccda.items) )) = 1)) )) = 0); END_RULE; -- change_requires_approval RULE change_requires_date_time FOR (change, cc_design_date_and_time_assignment); WHERE wr1: (SIZEOF(QUERY ( chg <* change | (NOT (SIZEOF(QUERY ( ccdta <* cc_design_date_and_time_assignment | ((chg IN ccdta.items) AND (ccdta.role.name = 'start_date')) )) = 1)) )) = 0); END_RULE; -- change_requires_date_time RULE compatible_dimension FOR (cartesian_point, direction, representation_context, geometric_representation_context); WHERE wr1: (SIZEOF(QUERY ( x <* cartesian_point | (SIZEOF(QUERY ( y <* geometric_representation_context | (item_in_context(x,y) AND ( HIINDEX(x.coordinates) <> y.coordinate_space_dimension)) )) > 0) )) = 0); wr2: (SIZEOF(QUERY ( x <* direction | (SIZEOF(QUERY ( y <* geometric_representation_context | (item_in_context(x,y) AND ( HIINDEX(x.direction_ratios) <> y.coordinate_space_dimension)) )) > 0) )) = 0); END_RULE; -- compatible_dimension RULE configuration_item_requires_approval FOR (configuration_item, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( ci <* configuration_item | (NOT (SIZEOF( QUERY ( ccda <* cc_design_approval | (ci IN ccda.items) )) = 1)) )) = 0); END_RULE; -- configuration_item_requires_approval RULE configuration_item_requires_person_organization FOR ( configuration_item, cc_design_person_and_organization_assignment); WHERE wr1: (SIZEOF(QUERY ( ci <* configuration_item | (NOT (SIZEOF( QUERY ( ccdpoa <* cc_design_person_and_organization_assignment | (ci IN ccdpoa.items) )) = 1)) )) = 0); END_RULE; -- configuration_item_requires_person_organization RULE contract_requires_approval FOR (contract, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( c <* contract | (NOT (SIZEOF(QUERY ( ccda <* cc_design_approval | (c IN ccda.items) )) = 1)) )) = 0); END_RULE; -- contract_requires_approval RULE contract_requires_person_organization FOR (contract, cc_design_person_and_organization_assignment); WHERE wr1: (SIZEOF(QUERY ( c <* contract | (NOT (SIZEOF(QUERY ( ccdpoa <* cc_design_person_and_organization_assignment | (c IN ccdpoa. items) )) = 1)) )) = 0); END_RULE; -- contract_requires_person_organization RULE coordinated_assembly_and_shape FOR (next_assembly_usage_occurrence); WHERE wr1: (SIZEOF(QUERY ( nauo <* next_assembly_usage_occurrence | (NOT assembly_shape_is_defined(nauo,'CONFIG_CONTROL_DESIGN')) )) = 0); END_RULE; -- coordinated_assembly_and_shape RULE dependent_instantiable_action_directive FOR (action_directive); WHERE wr1: (SIZEOF(QUERY ( ad <* action_directive | (NOT (SIZEOF(USEDIN(ad, '')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_action_directive RULE dependent_instantiable_approval_status FOR (approval_status); WHERE wr1: (SIZEOF(QUERY ( ast <* approval_status | (NOT (SIZEOF(USEDIN(ast, '')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_approval_status RULE dependent_instantiable_certification_type FOR (certification_type); WHERE wr1: (SIZEOF(QUERY ( ct <* certification_type | (NOT (SIZEOF(USEDIN(ct, '')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_certification_type RULE dependent_instantiable_contract_type FOR (contract_type); WHERE wr1: (SIZEOF(QUERY ( ct <* contract_type | (NOT (SIZEOF(USEDIN(ct,'')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_contract_type RULE dependent_instantiable_date FOR (date); WHERE wr1: (SIZEOF(QUERY ( dt <* date | (NOT (SIZEOF(USEDIN(dt,'')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_date RULE dependent_instantiable_date_time_role FOR (date_time_role); WHERE wr1: (SIZEOF(QUERY ( dtr <* date_time_role | (NOT (SIZEOF(USEDIN(dtr, '')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_date_time_role RULE dependent_instantiable_document_type FOR (document_type); WHERE wr1: (SIZEOF(QUERY ( dt <* document_type | (NOT (SIZEOF(USEDIN(dt,'')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_document_type RULE dependent_instantiable_named_unit FOR (named_unit); WHERE wr1: (SIZEOF(QUERY ( nu <* named_unit | (NOT (SIZEOF(USEDIN(nu,'')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_named_unit RULE dependent_instantiable_parametric_representation_context FOR ( parametric_representation_context); WHERE wr1: (SIZEOF(QUERY ( prc <* parametric_representation_context | (NOT ( SIZEOF(USEDIN(prc,'')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_parametric_representation_context RULE dependent_instantiable_person_and_organization_role FOR ( person_and_organization_role); WHERE wr1: (SIZEOF(QUERY ( poar <* person_and_organization_role | (NOT ( SIZEOF(USEDIN(poar,'')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_person_and_organization_role RULE dependent_instantiable_representation_item FOR (representation_item); WHERE wr1: (SIZEOF(QUERY ( ri <* representation_item | (NOT (SIZEOF(USEDIN( ri,'')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_representation_item RULE dependent_instantiable_security_classification_level FOR ( security_classification_level); WHERE wr1: (SIZEOF(QUERY ( scl <* security_classification_level | (NOT ( SIZEOF(USEDIN(scl,'')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_security_classification_level RULE dependent_instantiable_shape_representation FOR ( shape_representation); WHERE wr1: (SIZEOF(QUERY ( sr <* shape_representation | (NOT (SIZEOF(USEDIN( sr,'')) >= 1)) )) = 0); END_RULE; -- dependent_instantiable_shape_representation RULE design_context_for_property FOR (product_definition); WHERE wr1: (SIZEOF(QUERY ( pd <* product_definition | ((SIZEOF(USEDIN(pd, 'CONFIG_CONTROL_DESIGN.' + 'PROPERTY_DEFINITION.DEFINITION') + QUERY ( pdr <* USEDIN(pd,'CONFIG_CONTROL_DESIGN.' + 'PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION') | (SIZEOF(USEDIN(pdr, 'CONFIG_CONTROL_DESIGN.PROPERTY_DEFINITION.' + 'DEFINITION')) >= 1) )) >= 1) AND (NOT ( 'CONFIG_CONTROL_DESIGN.DESIGN_CONTEXT' IN TYPEOF(pd. frame_of_reference)))) )) = 0); END_RULE; -- design_context_for_property RULE document_to_product_definition FOR ( cc_design_specification_reference); WHERE wr1: (SIZEOF(QUERY ( sp <* cc_design_specification_reference | (NOT (( (('CONFIG_CONTROL_DESIGN.DOCUMENT_RELATIONSHIP.' + 'RELATING_DOCUMENT') IN ROLESOF(sp\document_reference. assigned_document)) AND (SIZEOF(QUERY ( it <* sp.items | (NOT ('CONFIG_CONTROL_DESIGN.PRODUCT_DEFINITION' IN TYPEOF(it))) )) = 0)) OR (NOT (('CONFIG_CONTROL_DESIGN.DOCUMENT_RELATIONSHIP.' + 'RELATING_DOCUMENT') IN ROLESOF(sp\document_reference. assigned_document))))) )) = 0); END_RULE; -- document_to_product_definition RULE effectivity_requires_approval FOR (effectivity, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( eff <* effectivity | (NOT (SIZEOF( QUERY ( ccda <* cc_design_approval | (eff IN ccda.items) )) = 1)) )) = 0); END_RULE; -- effectivity_requires_approval RULE geometric_representation_item_3d FOR (geometric_representation_item); WHERE wr1: (SIZEOF(QUERY ( gri <* geometric_representation_item | (NOT (( dimension_of(gri) = 3) OR (SIZEOF(QUERY ( ur <* using_representations(gri) | ( 'CONFIG_CONTROL_DESIGN.DEFINITIONAL_REPRESENTATION' IN TYPEOF( ur)) )) > 0))) )) = 0); END_RULE; -- geometric_representation_item_3d RULE global_unit_assignment FOR (global_unit_assigned_context); WHERE wr1: (SIZEOF(QUERY ( guac <* global_unit_assigned_context | (NOT ( SIZEOF(guac.units) = 3)) )) = 0); wr2: (SIZEOF(QUERY ( guac <* global_unit_assigned_context | (NOT (( SIZEOF(QUERY ( u <* guac.units | ( 'CONFIG_CONTROL_DESIGN.LENGTH_UNIT' IN TYPEOF(u)) )) = 1) AND (SIZEOF(QUERY ( u <* guac.units | ( 'CONFIG_CONTROL_DESIGN.PLANE_ANGLE_UNIT' IN TYPEOF(u)) )) = 1) AND (SIZEOF(QUERY ( u <* guac.units | ( 'CONFIG_CONTROL_DESIGN.SOLID_ANGLE_UNIT' IN TYPEOF(u)) )) = 1))) )) = 0); END_RULE; -- global_unit_assignment RULE no_shape_for_make_from FOR (design_make_from_relationship); WHERE wr1: (SIZEOF(QUERY ( dmfr <* design_make_from_relationship | (NOT ( SIZEOF(QUERY ( pd <* USEDIN(dmfr,'CONFIG_CONTROL_DESIGN.' + 'PROPERTY_DEFINITION.DEFINITION') | ( 'CONFIG_CONTROL_DESIGN.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) )) = 0)) )) = 0); END_RULE; -- no_shape_for_make_from RULE no_shape_for_supplied_part FOR (supplied_part_relationship); WHERE wr1: (SIZEOF(QUERY ( spr <* supplied_part_relationship | (NOT (SIZEOF( QUERY ( pd <* USEDIN(spr,'CONFIG_CONTROL_DESIGN.' + 'PROPERTY_DEFINITION.DEFINITION') | ( 'CONFIG_CONTROL_DESIGN.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) )) = 0)) )) = 0); END_RULE; -- no_shape_for_supplied_part RULE product_concept_requires_configuration_item FOR (product_concept, configuration_item); WHERE wr1: (SIZEOF(QUERY ( pc <* product_concept | (NOT (SIZEOF( QUERY ( ci <* configuration_item | (pc :=: ci.item_concept) )) >= 1)) )) = 0); END_RULE; -- product_concept_requires_configuration_item RULE product_definition_requires_approval FOR (product_definition, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( pd <* product_definition | (NOT (SIZEOF( QUERY ( ccda <* cc_design_approval | (pd IN ccda.items) )) = 1)) )) = 0); END_RULE; -- product_definition_requires_approval RULE product_definition_requires_date_time FOR (product_definition, cc_design_date_and_time_assignment); WHERE wr1: (SIZEOF(QUERY ( pd <* product_definition | (NOT (SIZEOF( QUERY ( ccdta <* cc_design_date_and_time_assignment | (pd IN ccdta.items) )) = 1)) )) = 0); END_RULE; -- product_definition_requires_date_time RULE product_definition_requires_person_organization FOR ( product_definition, cc_design_person_and_organization_assignment); WHERE wr1: (SIZEOF(QUERY ( pd <* product_definition | (NOT (SIZEOF( QUERY ( ccdpoa <* cc_design_person_and_organization_assignment | (pd IN ccdpoa.items) )) = 1)) )) = 0); END_RULE; -- product_definition_requires_person_organization RULE product_requires_person_organization FOR (product, cc_design_person_and_organization_assignment); WHERE wr1: (SIZEOF(QUERY ( prod <* product | (NOT (SIZEOF(QUERY ( ccdpoa <* cc_design_person_and_organization_assignment | (prod IN ccdpoa .items) )) = 1)) )) = 0); END_RULE; -- product_requires_person_organization RULE product_requires_product_category FOR (product, product_related_product_category); WHERE wr1: (SIZEOF(QUERY ( prod <* product | (NOT (SIZEOF(QUERY ( prpc <* product_related_product_category | ((prod IN prpc.products) AND (prpc.name IN ['assembly','inseparable_assembly','detail', 'customer_furnished_equipment'])) )) = 1)) )) = 0); END_RULE; -- product_requires_product_category RULE product_requires_version FOR (product, product_definition_formation); WHERE wr1: (SIZEOF(QUERY ( prod <* product | (NOT (SIZEOF(QUERY ( pdf <* product_definition_formation | (prod :=: pdf.of_product) )) >= 1)) )) = 0); END_RULE; -- product_requires_version RULE product_version_requires_approval FOR (product_definition_formation, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( pdf <* product_definition_formation | (NOT ( SIZEOF(QUERY ( ccda <* cc_design_approval | (pdf IN ccda.items) )) = 1)) )) = 0); END_RULE; -- product_version_requires_approval RULE product_version_requires_person_organization FOR ( product_definition_formation, cc_design_person_and_organization_assignment); WHERE wr1: (SIZEOF(QUERY ( pdf <* product_definition_formation | (NOT ( SIZEOF(QUERY ( ccdpoa <* cc_design_person_and_organization_assignment | ((pdf IN ccdpoa .items) AND (ccdpoa.role.name = 'creator')) )) = 1)) )) = 0); wr2: (SIZEOF(QUERY ( pdf <* product_definition_formation | (NOT ( SIZEOF(QUERY ( ccdpoa <* cc_design_person_and_organization_assignment | ((pdf IN ccdpoa .items) AND (ccdpoa.role.name IN ['design_supplier', 'part_supplier'])) )) >= 1)) )) = 0); END_RULE; -- product_version_requires_person_organization RULE product_version_requires_security_classification FOR ( product_definition_formation, cc_design_security_classification); WHERE wr1: (SIZEOF(QUERY ( pdf <* product_definition_formation | (NOT ( SIZEOF(QUERY ( ccdsc <* cc_design_security_classification | ( pdf IN ccdsc.items) )) = 1)) )) = 0); END_RULE; -- product_version_requires_security_classification RULE restrict_action_request_status FOR (action_request_status); WHERE wr1: (SIZEOF(QUERY ( ars <* action_request_status | (NOT (ars.status IN ['proposed','in_work','issued','hold'])) )) = 0); END_RULE; -- restrict_action_request_status RULE restrict_approval_status FOR (approval_status); WHERE wr1: (SIZEOF(QUERY ( ast <* approval_status | (NOT (ast.name IN [ 'approved','not_yet_approved','disapproved','withdrawn'])) )) = 0); END_RULE; -- restrict_approval_status RULE restrict_certification_type FOR (certification_type); WHERE wr1: (SIZEOF(QUERY ( ct <* certification_type | (NOT (ct.description IN ['design_supplier','part_supplier'])) )) = 0); END_RULE; -- restrict_certification_type RULE restrict_contract_type FOR (contract_type); WHERE wr1: (SIZEOF(QUERY ( ct <* contract_type | (NOT (ct.description IN [ 'fixed_price','cost_plus'])) )) = 0); END_RULE; -- restrict_contract_type RULE restrict_date_time_role FOR (date_time_role); WHERE wr1: (SIZEOF(QUERY ( dtr <* date_time_role | (NOT (dtr.name IN [ 'creation_date','request_date','release_date','start_date', 'contract_date','certification_date','sign_off_date', 'classification_date','declassification_date'])) )) = 0); END_RULE; -- restrict_date_time_role RULE restrict_document_type FOR (document_type); WHERE wr1: (SIZEOF(QUERY ( dt <* document_type | (NOT (dt.product_data_type IN ['material_specification','process_specification', 'design_specification','surface_finish_specification', 'cad_filename','drawing'])) )) = 0); END_RULE; -- restrict_document_type RULE restrict_person_organization_role FOR (person_and_organization_role); WHERE wr1: (SIZEOF(QUERY ( por <* person_and_organization_role | (NOT (por. name IN ['request_recipient','initiator','part_supplier', 'design_supplier','configuration_manager','contractor', 'classification_officer','creator','design_owner'])) )) = 0); END_RULE; -- restrict_person_organization_role RULE restrict_product_category_value FOR ( product_related_product_category); WHERE wr1: (SIZEOF(QUERY ( prpc <* product_related_product_category | (NOT ( prpc.name IN ['assembly','detail', 'customer_furnished_equipment','inseparable_assembly','cast', 'coined','drawn','extruded','forged','formed','machined', 'molded','rolled','sheared'])) )) = 0); END_RULE; -- restrict_product_category_value RULE restrict_security_classification_level FOR ( security_classification_level); WHERE wr1: (SIZEOF(QUERY ( scl <* security_classification_level | (NOT (scl. name IN ['unclassified','classified','proprietary', 'confidential','secret','top_secret'])) )) = 0); END_RULE; -- restrict_security_classification_level RULE security_classification_optional_date_time FOR ( security_classification, cc_design_date_and_time_assignment); WHERE wr1: (SIZEOF(QUERY ( sc <* security_classification | (NOT (SIZEOF( QUERY ( ccdta <* cc_design_date_and_time_assignment | ((sc IN ccdta.items) AND ('declassification_date' = ccdta.role.name)) )) <= 1)) )) = 0); END_RULE; -- security_classification_optional_date_time RULE security_classification_requires_approval FOR ( security_classification, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( sc <* security_classification | (NOT (SIZEOF( QUERY ( ccda <* cc_design_approval | (sc IN ccda.items) )) = 1)) )) = 0); END_RULE; -- security_classification_requires_approval RULE security_classification_requires_date_time FOR ( security_classification, cc_design_date_and_time_assignment); WHERE wr1: (SIZEOF(QUERY ( sc <* security_classification | (NOT (SIZEOF( QUERY ( ccdta <* cc_design_date_and_time_assignment | ((sc IN ccdta.items) AND ('classification_date' = ccdta.role.name)) )) = 1)) )) = 0); END_RULE; -- security_classification_requires_date_time RULE security_classification_requires_person_organization FOR ( security_classification, cc_design_person_and_organization_assignment); WHERE wr1: (SIZEOF(QUERY ( sc <* security_classification | (NOT (SIZEOF( QUERY ( ccdpoa <* cc_design_person_and_organization_assignment | (sc IN ccdpoa.items) )) = 1)) )) = 0); END_RULE; -- security_classification_requires_person_organization RULE start_request_requires_approval FOR (start_request, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( sr <* start_request | (NOT (SIZEOF( QUERY ( ccda <* cc_design_approval | (sr IN ccda.items) )) = 1)) )) = 0); END_RULE; -- start_request_requires_approval RULE start_request_requires_date_time FOR (start_request, cc_design_date_and_time_assignment); WHERE wr1: (SIZEOF(QUERY ( sr <* start_request | (NOT (SIZEOF( QUERY ( ccdta <* cc_design_date_and_time_assignment | (sr IN ccdta.items) )) = 1)) )) = 0); END_RULE; -- start_request_requires_date_time RULE start_request_requires_person_organization FOR (start_request, cc_design_person_and_organization_assignment); WHERE wr1: (SIZEOF(QUERY ( sr <* start_request | (NOT (SIZEOF( QUERY ( ccdpoa <* cc_design_person_and_organization_assignment | (sr IN ccdpoa.items) )) >= 1)) )) = 0); END_RULE; -- start_request_requires_person_organization RULE start_work_requires_approval FOR (start_work, cc_design_approval); WHERE wr1: (SIZEOF(QUERY ( sw <* start_work | (NOT (SIZEOF(QUERY ( ccda <* cc_design_approval | (sw IN ccda.items) )) = 1)) )) = 0); END_RULE; -- start_work_requires_approval RULE start_work_requires_date_time FOR (start_work, cc_design_date_and_time_assignment); WHERE wr1: (SIZEOF(QUERY ( sw <* start_work | (NOT (SIZEOF(QUERY ( ccdta <* cc_design_date_and_time_assignment | ((sw IN ccdta.items) AND (ccdta.role.name = 'start_date')) )) = 1)) )) = 0); END_RULE; -- start_work_requires_date_time RULE subtype_mandatory_action FOR (action); WHERE wr1: (SIZEOF(QUERY ( act <* action | (NOT ( 'CONFIG_CONTROL_DESIGN.DIRECTED_ACTION' IN TYPEOF(act))) )) = 0); END_RULE; -- subtype_mandatory_action RULE subtype_mandatory_effectivity FOR (effectivity); WHERE wr1: (SIZEOF(QUERY ( eff <* effectivity | (NOT ((SIZEOF([ 'CONFIG_CONTROL_DESIGN.SERIAL_NUMBERED_EFFECTIVITY', 'CONFIG_CONTROL_DESIGN.LOT_EFFECTIVITY', 'CONFIG_CONTROL_DESIGN.DATED_EFFECTIVITY'] * TYPEOF(eff)) = 1) AND ('CONFIG_CONTROL_DESIGN.CONFIGURATION_EFFECTIVITY' IN TYPEOF(eff)))) )) = 0); END_RULE; -- subtype_mandatory_effectivity RULE subtype_mandatory_product_context FOR (product_context); WHERE wr1: (SIZEOF(QUERY ( pc <* product_context | (NOT ( 'CONFIG_CONTROL_DESIGN.MECHANICAL_CONTEXT' IN TYPEOF(pc))) )) = 0); END_RULE; -- subtype_mandatory_product_context RULE subtype_mandatory_product_definition_formation FOR ( product_definition_formation); WHERE wr1: (SIZEOF(QUERY ( pdf <* product_definition_formation | (NOT (( 'CONFIG_CONTROL_DESIGN.' + 'PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE') IN TYPEOF(pdf))) )) = 0); END_RULE; -- subtype_mandatory_product_definition_formation RULE subtype_mandatory_product_definition_usage FOR ( product_definition_usage); WHERE wr1: (SIZEOF(QUERY ( pdu <* product_definition_usage | (NOT (( 'CONFIG_CONTROL_DESIGN.' + 'ASSEMBLY_COMPONENT_USAGE') IN TYPEOF(pdu))) )) = 0); END_RULE; -- subtype_mandatory_product_definition_usage RULE subtype_mandatory_representation FOR (representation); WHERE wr1: (SIZEOF(QUERY ( rep <* representation | (NOT ( 'CONFIG_CONTROL_DESIGN.SHAPE_REPRESENTATION' IN TYPEOF(rep))) )) = 0); END_RULE; -- subtype_mandatory_representation RULE subtype_mandatory_representation_context FOR ( representation_context); WHERE wr1: (SIZEOF(QUERY ( rep_cntxt <* representation_context | (NOT ( 'CONFIG_CONTROL_DESIGN.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(rep_cntxt))) )) = 0); END_RULE; -- subtype_mandatory_representation_context RULE subtype_mandatory_shape_representation FOR (shape_representation); WHERE wr1: (SIZEOF(QUERY ( sr <* shape_representation | (NOT ((SIZEOF([ 'CONFIG_CONTROL_DESIGN.' + 'ADVANCED_BREP_SHAPE_REPRESENTATION', 'CONFIG_CONTROL_DESIGN.FACETED_BREP_SHAPE_REPRESENTATION', 'CONFIG_CONTROL_DESIGN.MANIFOLD_SURFACE_SHAPE_REPRESENTATION', 'CONFIG_CONTROL_DESIGN.' + 'EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION', 'CONFIG_CONTROL_DESIGN.' + 'SHELL_BASED_WIREFRAME_SHAPE_REPRESENTATION', 'CONFIG_CONTROL_DESIGN.' + 'GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION', 'CONFIG_CONTROL_DESIGN.' + 'GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION'] * TYPEOF(sr)) = 1) OR (SIZEOF(QUERY ( it <* sr\representation. items | (NOT ('CONFIG_CONTROL_DESIGN.AXIS2_PLACEMENT_3D' IN TYPEOF(it))) )) = 0) OR (SIZEOF(QUERY ( sdr <* QUERY ( pdr <* USEDIN(sr, 'CONFIG_CONTROL_DESIGN.PROPERTY_DEFINITION_REPRESENTATION.' + 'USED_REPRESENTATION') | ( 'CONFIG_CONTROL_DESIGN.SHAPE_DEFINITION_REPRESENTATION' IN TYPEOF(pdr)) ) | (NOT (SIZEOF([ 'CONFIG_CONTROL_DESIGN.SHAPE_ASPECT', 'CONFIG_CONTROL_DESIGN.SHAPE_ASPECT_RELATIONSHIP'] * TYPEOF( sdr.definition.definition)) = 1)) )) = 0))) )) = 0); END_RULE; -- subtype_mandatory_shape_representation RULE unique_version_change_order_rule FOR (change); WHERE wr1: (SIZEOF(QUERY ( c <* change | (NOT unique_version_change_order(c. assigned_action)) )) = 0); END_RULE; -- unique_version_change_order_rule RULE versioned_action_request_requires_solution FOR ( versioned_action_request, action_request_solution); WHERE wr1: (SIZEOF(QUERY ( ar <* versioned_action_request | (NOT (SIZEOF( QUERY ( ars <* action_request_solution | (ar :=: ars.request) )) >= 1)) )) = 0); END_RULE; -- versioned_action_request_requires_solution RULE versioned_action_request_requires_status FOR ( versioned_action_request, action_request_status); WHERE wr1: (SIZEOF(QUERY ( ar <* versioned_action_request | (NOT (SIZEOF( QUERY ( ars <* action_request_status | (ar :=: ars. assigned_request) )) = 1)) )) = 0); END_RULE; -- versioned_action_request_requires_status FUNCTION acyclic_curve_replica(rep: curve_replica; parent: curve): BOOLEAN; IF NOT ('CONFIG_CONTROL_DESIGN.CURVE_REPLICA' IN TYPEOF(parent)) THEN RETURN(TRUE); END_IF; IF parent :=: rep THEN RETURN(FALSE); ELSE RETURN(acyclic_curve_replica(rep,parent\curve_replica.parent_curve)); END_IF; END_FUNCTION; -- acyclic_curve_replica FUNCTION acyclic_mapped_representation(parent_set: SET OF representation; children_set: SET OF representation_item): BOOLEAN; LOCAL i : INTEGER; x : SET OF representation_item; y : SET OF representation_item; END_LOCAL; x := QUERY ( z <* children_set | ('CONFIG_CONTROL_DESIGN.MAPPED_ITEM' IN TYPEOF(z)) ); IF SIZEOF(x) > 0 THEN REPEAT i := 1 TO HIINDEX(x) BY 1; IF x[i]\mapped_item.mapping_source.mapped_representation IN parent_set THEN RETURN(FALSE); END_IF; IF NOT acyclic_mapped_representation(parent_set + x[i]\mapped_item .mapping_source.mapped_representation,x[i]\mapped_item. mapping_source.mapped_representation.items) THEN RETURN(FALSE); END_IF; END_REPEAT; END_IF; x := children_set - x; IF SIZEOF(x) > 0 THEN REPEAT i := 1 TO HIINDEX(x) BY 1; y := QUERY ( z <* bag_to_set(USEDIN(x[i],'')) | ( 'CONFIG_CONTROL_DESIGN.REPRESENTATION_ITEM' IN TYPEOF(z)) ); IF NOT acyclic_mapped_representation(parent_set,y) THEN RETURN(FALSE); END_IF; END_REPEAT; END_IF; RETURN(TRUE); END_FUNCTION; -- acyclic_mapped_representation FUNCTION acyclic_point_replica(rep: point_replica; parent: point): BOOLEAN; IF NOT ('CONFIG_CONTROL_DESIGN.POINT_REPLICA' IN TYPEOF(parent)) THEN RETURN(TRUE); END_IF; IF parent :=: rep THEN RETURN(FALSE); ELSE RETURN(acyclic_point_replica(rep,parent\point_replica.parent_pt)); END_IF; END_FUNCTION; -- acyclic_point_replica FUNCTION acyclic_product_category_relationship( relation: product_category_relationship; children: SET OF product_category): LOGICAL; LOCAL i : INTEGER; x : SET OF product_category_relationship; local_children : SET OF product_category; END_LOCAL; REPEAT i := 1 TO HIINDEX(children) BY 1; IF relation.category :=: children[i] THEN RETURN(FALSE); END_IF; END_REPEAT; x := bag_to_set(USEDIN(relation.category,'CONFIG_CONTROL_DESIGN.' + 'PRODUCT_CATEGORY_RELATIONSHIP.SUB_CATEGORY')); local_children := children + relation.category; IF SIZEOF(x) > 0 THEN REPEAT i := 1 TO HIINDEX(x) BY 1; IF NOT acyclic_product_category_relationship(x[i],local_children) THEN RETURN(FALSE); END_IF; END_REPEAT; END_IF; RETURN(TRUE); END_FUNCTION; -- acyclic_product_category_relationship FUNCTION acyclic_product_definition_relationship( relation: product_definition_relationship; relatives: SET [1:?] OF product_definition; specific_relation: STRING): LOGICAL; LOCAL x : SET OF product_definition_relationship; END_LOCAL; IF relation.relating_product_definition IN relatives THEN RETURN(FALSE); END_IF; x := QUERY ( pd <* bag_to_set(USEDIN(relation. relating_product_definition,'CONFIG_CONTROL_DESIGN.' + 'PRODUCT_DEFINITION_RELATIONSHIP.' + 'RELATED_PRODUCT_DEFINITION')) | (specific_relation IN TYPEOF(pd)) ); REPEAT i := 1 TO HIINDEX(x) BY 1; IF NOT acyclic_product_definition_relationship(x[i],relatives + relation.relating_product_definition,specific_relation) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE); END_FUNCTION; -- acyclic_product_definition_relationship FUNCTION acyclic_surface_replica(rep: surface_replica; parent: surface): BOOLEAN; IF NOT ('CONFIG_CONTROL_DESIGN.SURFACE_REPLICA' IN TYPEOF(parent)) THEN RETURN(TRUE); END_IF; IF parent :=: rep THEN RETURN(FALSE); ELSE RETURN(acyclic_surface_replica(rep,parent\surface_replica. parent_surface)); END_IF; END_FUNCTION; -- acyclic_surface_replica FUNCTION assembly_shape_is_defined(assy: next_assembly_usage_occurrence; schma: STRING): BOOLEAN; LOCAL srr_set : SET OF shape_representation_relationship := []; i : INTEGER; j : INTEGER; sdr_set : SET OF shape_definition_representation := []; pr1_set : SET OF property_definition := []; pdrel_set : SET OF product_definition_relationship := []; pr2_set : SET OF property_definition := []; END_LOCAL; pr1_set := bag_to_set(USEDIN(assy.related_product_definition,schma + '.PROPERTY_DEFINITION.DEFINITION')); REPEAT i := 1 TO HIINDEX(pr1_set) BY 1; sdr_set := sdr_set + QUERY ( pdr <* USEDIN(pr1_set[i],schma + '.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ((schma + '.SHAPE_DEFINITION_REPRESENTATION') IN TYPEOF(pdr)) ); END_REPEAT; pdrel_set := bag_to_set(USEDIN(assy.related_product_definition,schma + '.PRODUCT_DEFINITION_RELATIONSHIP.' + 'RELATED_PRODUCT_DEFINITION')); REPEAT j := 1 TO HIINDEX(pdrel_set) BY 1; pr2_set := pr2_set + USEDIN(pdrel_set[j],schma + '.PROPERTY_DEFINITION.DEFINITION'); END_REPEAT; REPEAT i := 1 TO HIINDEX(pr2_set) BY 1; sdr_set := sdr_set + QUERY ( pdr <* USEDIN(pr2_set[i],schma + '.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ((schma + '.SHAPE_DEFINITION_REPRESENTATION') IN TYPEOF(pdr)) ); END_REPEAT; IF SIZEOF(sdr_set) > 0 THEN REPEAT i := 1 TO HIINDEX(sdr_set) BY 1; srr_set := QUERY ( rr <* bag_to_set(USEDIN(sdr_set[i]\ property_definition_representation.used_representation,schma + '.REPRESENTATION_RELATIONSHIP.REP_2')) | ((schma + '.SHAPE_REPRESENTATION_RELATIONSHIP') IN TYPEOF(rr)) ); IF SIZEOF(srr_set) > 0 THEN REPEAT j := 1 TO HIINDEX(srr_set) BY 1; IF SIZEOF(QUERY ( pdr <* bag_to_set(USEDIN(srr_set[j]\ representation_relationship.rep_1,schma + '.PROPERTY_DEFINITION_REPRESENTATION.USED_REPRESENTATION')) | ((schma + '.SHAPE_DEFINITION_REPRESENTATION') IN TYPEOF( pdr)) ) * QUERY ( pdr <* bag_to_set(USEDIN(assy. relating_product_definition,schma + '.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) | (( schma + '.SHAPE_DEFINITION_REPRESENTATION') IN TYPEOF(pdr)) )) >= 1 THEN IF SIZEOF(QUERY ( cdsr <* USEDIN(srr_set[j],schma + '.CONTEXT_DEPENDENT_SHAPE_REPRESENTATION.' + 'REPRESENTATION_RELATION') | (NOT (cdsr\ context_dependent_shape_representation. represented_product_relation\property_definition. definition :=: assy)) )) > 0 THEN RETURN(FALSE); END_IF; END_IF; END_REPEAT; END_IF; END_REPEAT; END_IF; RETURN(TRUE); END_FUNCTION; -- assembly_shape_is_defined FUNCTION associated_surface(arg: pcurve_or_surface): surface; LOCAL surf : surface; END_LOCAL; IF 'CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(arg) THEN surf := arg.basis_surface; ELSE surf := arg; END_IF; RETURN(surf); END_FUNCTION; -- associated_surface FUNCTION bag_to_set(the_bag: BAG OF GENERIC:intype ): SET OF GENERIC:intype; LOCAL i : INTEGER; the_set : SET OF GENERIC:intype := []; END_LOCAL; IF SIZEOF(the_bag) > 0 THEN REPEAT i := 1 TO HIINDEX(the_bag) BY 1; the_set := the_set + the_bag[i]; END_REPEAT; END_IF; RETURN(the_set); END_FUNCTION; -- bag_to_set FUNCTION base_axis(dim: INTEGER; axis1, axis2, axis3: direction ): LIST [2:3] OF direction; LOCAL u : LIST [2:3] OF direction; d1 : direction; d2 : direction; factor : REAL; END_LOCAL; IF dim = 3 THEN d1 := NVL(normalise(axis3),dummy_gri || direction([0,0,1])); d2 := first_proj_axis(d1,axis1); u := [d2,second_proj_axis(d1,d2,axis2),d1]; ELSE IF EXISTS(axis1) THEN d1 := normalise(axis1); u := [d1,orthogonal_complement(d1)]; IF EXISTS(axis2) THEN factor := dot_product(axis2,u[2]); IF factor < 0 THEN u[2].direction_ratios[1] := -u[2].direction_ratios[1]; u[2].direction_ratios[2] := -u[2].direction_ratios[2]; END_IF; END_IF; ELSE IF EXISTS(axis2) THEN d1 := normalise(axis2); u := [orthogonal_complement(d1),d1]; u[1].direction_ratios[1] := -u[1].direction_ratios[1]; u[1].direction_ratios[2] := -u[1].direction_ratios[2]; ELSE u := [dummy_gri || direction([1,0]),dummy_gri || direction([0,1])]; END_IF; END_IF; END_IF; RETURN(u); END_FUNCTION; -- base_axis FUNCTION boolean_choose(b: BOOLEAN; choice1, choice2: GENERIC:item): GENERIC:item; IF b THEN RETURN(choice1); ELSE RETURN(choice2); END_IF; END_FUNCTION; -- boolean_choose FUNCTION build_2axes(ref_direction: direction): LIST [2:2] OF direction; LOCAL d : direction := NVL(normalise(ref_direction),dummy_gri || direction([1,0])); END_LOCAL; RETURN([d,orthogonal_complement(d)]); END_FUNCTION; -- build_2axes FUNCTION build_axes(axis, ref_direction: direction ): LIST [3:3] OF direction; LOCAL d1 : direction; d2 : direction; END_LOCAL; d1 := NVL(normalise(axis),dummy_gri || direction([0,0,1])); d2 := first_proj_axis(d1,ref_direction); RETURN([d2,normalise(cross_product(d1,d2)).orientation,d1]); END_FUNCTION; -- build_axes FUNCTION cc_design_date_time_correlation (e : cc_design_date_and_time_assignment ) : BOOLEAN; LOCAL dt_role : STRING; END_LOCAL; dt_role := e\date_and_time_assignment.role.name; CASE dt_role OF 'creation_date' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.' + 'PRODUCT_DEFINITION' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'request_date' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | SIZEOF ( ['CONFIG_CONTROL_DESIGN.CHANGE_REQUEST', 'CONFIG_CONTROL_DESIGN.START_REQUEST'] * TYPEOF (x)) = 1)) THEN RETURN(FALSE); END_IF; 'release_date' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | SIZEOF ( ['CONFIG_CONTROL_DESIGN.CHANGE', 'CONFIG_CONTROL_DESIGN.START_WORK'] * TYPEOF (x)) = 1)) THEN RETURN(FALSE); END_IF; 'start_date' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | SIZEOF ( ['CONFIG_CONTROL_DESIGN.CHANGE', 'CONFIG_CONTROL_DESIGN.START_WORK'] * TYPEOF (x)) = 1)) THEN RETURN(FALSE); END_IF; 'sign_off_date' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.' + 'APPROVAL_PERSON_ORGANIZATION' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'contract_date' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.CONTRACT' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'certification_date' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.CERTIFICATION' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'classification_date' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.' + 'SECURITY_CLASSIFICATION' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'declassification_date' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.' + 'SECURITY_CLASSIFICATION' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; OTHERWISE : RETURN(TRUE); END_CASE; RETURN (TRUE); END_FUNCTION; -- cc_design_date_time_correlation FUNCTION cc_design_person_and_organization_correlation (e : cc_design_person_and_organization_assignment ) : BOOLEAN; LOCAL po_role : STRING; END_LOCAL; po_role := e\person_and_organization_assignment.role.name; CASE po_role OF 'request_recipient' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | SIZEOF(['CONFIG_CONTROL_DESIGN.' + 'CHANGE_REQUEST', 'CONFIG_CONTROL_DESIGN.' + 'START_REQUEST'] * TYPEOF (x)) = 1)) THEN RETURN(FALSE); END_IF; 'initiator' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | SIZEOF(['CONFIG_CONTROL_DESIGN.' + 'CHANGE_REQUEST', 'CONFIG_CONTROL_DESIGN.' + 'START_REQUEST', 'CONFIG_CONTROL_DESIGN.' + 'START_WORK', 'CONFIG_CONTROL_DESIGN.' + 'CHANGE'] * TYPEOF (x)) = 1)) THEN RETURN(FALSE); END_IF; 'creator' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | SIZEOF (['CONFIG_CONTROL_DESIGN.' + 'PRODUCT_DEFINITION_FORMATION', 'CONFIG_CONTROL_DESIGN.' + 'PRODUCT_DEFINITION'] * TYPEOF (x)) = 1)) THEN RETURN (FALSE); END_IF; 'part_supplier' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.' + 'PRODUCT_DEFINITION_FORMATION' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'design_supplier' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.' + 'PRODUCT_DEFINITION_FORMATION' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'design_owner' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.PRODUCT' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'configuration_manager' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.' + 'CONFIGURATION_ITEM' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'contractor' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.CONTRACT' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; 'classification_officer' : IF SIZEOF (e.items) <> SIZEOF (QUERY (x <* e.items | 'CONFIG_CONTROL_DESIGN.' + 'SECURITY_CLASSIFICATION' IN TYPEOF (x))) THEN RETURN(FALSE); END_IF; OTHERWISE : RETURN(TRUE); END_CASE; RETURN (TRUE); END_FUNCTION; -- cc_design_person_and_organization_correlation FUNCTION closed_shell_reversed(a_shell: closed_shell ): oriented_closed_shell; LOCAL the_reverse : oriented_closed_shell; END_LOCAL; IF 'CONFIG_CONTROL_DESIGN.ORIENTED_CLOSED_SHELL' IN TYPEOF(a_shell) THEN the_reverse := dummy_tri || connected_face_set(a_shell\ connected_face_set.cfs_faces) || closed_shell() || oriented_closed_shell(a_shell\oriented_closed_shell. closed_shell_element,NOT a_shell\oriented_closed_shell. orientation); ELSE the_reverse := dummy_tri || connected_face_set(a_shell\ connected_face_set.cfs_faces) || closed_shell() || oriented_closed_shell(a_shell,FALSE); END_IF; RETURN(the_reverse); END_FUNCTION; -- closed_shell_reversed FUNCTION conditional_reverse(p: BOOLEAN; an_item: reversible_topology): reversible_topology; IF p THEN RETURN(an_item); ELSE RETURN(topology_reversed(an_item)); END_IF; END_FUNCTION; -- conditional_reverse FUNCTION constraints_composite_curve_on_surface( c: composite_curve_on_surface): BOOLEAN; LOCAL n_segments : INTEGER := SIZEOF(c.segments); END_LOCAL; REPEAT k := 1 TO n_segments BY 1; IF (NOT ('CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(c\composite_curve. segments[k].parent_curve))) AND (NOT ( 'CONFIG_CONTROL_DESIGN.SURFACE_CURVE' IN TYPEOF(c\composite_curve .segments[k].parent_curve))) AND (NOT ( 'CONFIG_CONTROL_DESIGN.COMPOSITE_CURVE_ON_SURFACE' IN TYPEOF(c\ composite_curve.segments[k].parent_curve))) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE); END_FUNCTION; -- constraints_composite_curve_on_surface FUNCTION constraints_geometry_shell_based_surface_model( m: shell_based_surface_model): BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT j := 1 TO SIZEOF(m.sbsm_boundary) BY 1; IF (NOT ('CONFIG_CONTROL_DESIGN.OPEN_SHELL' IN TYPEOF(m. sbsm_boundary[j]))) AND (NOT ( 'CONFIG_CONTROL_DESIGN.CLOSED_SHELL' IN TYPEOF(m.sbsm_boundary[j]))) THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; RETURN(result); END_FUNCTION; -- constraints_geometry_shell_based_surface_model FUNCTION constraints_geometry_shell_based_wireframe_model( m: shell_based_wireframe_model): BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT j := 1 TO SIZEOF(m.sbwm_boundary) BY 1; IF (NOT ('CONFIG_CONTROL_DESIGN.WIRE_SHELL' IN TYPEOF(m. sbwm_boundary[j]))) AND (NOT ( 'CONFIG_CONTROL_DESIGN.VERTEX_SHELL' IN TYPEOF(m.sbwm_boundary[j]))) THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; RETURN(result); END_FUNCTION; -- constraints_geometry_shell_based_wireframe_model FUNCTION constraints_param_b_spline(degree, up_knots, up_cp: INTEGER; knot_mult: LIST OF INTEGER; knots: LIST OF parameter_value): BOOLEAN; LOCAL k : INTEGER; sum : INTEGER; result : BOOLEAN := TRUE; END_LOCAL; sum := knot_mult[1]; REPEAT i := 2 TO up_knots BY 1; sum := sum + knot_mult[i]; END_REPEAT; IF (degree < 1) OR (up_knots < 2) OR (up_cp < degree) OR (sum <> ( degree + up_cp + 2)) THEN result := FALSE; RETURN(result); END_IF; k := knot_mult[1]; IF (k < 1) OR (k > (degree + 1)) THEN result := FALSE; RETURN(result); END_IF; REPEAT i := 2 TO up_knots BY 1; IF (knot_mult[i] < 1) OR (knots[i] <= knots[i - 1]) THEN result := FALSE; RETURN(result); END_IF; k := knot_mult[i]; IF (i < up_knots) AND (k > degree) THEN result := FALSE; RETURN(result); END_IF; IF (i = up_knots) AND (k > (degree + 1)) THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; RETURN(result); END_FUNCTION; -- constraints_param_b_spline FUNCTION constraints_rectangular_composite_surface( s: rectangular_composite_surface): BOOLEAN; REPEAT i := 1 TO s.n_u BY 1; REPEAT j := 1 TO s.n_v BY 1; IF NOT (('CONFIG_CONTROL_DESIGN.B_SPLINE_SURFACE' IN TYPEOF(s. segments[i][j].parent_surface)) OR ( 'CONFIG_CONTROL_DESIGN.RECTANGULAR_TRIMMED_SURFACE' IN TYPEOF(s .segments[i][j].parent_surface))) THEN RETURN(FALSE); END_IF; END_REPEAT; END_REPEAT; REPEAT i := 1 TO s.n_u - 1 BY 1; REPEAT j := 1 TO s.n_v BY 1; IF s.segments[i][j].u_transition = discontinuous THEN RETURN(FALSE); END_IF; END_REPEAT; END_REPEAT; REPEAT i := 1 TO s.n_u BY 1; REPEAT j := 1 TO s.n_v - 1 BY 1; IF s.segments[i][j].v_transition = discontinuous THEN RETURN(FALSE); END_IF; END_REPEAT; END_REPEAT; RETURN(TRUE); END_FUNCTION; -- constraints_rectangular_composite_surface FUNCTION cross_product(arg1, arg2: direction): vector; LOCAL v2 : LIST [3:3] OF REAL; v1 : LIST [3:3] OF REAL; mag : REAL; res : direction; result : vector; END_LOCAL; IF (NOT EXISTS(arg1)) OR (arg1.dim = 2) OR (NOT EXISTS(arg2)) OR (arg2 .dim = 2) THEN RETURN(?); ELSE BEGIN v1 := normalise(arg1).direction_ratios; v2 := normalise(arg2).direction_ratios; res := dummy_gri || direction([(v1[2] * v2[3]) - (v1[3] * v2[2]),( v1[3] * v2[1]) - (v1[1] * v2[3]),(v1[1] * v2[2]) - (v1[2] * v2[ 1])]); mag := 0; REPEAT i := 1 TO 3 BY 1; mag := mag + (res.direction_ratios[i] * res.direction_ratios[i]); END_REPEAT; IF mag > 0 THEN result := dummy_gri || vector(res,SQRT(mag)); ELSE result := dummy_gri || vector(arg1,0); END_IF; RETURN(result); END; END_IF; END_FUNCTION; -- cross_product FUNCTION curve_weights_positive(b: rational_b_spline_curve): BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 0 TO b.upper_index_on_control_points BY 1; IF b.weights[i] <= 0 THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; RETURN(result); END_FUNCTION; -- curve_weights_positive FUNCTION derive_dimensional_exponents(x: unit): dimensional_exponents; LOCAL i : INTEGER; result : dimensional_exponents := dimensional_exponents(0,0,0,0,0,0,0); END_LOCAL; result := x.dimensions; RETURN(result); END_FUNCTION; -- derive_dimensional_exponents FUNCTION dimension_of(item: geometric_representation_item ): dimension_count; LOCAL x : SET OF representation; y : representation_context; END_LOCAL; x := using_representations(item); y := x[1].context_of_items; RETURN(y\geometric_representation_context.coordinate_space_dimension); END_FUNCTION; -- dimension_of FUNCTION dimensions_for_si_unit(n: si_unit_name ): dimensional_exponents; CASE n OF metre : RETURN(dimensional_exponents(1,0,0,0,0,0,0)); gram : RETURN(dimensional_exponents(0,1,0,0,0,0,0)); second : RETURN(dimensional_exponents(0,0,1,0,0,0,0)); ampere : RETURN(dimensional_exponents(0,0,0,1,0,0,0)); kelvin : RETURN(dimensional_exponents(0,0,0,0,1,0,0)); mole : RETURN(dimensional_exponents(0,0,0,0,0,1,0)); candela : RETURN(dimensional_exponents(0,0,0,0,0,0,1)); radian : RETURN(dimensional_exponents(0,0,0,0,0,0,0)); steradian : RETURN(dimensional_exponents(0,0,0,0,0,0,0)); hertz : RETURN(dimensional_exponents(0,0,-1,0,0,0,0)); newton : RETURN(dimensional_exponents(1,1,-2,0,0,0,0)); pascal : RETURN(dimensional_exponents(-1,1,-2,0,0,0,0)); joule : RETURN(dimensional_exponents(2,1,-2,0,0,0,0)); watt : RETURN(dimensional_exponents(2,1,-3,0,0,0,0)); coulomb : RETURN(dimensional_exponents(0,0,1,1,0,0,0)); volt : RETURN(dimensional_exponents(2,1,-3,-1,0,0,0)); farad : RETURN(dimensional_exponents(-2,-1,4,1,0,0,0)); ohm : RETURN(dimensional_exponents(2,1,-3,-2,0,0,0)); siemens : RETURN(dimensional_exponents(-2,-1,3,2,0,0,0)); weber : RETURN(dimensional_exponents(2,1,-2,-1,0,0,0)); tesla : RETURN(dimensional_exponents(0,1,-2,-1,0,0,0)); henry : RETURN(dimensional_exponents(2,1,-2,-2,0,0,0)); degree_celsius : RETURN(dimensional_exponents(0,0,0,0,1,0,0)); lumen : RETURN(dimensional_exponents(0,0,0,0,0,0,1)); lux : RETURN(dimensional_exponents(-2,0,0,0,0,0,1)); becquerel : RETURN(dimensional_exponents(0,0,-1,0,0,0,0)); gray : RETURN(dimensional_exponents(2,0,-2,0,0,0,0)); sievert : RETURN(dimensional_exponents(2,0,-2,0,0,0,0)); END_CASE; END_FUNCTION; -- dimensions_for_si_unit FUNCTION dot_product(arg1, arg2: direction): REAL; LOCAL ndim : INTEGER; scalar : REAL; vec1 : direction; vec2 : direction; END_LOCAL; IF (NOT EXISTS(arg1)) OR (NOT EXISTS(arg2)) THEN scalar := ?; ELSE IF arg1.dim <> arg2.dim THEN scalar := ?; ELSE BEGIN vec1 := normalise(arg1); vec2 := normalise(arg2); ndim := arg1.dim; scalar := 0; REPEAT i := 1 TO ndim BY 1; scalar := scalar + (vec1.direction_ratios[i] * vec2. direction_ratios[i]); END_REPEAT; END; END_IF; END_IF; RETURN(scalar); END_FUNCTION; -- dot_product FUNCTION edge_reversed(an_edge: edge): oriented_edge; LOCAL the_reverse : oriented_edge; END_LOCAL; IF 'CONFIG_CONTROL_DESIGN.ORIENTED_EDGE' IN TYPEOF(an_edge) THEN the_reverse := dummy_tri || edge(an_edge.edge_end,an_edge.edge_start) || oriented_edge(an_edge\oriented_edge.edge_element,NOT an_edge\ oriented_edge.orientation); ELSE the_reverse := dummy_tri || edge(an_edge.edge_end,an_edge.edge_start) || oriented_edge(an_edge,FALSE); END_IF; RETURN(the_reverse); END_FUNCTION; -- edge_reversed FUNCTION face_bound_reversed(a_face_bound: face_bound): face_bound; LOCAL the_reverse : face_bound; END_LOCAL; IF 'CONFIG_CONTROL_DESIGN.FACE_OUTER_BOUND' IN TYPEOF(a_face_bound) THEN the_reverse := dummy_tri || face_bound(a_face_bound\face_bound.bound, NOT a_face_bound\face_bound.orientation) || face_outer_bound(); ELSE the_reverse := dummy_tri || face_bound(a_face_bound.bound,NOT a_face_bound.orientation); END_IF; RETURN(the_reverse); END_FUNCTION; -- face_bound_reversed FUNCTION face_reversed(a_face: face): oriented_face; LOCAL the_reverse : oriented_face; END_LOCAL; IF 'CONFIG_CONTROL_DESIGN.ORIENTED_FACE' IN TYPEOF(a_face) THEN the_reverse := dummy_tri || face(set_of_topology_reversed(a_face. bounds)) || oriented_face(a_face\oriented_face.face_element,NOT a_face\oriented_face.orientation); ELSE the_reverse := dummy_tri || face(set_of_topology_reversed(a_face. bounds)) || oriented_face(a_face,FALSE); END_IF; RETURN(the_reverse); END_FUNCTION; -- face_reversed FUNCTION first_proj_axis(z_axis, arg: direction): direction; LOCAL x_vec : vector; v : direction; z : direction; x_axis : direction; END_LOCAL; IF NOT EXISTS(z_axis) THEN RETURN(?); ELSE z := normalise(z_axis); IF NOT EXISTS(arg) THEN IF z.direction_ratios <> [1,0,0] THEN v := dummy_gri || direction([1,0,0]); ELSE v := dummy_gri || direction([0,1,0]); END_IF; ELSE IF arg.dim <> 3 THEN RETURN(?); END_IF; IF cross_product(arg,z).magnitude = 0 THEN RETURN(?); ELSE v := normalise(arg); END_IF; END_IF; x_vec := scalar_times_vector(dot_product(v,z),z); x_axis := vector_difference(v,x_vec).orientation; x_axis := normalise(x_axis); END_IF; RETURN(x_axis); END_FUNCTION; -- first_proj_axis FUNCTION gbsf_check_curve(cv: curve): BOOLEAN; IF SIZEOF(['CONFIG_CONTROL_DESIGN.BOUNDED_CURVE', 'CONFIG_CONTROL_DESIGN.CONIC', 'CONFIG_CONTROL_DESIGN.CURVE_REPLICA', 'CONFIG_CONTROL_DESIGN.LINE', 'CONFIG_CONTROL_DESIGN.OFFSET_CURVE_3D'] * TYPEOF(cv)) > 1 THEN RETURN(FALSE); ELSE IF SIZEOF(['CONFIG_CONTROL_DESIGN.CIRCLE', 'CONFIG_CONTROL_DESIGN.ELLIPSE'] * TYPEOF(cv)) = 1 THEN RETURN(TRUE); ELSE IF (('CONFIG_CONTROL_DESIGN.B_SPLINE_CURVE' IN TYPEOF(cv)) AND (cv \b_spline_curve.self_intersect = FALSE)) OR (cv\b_spline_curve. self_intersect = UNKNOWN) THEN RETURN(TRUE); ELSE IF (('CONFIG_CONTROL_DESIGN.COMPOSITE_CURVE' IN TYPEOF(cv)) AND (cv\composite_curve.self_intersect = FALSE)) OR (cv\ composite_curve.self_intersect = UNKNOWN) THEN RETURN(SIZEOF(QUERY ( seg <* cv\composite_curve.segments | ( NOT gbsf_check_curve(seg.parent_curve)) )) = 0); ELSE IF 'CONFIG_CONTROL_DESIGN.CURVE_REPLICA' IN TYPEOF(cv) THEN RETURN(gbsf_check_curve(cv\curve_replica.parent_curve)); ELSE IF ('CONFIG_CONTROL_DESIGN.OFFSET_CURVE_3D' IN TYPEOF(cv)) AND ((cv\offset_curve_3d.self_intersect = FALSE) OR (cv\ offset_curve_3d.self_intersect = UNKNOWN)) AND (NOT ( 'CONFIG_CONTROL_DESIGN.POLYLINE' IN TYPEOF(cv.basis_curve))) THEN RETURN(gbsf_check_curve(cv\offset_curve_3d.basis_curve)); ELSE IF 'CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(cv) THEN RETURN(gbsf_check_curve(cv\pcurve.reference_to_curve\ representation.items[1]) AND gbsf_check_surface(cv\ pcurve.basis_surface)); ELSE IF 'CONFIG_CONTROL_DESIGN.POLYLINE' IN TYPEOF(cv) THEN IF SIZEOF(cv\polyline.points) >= 3 THEN RETURN(TRUE); END_IF; ELSE IF 'CONFIG_CONTROL_DESIGN.SURFACE_CURVE' IN TYPEOF(cv) THEN IF gbsf_check_curve(cv\surface_curve.curve_3d) THEN REPEAT i := 1 TO SIZEOF(cv\surface_curve. associated_geometry) BY 1; IF 'CONFIG_CONTROL_DESIGN.SURFACE' IN TYPEOF(cv\ surface_curve.associated_geometry[i]) THEN IF NOT gbsf_check_surface(cv\surface_curve. associated_geometry[i]) THEN RETURN(FALSE); END_IF; ELSE IF 'CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(cv \surface_curve.associated_geometry[i]) THEN IF NOT gbsf_check_curve(cv\surface_curve. associated_geometry[i]) THEN RETURN(FALSE); END_IF; END_IF; END_IF; END_REPEAT; RETURN(TRUE); END_IF; ELSE IF 'CONFIG_CONTROL_DESIGN.TRIMMED_CURVE' IN TYPEOF( cv) THEN IF SIZEOF(['CONFIG_CONTROL_DESIGN.LINE', 'CONFIG_CONTROL_DESIGN.PARABOLA', 'CONFIG_CONTROL_DESIGN.HYPERBOLA'] * TYPEOF(cv\ trimmed_curve.basis_curve)) = 1 THEN RETURN(TRUE); ELSE RETURN(gbsf_check_curve(cv\trimmed_curve. basis_curve)); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- gbsf_check_curve FUNCTION gbsf_check_point(pnt: point): BOOLEAN; IF 'CONFIG_CONTROL_DESIGN.CARTESIAN_POINT' IN TYPEOF(pnt) THEN RETURN(TRUE); ELSE IF 'CONFIG_CONTROL_DESIGN.POINT_ON_CURVE' IN TYPEOF(pnt) THEN RETURN(gbsf_check_curve(pnt\point_on_curve.basis_curve)); ELSE IF 'CONFIG_CONTROL_DESIGN.POINT_ON_SURFACE' IN TYPEOF(pnt) THEN RETURN(gbsf_check_surface(pnt\point_on_surface.basis_surface)); ELSE IF 'CONFIG_CONTROL_DESIGN.DEGENERATE_PCURVE' IN TYPEOF(pnt) THEN RETURN(gbsf_check_curve(pnt\degenerate_pcurve. reference_to_curve\representation.items[1]) AND gbsf_check_surface(pnt\degenerate_pcurve.basis_surface)); END_IF; END_IF; END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- gbsf_check_point FUNCTION gbsf_check_surface(sf: surface): BOOLEAN; IF (('CONFIG_CONTROL_DESIGN.B_SPLINE_SURFACE' IN TYPEOF(sf)) AND (sf\ b_spline_surface.self_intersect = FALSE)) OR (sf\b_spline_surface. self_intersect = UNKNOWN) THEN RETURN(TRUE); ELSE IF SIZEOF(['CONFIG_CONTROL_DESIGN.SPHERICAL_SURFACE', 'CONFIG_CONTROL_DESIGN.TOROIDAL_SURFACE'] * TYPEOF(sf)) = 1 THEN RETURN(TRUE); ELSE IF 'CONFIG_CONTROL_DESIGN.CURVE_BOUNDED_SURFACE' IN TYPEOF(sf) THEN IF SIZEOF(['CONFIG_CONTROL_DESIGN.CONICAL_SURFACE', 'CONFIG_CONTROL_DESIGN.CYLINDRICAL_SURFACE', 'CONFIG_CONTROL_DESIGN.PLANE'] * TYPEOF(sf\ curve_bounded_surface.basis_surface)) = 1 THEN RETURN(SIZEOF(QUERY ( bcurve <* sf\curve_bounded_surface. boundaries | (NOT gbsf_check_curve(bcurve)) )) = 0); ELSE IF gbsf_check_surface(sf\curve_bounded_surface.basis_surface) THEN RETURN(SIZEOF(QUERY ( bcurve <* sf\curve_bounded_surface. boundaries | (NOT gbsf_check_curve(bcurve)) )) = 0); END_IF; END_IF; ELSE IF (('CONFIG_CONTROL_DESIGN.OFFSET_SURFACE' IN TYPEOF(sf)) AND ( sf\offset_surface.self_intersect = FALSE)) OR (sf\ offset_surface.self_intersect = UNKNOWN) THEN RETURN(gbsf_check_surface(sf\offset_surface.basis_surface)); ELSE IF 'CONFIG_CONTROL_DESIGN.RECTANGULAR_COMPOSITE_SURFACE' IN TYPEOF(sf) THEN REPEAT i := 1 TO SIZEOF(sf\rectangular_composite_surface. segments) BY 1; REPEAT j := 1 TO SIZEOF(sf\rectangular_composite_surface. segments[i]) BY 1; IF NOT gbsf_check_surface(sf\ rectangular_composite_surface.segments[i][j]. parent_surface) THEN RETURN(FALSE); END_IF; END_REPEAT; END_REPEAT; RETURN(TRUE); ELSE IF 'CONFIG_CONTROL_DESIGN.RECTANGULAR_TRIMMED_SURFACE' IN TYPEOF(sf) THEN IF SIZEOF(['CONFIG_CONTROL_DESIGN.CONICAL_SURFACE', 'CONFIG_CONTROL_DESIGN.CYLINDRICAL_SURFACE', 'CONFIG_CONTROL_DESIGN.PLANE'] * TYPEOF(sf\ rectangular_trimmed_surface.basis_surface)) = 1 THEN RETURN(TRUE); ELSE RETURN(gbsf_check_surface(sf\rectangular_trimmed_surface .basis_surface)); END_IF; ELSE IF 'CONFIG_CONTROL_DESIGN.SURFACE_REPLICA' IN TYPEOF(sf) THEN RETURN(gbsf_check_surface(sf\surface_replica. parent_surface)); ELSE IF 'CONFIG_CONTROL_DESIGN.SWEPT_SURFACE' IN TYPEOF(sf) THEN RETURN(gbsf_check_curve(sf\swept_surface.swept_curve)); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- gbsf_check_surface FUNCTION get_basis_surface(c: curve_on_surface): SET [0:2] OF surface; LOCAL surfs : SET [0:2] OF surface; n : INTEGER; END_LOCAL; surfs := []; IF 'CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(c) THEN surfs := [c\pcurve.basis_surface]; ELSE IF 'CONFIG_CONTROL_DESIGN.SURFACE_CURVE' IN TYPEOF(c) THEN n := SIZEOF(c\surface_curve.associated_geometry); REPEAT i := 1 TO n BY 1; surfs := surfs + associated_surface(c\surface_curve. associated_geometry[i]); END_REPEAT; END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.COMPOSITE_CURVE_ON_SURFACE' IN TYPEOF(c) THEN n := SIZEOF(c\composite_curve.segments); surfs := get_basis_surface(c\composite_curve.segments[1]. parent_curve); IF n > 1 THEN REPEAT i := 2 TO n BY 1; surfs := surfs * get_basis_surface(c\composite_curve.segments[i] .parent_curve); END_REPEAT; END_IF; END_IF; RETURN(surfs); END_FUNCTION; -- get_basis_surface FUNCTION item_in_context(item: representation_item; cntxt: representation_context): BOOLEAN; LOCAL i : INTEGER; y : BAG OF representation_item; END_LOCAL; IF SIZEOF(USEDIN(item,'CONFIG_CONTROL_DESIGN.REPRESENTATION.ITEMS') * cntxt.representations_in_context) > 0 THEN RETURN(TRUE); ELSE y := QUERY ( z <* USEDIN(item,'') | ( 'CONFIG_CONTROL_DESIGN.REPRESENTATION_ITEM' IN TYPEOF(z)) ); IF SIZEOF(y) > 0 THEN REPEAT i := 1 TO HIINDEX(y) BY 1; IF item_in_context(y[i],cntxt) THEN RETURN(TRUE); END_IF; END_REPEAT; END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- item_in_context FUNCTION leap_year(year: year_number): BOOLEAN; IF (((year MOD 4) = 0) AND ((year MOD 100) <> 0)) OR ((year MOD 400) = 0) THEN RETURN(TRUE); ELSE RETURN(FALSE); END_IF; END_FUNCTION; -- leap_year FUNCTION list_face_loops(f: face): LIST [0:?] OF loop; LOCAL loops : LIST [0:?] OF loop := []; END_LOCAL; REPEAT i := 1 TO SIZEOF(f.bounds) BY 1; loops := loops + f.bounds[i].bound; END_REPEAT; RETURN(loops); END_FUNCTION; -- list_face_loops FUNCTION list_of_topology_reversed( a_list: list_of_reversible_topology_item ): list_of_reversible_topology_item; LOCAL the_reverse : list_of_reversible_topology_item; END_LOCAL; the_reverse := []; REPEAT i := 1 TO SIZEOF(a_list) BY 1; the_reverse := topology_reversed(a_list[i]) + the_reverse; END_REPEAT; RETURN(the_reverse); END_FUNCTION; -- list_of_topology_reversed FUNCTION list_to_array(lis: LIST [0:?] OF GENERIC:t; low, u: INTEGER): ARRAY OF GENERIC:t; LOCAL n : INTEGER; res : ARRAY [low:u] OF GENERIC:t; END_LOCAL; n := SIZEOF(lis); IF n <> ((u - low) + 1) THEN RETURN(?); ELSE res := [lis[1],n]; REPEAT i := 2 TO n BY 1; res[(low + i) - 1] := lis[i]; END_REPEAT; RETURN(res); END_IF; END_FUNCTION; -- list_to_array FUNCTION list_to_set(l: LIST [0:?] OF GENERIC:t): SET OF GENERIC:t; LOCAL s : SET OF GENERIC:t := []; END_LOCAL; REPEAT i := 1 TO SIZEOF(l) BY 1; s := s + l[i]; END_REPEAT; RETURN(s); END_FUNCTION; -- list_to_set FUNCTION make_array_of_array(lis: LIST [1:?] OF LIST [1:?] OF GENERIC:t; low1, u1, low2, u2: INTEGER): ARRAY OF ARRAY OF GENERIC:t; LOCAL res : ARRAY [low1:u1] OF ARRAY [low2:u2] OF GENERIC:t; END_LOCAL; IF ((u1 - low1) + 1) <> SIZEOF(lis) THEN RETURN(?); END_IF; IF ((u2 - low2) + 1) <> SIZEOF(lis[1]) THEN RETURN(?); END_IF; res := [list_to_array(lis[1],low2,u2),(u1 - low1) + 1]; REPEAT i := 2 TO HIINDEX(lis) BY 1; IF ((u2 - low2) + 1) <> SIZEOF(lis[i]) THEN RETURN(?); END_IF; res[(low1 + i) - 1] := list_to_array(lis[i],low2,u2); END_REPEAT; RETURN(res); END_FUNCTION; -- make_array_of_array FUNCTION mixed_loop_type_set(l: SET [0:?] OF loop): LOGICAL; LOCAL poly_loop_type : LOGICAL; END_LOCAL; IF SIZEOF(l) <= 1 THEN RETURN(FALSE); END_IF; poly_loop_type := 'CONFIG_CONTROL_DESIGN.POLY_LOOP' IN TYPEOF(l[1]); REPEAT i := 2 TO SIZEOF(l) BY 1; IF ('CONFIG_CONTROL_DESIGN.POLY_LOOP' IN TYPEOF(l[i])) <> poly_loop_type THEN RETURN(TRUE); END_IF; END_REPEAT; RETURN(FALSE); END_FUNCTION; -- mixed_loop_type_set FUNCTION msb_shells(brep: manifold_solid_brep ): SET [1:?] OF closed_shell; IF SIZEOF(QUERY ( msbtype <* TYPEOF(brep) | (msbtype LIKE '*BREP_WITH_VOIDS') )) >= 1 THEN RETURN(brep\brep_with_voids.voids + brep.outer); ELSE RETURN([brep.outer]); END_IF; END_FUNCTION; -- msb_shells FUNCTION msf_curve_check(cv: curve): BOOLEAN; IF SIZEOF(['CONFIG_CONTROL_DESIGN.BOUNDED_CURVE', 'CONFIG_CONTROL_DESIGN.CONIC', 'CONFIG_CONTROL_DESIGN.CURVE_REPLICA', 'CONFIG_CONTROL_DESIGN.LINE', 'CONFIG_CONTROL_DESIGN.OFFSET_CURVE_3D'] * TYPEOF(cv)) > 1 THEN RETURN(FALSE); ELSE IF (('CONFIG_CONTROL_DESIGN.B_SPLINE_CURVE' IN TYPEOF(cv)) AND (cv\ b_spline_curve.self_intersect = FALSE)) OR (cv\b_spline_curve. self_intersect = UNKNOWN) THEN RETURN(TRUE); ELSE IF SIZEOF(['CONFIG_CONTROL_DESIGN.CONIC', 'CONFIG_CONTROL_DESIGN.LINE'] * TYPEOF(cv)) = 1 THEN RETURN(TRUE); ELSE IF 'CONFIG_CONTROL_DESIGN.CURVE_REPLICA' IN TYPEOF(cv) THEN RETURN(msf_curve_check(cv\curve_replica.parent_curve)); ELSE IF ('CONFIG_CONTROL_DESIGN.OFFSET_CURVE_3D' IN TYPEOF(cv)) AND ((cv\offset_curve_3d.self_intersect = FALSE) OR (cv\ offset_curve_3d.self_intersect = UNKNOWN)) AND (NOT ( 'CONFIG_CONTROL_DESIGN.POLYLINE' IN TYPEOF(cv.basis_curve))) THEN RETURN(msf_curve_check(cv\offset_curve_3d.basis_curve)); ELSE IF 'CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(cv) THEN RETURN(msf_curve_check(cv\pcurve.reference_to_curve\ representation.items[1]) AND msf_surface_check(cv\ pcurve.basis_surface)); ELSE IF 'CONFIG_CONTROL_DESIGN.SURFACE_CURVE' IN TYPEOF(cv) THEN IF msf_curve_check(cv\surface_curve.curve_3d) THEN REPEAT i := 1 TO SIZEOF(cv\surface_curve. associated_geometry) BY 1; IF 'CONFIG_CONTROL_DESIGN.SURFACE' IN TYPEOF(cv\ surface_curve.associated_geometry[i]) THEN IF NOT msf_surface_check(cv\surface_curve. associated_geometry[i]) THEN RETURN(FALSE); END_IF; ELSE IF 'CONFIG_CONTROL_DESIGN.PCURVE' IN TYPEOF(cv\ surface_curve.associated_geometry[i]) THEN IF NOT msf_curve_check(cv\surface_curve. associated_geometry[i]) THEN RETURN(FALSE); END_IF; END_IF; END_IF; END_REPEAT; RETURN(TRUE); END_IF; ELSE IF 'CONFIG_CONTROL_DESIGN.POLYLINE' IN TYPEOF(cv) THEN IF SIZEOF(cv\polyline.points) >= 3 THEN RETURN(TRUE); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- msf_curve_check FUNCTION msf_surface_check(surf: surface): BOOLEAN; IF 'CONFIG_CONTROL_DESIGN.ELEMENTARY_SURFACE' IN TYPEOF(surf) THEN RETURN(TRUE); ELSE IF 'CONFIG_CONTROL_DESIGN.SWEPT_SURFACE' IN TYPEOF(surf) THEN RETURN(msf_curve_check(surf\swept_surface.swept_curve)); ELSE IF (('CONFIG_CONTROL_DESIGN.OFFSET_SURFACE' IN TYPEOF(surf)) AND ( surf\offset_surface.self_intersect = FALSE)) OR (surf\ offset_surface.self_intersect = UNKNOWN) THEN RETURN(msf_surface_check(surf\offset_surface.basis_surface)); ELSE IF 'CONFIG_CONTROL_DESIGN.SURFACE_REPLICA' IN TYPEOF(surf) THEN RETURN(msf_surface_check(surf\surface_replica.parent_surface)); ELSE IF (('CONFIG_CONTROL_DESIGN.B_SPLINE_SURFACE' IN TYPEOF(surf)) AND (surf\b_spline_surface.self_intersect = FALSE)) OR ( surf\b_spline_surface.self_intersect = UNKNOWN) THEN RETURN(TRUE); END_IF; END_IF; END_IF; END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- msf_surface_check FUNCTION normalise(arg: vector_or_direction): vector_or_direction; LOCAL ndim : INTEGER; v : direction; vec : vector; mag : REAL; result : vector_or_direction; END_LOCAL; IF NOT EXISTS(arg) THEN result := ?; ELSE ndim := arg.dim; IF 'CONFIG_CONTROL_DESIGN.VECTOR' IN TYPEOF(arg) THEN BEGIN v := dummy_gri || direction(arg.orientation.direction_ratios); IF arg.magnitude = 0 THEN RETURN(?); ELSE vec := dummy_gri || vector(v,1); END_IF; END; ELSE v := dummy_gri || direction(arg.direction_ratios); END_IF; mag := 0; REPEAT i := 1 TO ndim BY 1; mag := mag + (v.direction_ratios[i] * v.direction_ratios[i]); END_REPEAT; IF mag > 0 THEN mag := SQRT(mag); REPEAT i := 1 TO ndim BY 1; v.direction_ratios[i] := v.direction_ratios[i] / mag; END_REPEAT; IF 'CONFIG_CONTROL_DESIGN.VECTOR' IN TYPEOF(arg) THEN vec.orientation := v; result := vec; ELSE result := v; END_IF; ELSE RETURN(?); END_IF; END_IF; RETURN(result); END_FUNCTION; -- normalise FUNCTION open_shell_reversed(a_shell: open_shell): oriented_open_shell; LOCAL the_reverse : oriented_open_shell; END_LOCAL; IF 'CONFIG_CONTROL_DESIGN.ORIENTED_OPEN_SHELL' IN TYPEOF(a_shell) THEN the_reverse := dummy_tri || connected_face_set(a_shell\ connected_face_set.cfs_faces) || open_shell() || oriented_open_shell(a_shell\oriented_open_shell. open_shell_element,NOT a_shell\oriented_open_shell.orientation); ELSE the_reverse := dummy_tri || connected_face_set(a_shell\ connected_face_set.cfs_faces) || open_shell() || oriented_open_shell(a_shell,FALSE); END_IF; RETURN(the_reverse); END_FUNCTION; -- open_shell_reversed FUNCTION orthogonal_complement(vec: direction): direction; LOCAL result : direction; END_LOCAL; IF (vec.dim <> 2) OR (NOT EXISTS(vec)) THEN RETURN(?); ELSE result := dummy_gri || direction([-vec.direction_ratios[2],vec. direction_ratios[1]]); RETURN(result); END_IF; END_FUNCTION; -- orthogonal_complement FUNCTION path_head_to_tail(a_path: path): LOGICAL; LOCAL n : INTEGER; p : BOOLEAN := TRUE; END_LOCAL; n := SIZEOF(a_path.edge_list); REPEAT i := 2 TO n BY 1; p := p AND (a_path.edge_list[i - 1].edge_end :=: a_path.edge_list[i] .edge_start); END_REPEAT; RETURN(p); END_FUNCTION; -- path_head_to_tail FUNCTION path_reversed(a_path: path): oriented_path; LOCAL the_reverse : oriented_path; END_LOCAL; IF 'CONFIG_CONTROL_DESIGN.ORIENTED_PATH' IN TYPEOF(a_path) THEN the_reverse := dummy_tri || path(list_of_topology_reversed(a_path. edge_list)) || oriented_path(a_path\oriented_path.path_element, NOT a_path\oriented_path.orientation); ELSE the_reverse := dummy_tri || path(list_of_topology_reversed(a_path. edge_list)) || oriented_path(a_path,FALSE); END_IF; RETURN(the_reverse); END_FUNCTION; -- path_reversed FUNCTION scalar_times_vector(scalar: REAL; vec: vector_or_direction): vector; LOCAL v : direction; mag : REAL; result : vector; END_LOCAL; IF (NOT EXISTS(scalar)) OR (NOT EXISTS(vec)) THEN RETURN(?); ELSE IF 'CONFIG_CONTROL_DESIGN.VECTOR' IN TYPEOF(vec) THEN v := dummy_gri || direction(vec.orientation.direction_ratios); mag := scalar * vec.magnitude; ELSE v := dummy_gri || direction(vec.direction_ratios); mag := scalar; END_IF; IF mag < 0 THEN REPEAT i := 1 TO SIZEOF(v.direction_ratios) BY 1; v.direction_ratios[i] := -v.direction_ratios[i]; END_REPEAT; mag := -mag; END_IF; result := dummy_gri || vector(normalise(v),mag); END_IF; RETURN(result); END_FUNCTION; -- scalar_times_vector FUNCTION second_proj_axis(z_axis, x_axis, arg: direction ): direction; LOCAL temp : vector; v : direction; y_axis : vector; END_LOCAL; IF NOT EXISTS(arg) THEN v := dummy_gri || direction([0,1,0]); ELSE v := arg; END_IF; temp := scalar_times_vector(dot_product(v,z_axis),z_axis); y_axis := vector_difference(v,temp); temp := scalar_times_vector(dot_product(v,x_axis),x_axis); y_axis := vector_difference(y_axis,temp); y_axis := normalise(y_axis); RETURN(y_axis.orientation); END_FUNCTION; -- second_proj_axis FUNCTION set_of_topology_reversed(a_set: set_of_reversible_topology_item ): set_of_reversible_topology_item; LOCAL the_reverse : set_of_reversible_topology_item; END_LOCAL; the_reverse := []; REPEAT i := 1 TO SIZEOF(a_set) BY 1; the_reverse := the_reverse + topology_reversed(a_set[i]); END_REPEAT; RETURN(the_reverse); END_FUNCTION; -- set_of_topology_reversed FUNCTION shell_reversed(a_shell: shell): shell; IF 'CONFIG_CONTROL_DESIGN.OPEN_SHELL' IN TYPEOF(a_shell) THEN RETURN(open_shell_reversed(a_shell)); ELSE IF 'CONFIG_CONTROL_DESIGN.CLOSED_SHELL' IN TYPEOF(a_shell) THEN RETURN(closed_shell_reversed(a_shell)); ELSE RETURN(?); END_IF; END_IF; END_FUNCTION; -- shell_reversed FUNCTION surface_weights_positive(b: rational_b_spline_surface ): BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 0 TO b.u_upper BY 1; REPEAT j := 0 TO b.v_upper BY 1; IF b.weights[i][j] <= 0 THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; END_REPEAT; RETURN(result); END_FUNCTION; -- surface_weights_positive FUNCTION topology_reversed(an_item: reversible_topology ): reversible_topology; IF 'CONFIG_CONTROL_DESIGN.EDGE' IN TYPEOF(an_item) THEN RETURN(edge_reversed(an_item)); END_IF; IF 'CONFIG_CONTROL_DESIGN.PATH' IN TYPEOF(an_item) THEN RETURN(path_reversed(an_item)); END_IF; IF 'CONFIG_CONTROL_DESIGN.FACE_BOUND' IN TYPEOF(an_item) THEN RETURN(face_bound_reversed(an_item)); END_IF; IF 'CONFIG_CONTROL_DESIGN.FACE' IN TYPEOF(an_item) THEN RETURN(face_reversed(an_item)); END_IF; IF 'CONFIG_CONTROL_DESIGN.SHELL' IN TYPEOF(an_item) THEN RETURN(shell_reversed(an_item)); END_IF; IF 'SET' IN TYPEOF(an_item) THEN RETURN(set_of_topology_reversed(an_item)); END_IF; IF 'LIST' IN TYPEOF(an_item) THEN RETURN(list_of_topology_reversed(an_item)); END_IF; RETURN(?); END_FUNCTION; -- topology_reversed FUNCTION unique_version_change_order(c: action): BOOLEAN; LOCAL ords : action_directive := c\directed_action.directive; assign : SET OF change_request := []; versions : SET OF product_definition_formation := []; END_LOCAL; REPEAT i := 1 TO SIZEOF(ords.requests) BY 1; assign := assign + QUERY ( ara <* bag_to_set(USEDIN(ords.requests[i], 'CONFIG_CONTROL_DESIGN.ACTION_REQUEST_ASSIGNMENT.' + 'ASSIGNED_ACTION_REQUEST')) | ( 'CONFIG_CONTROL_DESIGN.CHANGE_REQUEST' IN TYPEOF(ara)) ); END_REPEAT; REPEAT k := 1 TO SIZEOF(assign) BY 1; versions := versions + assign[k].items; END_REPEAT; RETURN(SIZEOF(QUERY ( vers <* versions | (NOT (SIZEOF( QUERY ( other_vers <* (versions - vers) | (vers.of_product :=: other_vers.of_product) )) = 0)) )) = 0); END_FUNCTION; -- unique_version_change_order FUNCTION using_items(item: founded_item_select; checked_items: SET OF founded_item_select ): SET OF founded_item_select; LOCAL next_items : SET OF founded_item_select; new_check_items : SET OF founded_item_select; result_items : SET OF founded_item_select; END_LOCAL; result_items := []; new_check_items := checked_items + item; next_items := QUERY ( z <* bag_to_set(USEDIN(item,'')) | (( 'CONFIG_CONTROL_DESIGN.REPRESENTATION_ITEM' IN TYPEOF(z)) OR ( 'CONFIG_CONTROL_DESIGN.FOUNDED_ITEM' IN TYPEOF(z))) ); IF SIZEOF(next_items) > 0 THEN REPEAT i := 1 TO HIINDEX(next_items) BY 1; IF NOT (next_items[i] IN new_check_items) THEN result_items := result_items + next_items[i] + using_items( next_items[i],new_check_items); END_IF; END_REPEAT; END_IF; RETURN(result_items); END_FUNCTION; -- using_items FUNCTION using_representations(item: founded_item_select ): SET OF representation; LOCAL results : SET OF representation; intermediate_items : SET OF founded_item_select; result_bag : BAG OF representation; END_LOCAL; results := []; result_bag := USEDIN(item, 'CONFIG_CONTROL_DESIGN.REPRESENTATION.ITEMS'); IF SIZEOF(result_bag) > 0 THEN REPEAT i := 1 TO HIINDEX(result_bag) BY 1; results := results + result_bag[i]; END_REPEAT; END_IF; intermediate_items := using_items(item,[]); IF SIZEOF(intermediate_items) > 0 THEN REPEAT i := 1 TO HIINDEX(intermediate_items) BY 1; result_bag := USEDIN(intermediate_items[i], 'CONFIG_CONTROL_DESIGN.REPRESENTATION.ITEMS'); IF SIZEOF(result_bag) > 0 THEN REPEAT j := 1 TO HIINDEX(result_bag) BY 1; results := results + result_bag[j]; END_REPEAT; END_IF; END_REPEAT; END_IF; RETURN(results); END_FUNCTION; -- using_representations FUNCTION valid_calendar_date(date: calendar_date): LOGICAL; IF NOT ((1 <= date.day_component) AND (date.day_component <= 31)) THEN RETURN(FALSE); END_IF; CASE date.month_component OF 4 : RETURN((1 <= date.day_component) AND (date. day_component <= 30)); 6 : RETURN((1 <= date.day_component) AND (date. day_component <= 30)); 9 : RETURN((1 <= date.day_component) AND (date. day_component <= 30)); 11 : RETURN((1 <= date.day_component) AND (date. day_component <= 30)); 2 : BEGIN IF leap_year(date.year_component) THEN RETURN((1 <= date.day_component) AND (date.day_component <= 29)); ELSE RETURN((1 <= date.day_component) AND (date.day_component <= 28)); END_IF; END; OTHERWISE : RETURN(TRUE); END_CASE; END_FUNCTION; -- valid_calendar_date FUNCTION valid_geometrically_bounded_wf_curve(crv: curve): BOOLEAN; IF SIZEOF(['CONFIG_CONTROL_DESIGN.POLYLINE', 'CONFIG_CONTROL_DESIGN.B_SPLINE_CURVE', 'CONFIG_CONTROL_DESIGN.ELLIPSE','CONFIG_CONTROL_DESIGN.CIRCLE'] * TYPEOF(crv)) = 1 THEN RETURN(TRUE); ELSE IF 'CONFIG_CONTROL_DESIGN.TRIMMED_CURVE' IN TYPEOF(crv) THEN IF SIZEOF(['CONFIG_CONTROL_DESIGN.LINE', 'CONFIG_CONTROL_DESIGN.PARABOLA', 'CONFIG_CONTROL_DESIGN.HYPERBOLA'] * TYPEOF(crv\trimmed_curve. basis_curve)) = 1 THEN RETURN(TRUE); ELSE RETURN(valid_geometrically_bounded_wf_curve(crv\trimmed_curve. basis_curve)); END_IF; ELSE IF 'CONFIG_CONTROL_DESIGN.OFFSET_CURVE_3D' IN TYPEOF(crv) THEN RETURN(valid_geometrically_bounded_wf_curve(crv\offset_curve_3d. basis_curve)); ELSE IF 'CONFIG_CONTROL_DESIGN.CURVE_REPLICA' IN TYPEOF(crv) THEN RETURN(valid_geometrically_bounded_wf_curve(crv\curve_replica. parent_curve)); ELSE IF 'CONFIG_CONTROL_DESIGN.COMPOSITE_CURVE' IN TYPEOF(crv) THEN RETURN(SIZEOF(QUERY ( ccs <* crv\composite_curve.segments | (NOT valid_geometrically_bounded_wf_curve(ccs. parent_curve)) )) = 0); END_IF; END_IF; END_IF; END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- valid_geometrically_bounded_wf_curve FUNCTION valid_geometrically_bounded_wf_point(pnt: point): BOOLEAN; IF 'CONFIG_CONTROL_DESIGN.CARTESIAN_POINT' IN TYPEOF(pnt) THEN RETURN(TRUE); ELSE IF 'CONFIG_CONTROL_DESIGN.POINT_ON_CURVE' IN TYPEOF(pnt) THEN RETURN(valid_geometrically_bounded_wf_curve(pnt\point_on_curve. basis_curve)); ELSE IF 'CONFIG_CONTROL_DESIGN.POINT_REPLICA' IN TYPEOF(pnt) THEN RETURN(valid_geometrically_bounded_wf_point(pnt\point_replica. parent_pt)); END_IF; END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- valid_geometrically_bounded_wf_point FUNCTION valid_measure_value(m: measure_value): BOOLEAN; IF 'REAL' IN TYPEOF(m) THEN RETURN(m > 0); ELSE IF 'INTEGER' IN TYPEOF(m) THEN RETURN(m > 0); ELSE RETURN(TRUE); END_IF; END_IF; END_FUNCTION; -- valid_measure_value FUNCTION valid_time(time: local_time): BOOLEAN; IF EXISTS(time.second_component) THEN RETURN(EXISTS(time.minute_component)); ELSE RETURN(TRUE); END_IF; END_FUNCTION; -- valid_time FUNCTION valid_units(m: measure_with_unit): BOOLEAN; IF 'CONFIG_CONTROL_DESIGN.LENGTH_MEASURE' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1,0,0,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.MASS_MEASURE' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,1,0,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.TIME_MEASURE' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,0,1,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.ELECTRIC_CURRENT_MEASURE' IN TYPEOF(m. value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,0,0,1,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.THERMODYNAMIC_TEMPERATURE_MEASURE' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,0,0,0,1,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.AMOUNT_OF_SUBSTANCE_MEASURE' IN TYPEOF(m. value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,0,0,0,0,1,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.LUMINOUS_INTENSITY_MEASURE' IN TYPEOF(m. value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,0,0,0,0,0,1) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.PLANE_ANGLE_MEASURE' IN TYPEOF(m. value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,0,0,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.SOLID_ANGLE_MEASURE' IN TYPEOF(m. value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,0,0,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.AREA_MEASURE' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2,0,0,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.VOLUME_MEASURE' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(3,0,0,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.RATIO_MEASURE' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,0,0,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.POSITIVE_LENGTH_MEASURE' IN TYPEOF(m. value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1,0,0,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; IF 'CONFIG_CONTROL_DESIGN.POSITIVE_PLANE_ANGLE_MEASURE' IN TYPEOF(m. value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0,0,0,0,0,0,0) THEN RETURN(FALSE); END_IF; END_IF; RETURN(TRUE); END_FUNCTION; -- valid_units FUNCTION valid_wireframe_edge_curve(crv: curve): BOOLEAN; IF SIZEOF(['CONFIG_CONTROL_DESIGN.LINE','CONFIG_CONTROL_DESIGN.CONIC', 'CONFIG_CONTROL_DESIGN.B_SPLINE_CURVE', 'CONFIG_CONTROL_DESIGN.POLYLINE'] * TYPEOF(crv)) = 1 THEN RETURN(TRUE); ELSE IF 'CONFIG_CONTROL_DESIGN.CURVE_REPLICA' IN TYPEOF(crv) THEN RETURN(valid_wireframe_edge_curve(crv\curve_replica.parent_curve)); ELSE IF 'CONFIG_CONTROL_DESIGN.OFFSET_CURVE_3D' IN TYPEOF(crv) THEN RETURN(valid_wireframe_edge_curve(crv\offset_curve_3d. basis_curve)); END_IF; END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- valid_wireframe_edge_curve FUNCTION valid_wireframe_vertex_point(pnt: point): BOOLEAN; IF 'CONFIG_CONTROL_DESIGN.CARTESIAN_POINT' IN TYPEOF(pnt) THEN RETURN(TRUE); ELSE IF 'CONFIG_CONTROL_DESIGN.POINT_REPLICA' IN TYPEOF(pnt) THEN RETURN(valid_wireframe_vertex_point(pnt\point_replica.parent_pt)); END_IF; END_IF; RETURN(FALSE); END_FUNCTION; -- valid_wireframe_vertex_point FUNCTION vector_difference(arg1, arg2: vector_or_direction ): vector; LOCAL ndim : INTEGER; mag2 : REAL; mag1 : REAL; mag : REAL; res : direction; vec1 : direction; vec2 : direction; result : vector; END_LOCAL; IF (NOT EXISTS(arg1)) OR (NOT EXISTS(arg2)) OR (arg1.dim <> arg2.dim) THEN RETURN(?); ELSE BEGIN IF 'CONFIG_CONTROL_DESIGN.VECTOR' IN TYPEOF(arg1) THEN mag1 := arg1.magnitude; vec1 := arg1.orientation; ELSE mag1 := 1; vec1 := arg1; END_IF; IF 'CONFIG_CONTROL_DESIGN.VECTOR' IN TYPEOF(arg2) THEN mag2 := arg2.magnitude; vec2 := arg2.orientation; ELSE mag2 := 1; vec2 := arg2; END_IF; vec1 := normalise(vec1); vec2 := normalise(vec2); ndim := SIZEOF(vec1.direction_ratios); mag := 0; res := dummy_gri || direction(vec1.direction_ratios); REPEAT i := 1 TO ndim BY 1; res.direction_ratios[i] := (mag1 * vec1.direction_ratios[i]) + ( mag2 * vec2.direction_ratios[i]); mag := mag + (res.direction_ratios[i] * res.direction_ratios[i]); END_REPEAT; IF mag > 0 THEN result := dummy_gri || vector(res,SQRT(mag)); ELSE result := dummy_gri || vector(vec1,0); END_IF; END; END_IF; RETURN(result); END_FUNCTION; -- vector_difference END_SCHEMA; -- config_control_design