stepcode/data/ap203/ap203.exp

5331 lines
204 KiB
Text

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