| Application module: Functional assignment to part | ISO/TS 10303-1674:2018-11(E) © ISO | 
         (*
ISO/TC 184/SC 4/WG 12 N9855 - ISO/TS 10303-1674 Functional assignment to part - EXPRESS ARM
Supersedes 
         ISO/TC 184/SC 4/WG 12 N9491
*)
         
SCHEMA Functional_assignment_to_part_arm;
         USE FROM
         Functional_usage_view_arm;
            -- ISO/TS 10303-1705
         USE FROM
         Physical_connectivity_layout_topology_requirement_arm;
            -- ISO/TS 10303-1826
         USE FROM
         Physical_unit_usage_view_arm;
            -- ISO/TS 10303-1732
TYPE fatp_groupable_item =
         
         
         SELECT
         BASED_ON
         groupable_item
         WITH 
         
            (Part_connected_terminals_definition);
         END_TYPE; 
         
TYPE fatp_part_connected_terminals_definition_domain_enumeration =
         
         EXTENSIBLE
         
         ENUMERATION
         
         OF
         
            
         (electrical,
    thermal,
    optical,
    magnetic);
         END_TYPE; 
         
TYPE fatp_requirement_assignment_item =
         
         
         SELECT
         BASED_ON
         requirement_assignment_item
         WITH 
         
            (Part_connected_terminals_element, 
    Part_connected_terminals_definition);
         END_TYPE; 
         
TYPE fatp_termination_or_junction =
         
         
         SELECT
            (Part_terminal, 
    Part_connected_terminals_topological_junction);
         END_TYPE; 
         
TYPE interface_or_join_terminal_enumeration =
         
         ENUMERATION
         
         OF
         
            
         (join_terminal,
    interface_terminal);
         END_TYPE; 
         
ENTITY Functional_usage_view_to_part_terminal_assignment;
           physical_usage_view_terminal : Part_terminal;
           functional_usage_view_terminal : Scalar_terminal_definition;
UNIQUE
           UR1: functional_usage_view_terminal, physical_usage_view_terminal;
         
         END_ENTITY;
ENTITY Part_connected_terminals_definition;
           name : STRING;
           associated_definition : Part_view_definition;
           connected_terminals : SET[2:?] OF Part_terminal;
INVERSE
           domain : SET[0:1] OF Part_connected_terminals_definition_domain FOR associated_definition;
UNIQUE
           UR1: name, associated_definition;
WHERE
           WR1: SIZEOF(QUERY(ct <* connected_terminals | NOT (associated_definition = ct\Shape_element.associated_definition))) = 0;
         
         END_ENTITY;
ENTITY Part_connected_terminals_definition_domain;
           domain_type : fatp_part_connected_terminals_definition_domain_enumeration;
           associated_definition : Part_connected_terminals_definition;
         
         END_ENTITY;
ENTITY Part_connected_terminals_element;
           name : STRING;
           start_terminus : fatp_termination_or_junction;
           end_terminus : fatp_termination_or_junction;
           connectivity_context : Part_connected_terminals_structure_definition;
UNIQUE
           UR1: name, connectivity_context;
WHERE
           WR1: start_terminus <> end_terminus;
         
         END_ENTITY;
ENTITY Part_connected_terminals_layout_topology_requirement_assignment
           SUBTYPE OF (Requirement_assignment);
           SELF\Requirement_assignment.assigned_requirement : Physical_connectivity_layout_topology_requirement;
           SELF\Requirement_assignment.assigned_to : Part_connected_terminals_definition;
         
         END_ENTITY;
ENTITY Part_connected_terminals_structure_definition
           SUBTYPE OF (Part_connected_terminals_definition);
DERIVE
           structural_terminal_nodes : SET[0:?] OF Part_terminal := fatp_get_pt(structural_element);
           structural_junction_nodes : SET[0:?] OF Part_connected_terminals_topological_junction := fatp_get_tj(structural_element);
           tree_structure : LOGICAL := ((SIZEOF(structural_terminal_nodes) + SIZEOF(structural_junction_nodes)) = (SIZEOF(structural_element) + 1));
INVERSE
           structural_element : SET[1:?] OF Part_connected_terminals_element FOR connectivity_context;
WHERE
           WR1: SIZEOF(QUERY(stn <* structural_terminal_nodes |
            				NOT(stn IN SELF\Part_connected_terminals_definition.connected_terminals)
            				)) = 0;
           WR2: SIZEOF(structural_terminal_nodes) = SIZEOF(SELF\Part_connected_terminals_definition.connected_terminals);
         
         END_ENTITY;
ENTITY Part_connected_terminals_topological_junction;
           name : STRING;
           scope : Part_connected_terminals_structure_definition;
UNIQUE
           UR1: name, scope;
         
         END_ENTITY;
ENTITY Part_terminal
           SUBTYPE OF (Part_feature);
           interface_or_join_terminal : interface_or_join_terminal_enumeration;
INVERSE
           connection_requirement : SET[0:1] OF Part_connected_terminals_definition FOR connected_terminals;
           functional_usage_view_terminal : SET[0:1] OF Functional_usage_view_to_part_terminal_assignment FOR physical_usage_view_terminal;
         
         END_ENTITY;
FUNCTION fatp_get_pt
 (input : SET[0:?] OF Part_connected_terminals_element) : SET[0:?] OF Part_terminal;
         LOCAL
   pct : SET OF Part_terminal := [];
	i : INTEGER := 0;
  END_LOCAL;
  REPEAT  i := 1 TO SIZEOF(input) BY 1;
   IF ('FUNCTIONAL_ASSIGNMENT_TO_PART_ARM.PART_TERMINAL' IN TYPEOF(input[i].start_terminus)) THEN
   pct := pct + input[i].start_terminus;
   END_IF;
   IF ('FUNCTIONAL_ASSIGNMENT_TO_PART_ARM.PART_TERMINAL' IN TYPEOF(input[i].end_terminus)) THEN
   pct := pct + input[i].end_terminus;
   END_IF;
  END_REPEAT;
  RETURN(pct);
         END_FUNCTION;
         
FUNCTION fatp_get_tj
 (input : SET[0:?] OF Part_connected_terminals_element) : SET[0:?] OF Part_connected_terminals_topological_junction;
         LOCAL
   tj : SET OF Part_connected_terminals_topological_junction := [];
	i : INTEGER := 0;
  END_LOCAL;
  REPEAT  i := 1 TO SIZEOF(input) BY 1;
   IF ('FUNCTIONAL_ASSIGNMENT_TO_PART_ARM.PART_CONNECTED_TERMINALS_TOPOLOGICAL_JUNCTION' IN TYPEOF(input[i].start_terminus)) THEN
   tj := tj + input[i].start_terminus;
   END_IF;
   IF ('FUNCTIONAL_ASSIGNMENT_TO_PART_ARM.PART_CONNECTED_TERMINALS_TOPOLOGICAL_JUNCTION' IN TYPEOF(input[i].end_terminus)) THEN
   tj := tj + input[i].end_terminus;
   END_IF;
  END_REPEAT;
  RETURN(tj);
         END_FUNCTION;
         
         END_SCHEMA;  -- Functional_assignment_to_part_arm
© ISO 2018 — All rights reserved