Application module: Footprint definition ISO/TS 10303-1646:2019(E)
© ISO

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

4 Information requirements
   4.1 Required AM ARMs
   4.2 ARM entity definitions
   4.3 ARM subtype constraint definitions
   4.4 ARM function definitions
5 Module interpreted model
   5.1 Mapping specification
   5.2 MIM EXPRESS short listing
     5.2.1 MIM entity definitions
     5.2.2 MIM subtype constraint definition

A MIM short names
B Information object registration
C ARM EXPRESS-G   EXPRESS-G
D MIM EXPRESS-G   EXPRESS-G
E Computer interpretable listings
F Change history
Bibliography
Index

(*
ISO/TC 184/SC 4/WG 12 N10301 - ISO/TS 10303-1646 Footprint definition - EXPRESS ARM
Supersedes ISO/TC 184/SC 4/WG 12 N9418
*)



SCHEMA Footprint_definition_arm;

USE FROM Layered_interconnect_complex_template_arm;    -- ISO/TS 10303-1716

USE FROM Package_arm;    -- ISO/TS 10303-1707

REFERENCE FROM Support_resource_arm   -- ISO/TS 10303-1800
  (bag_to_set);


ENTITY Breakout_footprint_definition
  SUBTYPE OF (Generic_footprint_definition);
  reference_footprint : Footprint_definition;
INVERSE
  breakout_traces : SET[1:?] OF stratum_feature_template_location_in_breakout_footprint_definition FOR assembly;
WHERE
  WR1: SELF\Multi_stratum_structured_template.location = reference_footprint\Multi_stratum_structured_template.location;
END_ENTITY;

ENTITY Breakout_footprint_definition_shape_model
  SUBTYPE OF (Structured_template_planar_shape_model);
  SELF\structured_template_planar_shape_model.shape_characterized_definition : SET[1:1] OF Breakout_footprint_definition;
  reference_shape : Footprint_definition_shape_model;
WHERE
  WR1: reference_shape.shape_characterized_definition[1] :=: shape_characterized_definition[1].reference_footprint;
END_ENTITY;

ENTITY Footprint_definition
  SUBTYPE OF (Generic_footprint_definition);
  reference_package : OPTIONAL Part_usage_view;
DERIVE
  locations_with_reference_feature : SET OF Part_feature_based_template_location := QUERY(trf <* templates | 'FOOTPRINT_DEFINITION_ARM.PART_FEATURE_BASED_TEMPLATE_LOCATION' IN TYPEOF(trf));
WHERE
  WR1: SIZEOF(QUERY(shape <* SELF\Structured_template.shapes | NOT ('LAYERED_INTERCONNECT_COMPLEX_TEMPLATE_ARM.FOOTPRINT_DEFINITION_SHAPE_MODEL' IN TYPEOF(shape)))) = 0;
  WR2: SIZEOF(QUERY(tlist <* SELF\Structured_template.templates | ('FOOTPRINT_DEFINITION_ARM.FOOTPRINT_DEFINITION' IN TYPEOF(tlist.template)))) = 0;
  WR3: (SIZEOF(locations_with_reference_feature) = 0) OR NOT EXISTS(reference_package) OR (SIZEOF(QUERY(lwrf <* locations_with_reference_feature | NOT (reference_package :=: lwrf\Part_feature_based_template_location.reference_feature\Part_feature.associated_definition))) = 0);
END_ENTITY;

ENTITY Footprint_definition_shape_model
  SUBTYPE OF (Structured_template_planar_shape_model);
  SELF\structured_template_planar_shape_model.shape_characterized_definition : SET[1:1] OF Footprint_definition;
  reference_shape : OPTIONAL physical_unit_shape_model_select;
  reference_seating_plane_placement : OPTIONAL Usage_concept_usage_relationship;
WHERE
  WR1: NOT (SIZEOF(['PHYSICAL_UNIT_3D_SHAPE_ARM.PHYSICAL_UNIT_3D_SHAPE_MODEL', 'PHYSICAL_UNIT_2D_SHAPE_ARM.PHYSICAL_UNIT_PLANAR_SHAPE_MODEL'] * TYPEOF(reference_shape)) = 1) OR NOT ('PHYSICAL_UNIT_USAGE_VIEW_ARM.PART_USAGE_VIEW' IN TYPEOF(reference_shape\Physical_unit_shape_model.shape_characterized_definition)) OR NOT ('LAYERED_INTERCONNECT_COMPLEX_TEMPLATE_ARM.FOOTPRINT_DEFINITION' IN TYPEOF(shape_characterized_definition[1])) OR (shape_characterized_definition[1]\Footprint_definition.reference_package :=: reference_shape\Physical_unit_shape_model.shape_characterized_definition);
  WR2: NOT (SIZEOF(['PHYSICAL_UNIT_3D_SHAPE_ARM.PHYSICAL_UNIT_3D_SHAPE_MODEL', 'PHYSICAL_UNIT_2D_SHAPE_ARM.PHYSICAL_UNIT_PLANAR_SHAPE_MODEL'] * TYPEOF(reference_shape)) = 1) OR ('PHYSICAL_UNIT_USAGE_VIEW_ARM.PART_USAGE_VIEW' IN TYPEOF(reference_shape\Physical_unit_shape_model.shape_characterized_definition));
  WR3: NOT EXISTS(SELF\Representation.description);
  WR4: NOT EXISTS(reference_shape) OR EXISTS(shape_characterized_definition[1]\Footprint_definition.reference_package);
  WR5: NOT EXISTS(reference_seating_plane_placement) OR EXISTS(reference_shape);
  WR6: NOT EXISTS(reference_seating_plane_placement) OR ('PACKAGE_ARM.PACKAGE' IN TYPEOF(shape_characterized_definition[1]\Footprint_definition.reference_package));
  WR7: NOT EXISTS(reference_seating_plane_placement) OR ('NON_FEATURE_SHAPE_ELEMENT_ARM.SEATING_PLANE' IN TYPEOF(reference_seating_plane_placement\Usage_concept_usage_relationship.associated_usage));
  WR8: NOT EXISTS(reference_seating_plane_placement) OR ((reference_seating_plane_placement\Usage_concept_usage_relationship.associating_usage_shape\Usage_view_level_non_feature_shape_model.model_shape) = reference_shape);
  WR9: NOT EXISTS(reference_seating_plane_placement) OR ((reference_seating_plane_placement\Usage_concept_usage_relationship.associated_usage\Non_feature_shape_element.associated_definition) = shape_characterized_definition[1]\Footprint_definition.reference_package);
  WR10: NOT EXISTS(reference_seating_plane_placement) OR ('PHYSICAL_UNIT_3D_SHAPE_ARM.PHYSICAL_UNIT_3D_SHAPE_MODEL' IN TYPEOF(reference_seating_plane_placement\Usage_concept_usage_relationship.associating_usage_shape\Usage_view_level_non_feature_shape_model.model_shape));
  WR11: NOT (EXISTS(reference_seating_plane_placement) AND ('PHYSICAL_UNIT_2D_SHAPE_ARM.PHYSICAL_UNIT_PLANAR_SHAPE_MODEL' IN TYPEOF(reference_shape)));
  WR12: NOT ('PHYSICAL_UNIT_2D_SHAPE_ARM.PHYSICAL_UNIT_PLANAR_SHAPE_MODEL' IN TYPEOF(reference_shape)) OR (SELF\Geometric_model.context_of_items = reference_shape\Geometric_model.context_of_items);
END_ENTITY;

ENTITY Generic_footprint_definition ABSTRACT
  SUPERTYPE OF (ONEOF (Footprint_definition,
                       Breakout_footprint_definition))
  SUBTYPE OF (Multi_stratum_structured_template);
DERIVE
  padstack_based_location : template_arrangement := get_template_arrangement(padstacks);
  padstacks : SET[1:?] OF Template_location_in_structured_template := QUERY(tlict <* SELF\Structured_template.templates | ('LAYERED_INTERCONNECT_COMPLEX_TEMPLATE_ARM.PADSTACK_DEFINITION' IN TYPEOF(tlict.template)));
  single_stratum_components : SET[0:?] OF Single_stratum_template := fd_get_single_stratum_components(SELF\Structured_template.templates);
WHERE
  WR1: SIZEOF(QUERY(ps <* SELF\Structured_template.templates | (ps\Template_location_in_structured_template.template\Multi_stratum_structured_template.location <> SELF\Multi_stratum_structured_template.location) AND (ps\Template_location_in_structured_template.template\Multi_stratum_structured_template.location <> template_arrangement.symmetrical))) = 0;
  WR2: ((SELF\Multi_stratum_structured_template.location = template_arrangement.top) AND (SELF\Product_view_definition.initial_context\View_definition_context.description = 'top')) OR (NOT (SELF\Multi_stratum_structured_template.location = template_arrangement.top) AND NOT (SELF\Product_view_definition.initial_context\View_definition_context.description = 'top'));
  WR3: ((SELF\Multi_stratum_structured_template.location = template_arrangement.bottom) AND (SELF\Product_view_definition.initial_context\View_definition_context.description = 'bottom')) OR (NOT (SELF\Multi_stratum_structured_template.location = template_arrangement.bottom) AND NOT (SELF\Product_view_definition.initial_context\View_definition_context.description = 'bottom'));
  WR4: ((SELF\Multi_stratum_structured_template.location = template_arrangement.symmetrical) AND (SELF\Product_view_definition.initial_context\View_definition_context.description = 'symmetrical')) OR (NOT (SELF\Multi_stratum_structured_template.location = template_arrangement.symmetrical) AND NOT (SELF\Product_view_definition.initial_context\View_definition_context.description = 'symmetrical'));
  WR5: ((SELF\Multi_stratum_structured_template.location = template_arrangement.swappable) AND (SELF\Product_view_definition.initial_context\View_definition_context.description = 'swappable')) OR (NOT (SELF\Multi_stratum_structured_template.location = template_arrangement.swappable) AND NOT (SELF\Product_view_definition.initial_context\View_definition_context.description = 'swappable'));
  WR6: NOT (SIZEOF(single_stratum_components) = 0) OR (SELF\Multi_stratum_structured_template.location = padstack_based_location);
END_ENTITY;

ENTITY Package_footprint_relationship_definition
  SUBTYPE OF (Product_view_definition);
DERIVE
  associated_model : SET[1:1] OF Geometric_model := fd_get_amodel(SELF);
  related_models : SET[2:2] OF Geometric_model := fd_get_rmodels(related_elements);
  related_transforms : SET[2:2] OF Geometric_model_relationship_with_transformation := fd_get_transforms(associated_model, related_models);
INVERSE
  related_elements : SET[2:2] OF view_definition_relationship FOR related_view;
WHERE
  WR1: SIZEOF(QUERY(re <* related_elements | ('PACKAGE_ARM.PACKAGE' IN TYPEOF(re\View_definition_relationship.relating_view)))) = 1;
  WR2: SIZEOF(QUERY(re <* related_elements | ('FOOTPRINT_DEFINITION_ARM.FOOTPRINT_DEFINITION' IN TYPEOF(re\View_definition_relationship.relating_view)))) = 1;
  WR3: SIZEOF(related_models) = 2;
  WR4: SIZEOF(associated_model) = 1;
  WR5: SIZEOF(QUERY(rm <* related_models | ('PHYSICAL_UNIT_2D_SHAPE_ARM.PHYSICAL_UNIT_PLANAR_SHAPE_MODEL' IN TYPEOF(rm)))) = 1;
  WR6: SIZEOF(QUERY(rm <* related_models | ('FOOTPRINT_DEFINITION_ARM.FOOTPRINT_DEFINITION_SHAPE_MODEL' IN TYPEOF(rm)))) = 1;
  WR7: 'LAYERED_2D_SHAPE_ARM.PLANAR_SHAPE_MODEL' IN TYPEOF(associated_model[1]);
  WR8: SIZEOF(related_transforms) = 2;
END_ENTITY;

ENTITY Part_feature_based_template_location
  SUBTYPE OF (Template_location_in_structured_template);
  reference_feature : Part_feature;
END_ENTITY;

ENTITY Stratum_feature_template_location_in_breakout_footprint_definition
  SUBTYPE OF (Stratum_specific_template_location);
  SELF\template_location_in_structured_template.assembly : Breakout_footprint_definition;
  SELF\template_location_in_structured_template.template : Stratum_feature_template;
  original_padstack : Part_feature_based_template_location;
  breakout_padstack : Template_location_in_structured_template;
WHERE
  WR1: original_padstack.assembly :=: assembly.reference_footprint;
  WR2: breakout_padstack.assembly :=: assembly;
END_ENTITY;

SUBTYPE_CONSTRAINT multi_stratum_structured_template_subtypes FOR multi_stratum_structured_template;
  (ONEOF (Padstack_definition,
          Generic_footprint_definition,
          Multi_stratum_special_symbol_template));
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT structured_template_planar_shape_model_subtypes FOR structured_template_planar_shape_model;
  (ONEOF (Breakout_footprint_definition_shape_model,
          Footprint_definition_shape_model));
END_SUBTYPE_CONSTRAINT;

FUNCTION fd_get_amodel
 (input : Product_view_definition) : SET OF Geometric_model;
  LOCAL
  gm : SET OF Geometric_model := [];
  sda : SET OF Shape_description_association := [];
    END_LOCAL;
      -- process input.primary_shape_representation
      IF 'ELEMENTAL_GEOMETRIC_SHAPE_ARM.GEOMETRIC_MODEL' IN TYPEOF(input.primary_shape_representation)
  THEN
    gm := gm + input.primary_shape_representation;
  END_IF;
      -- process input.auxiliary_shape_representations
      IF (SIZEOF(input.auxiliary_shape_representations) >= 0)
  THEN
    REPEAT i := 1 TO HIINDEX(input.auxiliary_shape_representations);
      IF 'ELEMENTAL_GEOMETRIC_SHAPE_ARM.GEOMETRIC_MODEL' IN TYPEOF(input.auxiliary_shape_representations[i])
      THEN
        gm := gm + input.auxiliary_shape_representations[i];
      END_IF;
    END_REPEAT;
  END_IF;
      -- process other SHAPE_DESCRIPTION_ASSOCIATIONs that could still hang around
      sda := bag_to_set(USEDIN(input, 'SHAPE_PROPERTY_ASSIGNMENT_ARM.SHAPE_DESCRIPTION_ASSOCIATION.DEFINITION'));
      IF (SIZEOF(sda) >= 0)
  THEN
    REPEAT i := 1 TO HIINDEX(sda);
      IF 'ELEMENTAL_GEOMETRIC_SHAPE_ARM.GEOMETRIC_MODEL' IN TYPEOF(input.primary_shape_representation)
      THEN
        gm := gm + sda[i]\Property_definition_representation.used_representation;
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(gm);
END_FUNCTION;

FUNCTION fd_get_components
 (input : SET[2:2] OF View_definition_relationship) : SET OF Product_view_definition;
  LOCAL
  pvd : SET OF Product_view_definition := [];
    END_LOCAL;
      REPEAT i := 1 TO HIINDEX(input);
    pvd := pvd + input[i]\View_definition_relationship.relating_view;
  END_REPEAT;
      RETURN(pvd);
END_FUNCTION;

FUNCTION fd_get_rmodels
 (input : SET[2:2] OF View_definition_relationship) : SET OF Geometric_model;
  LOCAL
  gm : SET OF Geometric_model := [];
  pvd : SET OF Product_view_definition := [];
    END_LOCAL;
      pvd := fd_get_components(input);
      IF (SIZEOF(pvd) >= 0)
  THEN
    REPEAT i := 1 TO HIINDEX(pvd);
      gm := gm + fd_get_amodel(pvd[i]);
    END_REPEAT;
    RETURN(gm);
  END_IF;
      RETURN(?);
END_FUNCTION;

FUNCTION fd_get_single_stratum_components
 (input : SET OF Template_location_in_structured_template) : SET OF Single_stratum_template;
  LOCAL
  sst : SET OF Single_stratum_template := [];
    END_LOCAL;
      REPEAT i := 1 TO HIINDEX(input);
    IF ('LAYERED_INTERCONNECT_SIMPLE_TEMPLATE_ARM.SINGLE_STRATUM_TEMPLATE' IN
        TYPEOF(input[i]\Template_location_in_structured_template.template))
    THEN
      sst := sst + input[i]\Template_location_in_structured_template.template;
    END_IF;
  END_REPEAT;
      RETURN(sst);
END_FUNCTION;

FUNCTION fd_get_transforms
 (input1 : SET[1:1] OF Geometric_model; input2 : SET[2:2] OF Geometric_model) : SET OF Geometric_model_relationship_with_transformation;
  LOCAL
  gmrwt : SET OF Geometric_model_relationship_with_transformation := [];
    END_LOCAL;
      gmrwt := bag_to_set(USEDIN(input1[1], 'GEOMETRIC_MODEL_RELATIONSHIP_ARM.GEOMETRIC_MODEL_RELATIONSHIP.REP_1'));
      REPEAT i := 1 TO HIINDEX(gmrwt);
    IF NOT ((gmrwt[i]\Geometric_model_relationship.rep_2 IN input2) AND
            ('CONTEXTUAL_SHAPE_POSITIONING_ARM.GEOMETRIC_MODEL_RELATIONSHIP_WITH_TRANSFORMATION' IN TYPEOF(gmrwt[i])))
    THEN
      RETURN(?);
    END_IF;
  END_REPEAT;
      RETURN(gmrwt);
END_FUNCTION;

FUNCTION get_template_arrangement
 (input : SET OF Template_location_in_structured_template) : template_arrangement;
  LOCAL
  tlist : SET OF Template_location_in_structured_template := (QUERY(inx
                                                                    <* input
                                                                    | ('LAYERED_INTERCONNECT_COMPLEX_TEMPLATE_ARM.MULTI_STRATUM_STRUCTURED_TEMPLATE' IN
                                                                       TYPEOF(inx.template))));
  pabt : BAG OF STRING := [];
  pabb : BAG OF STRING := [];
  pabsymmetrical : BAG OF STRING := [];
  pabswappable : BAG OF STRING := [];
    END_LOCAL;
      REPEAT i := 1 TO SIZEOF(tlist) BY 1;
    IF (tlist[i].template\Multi_stratum_structured_template.location = template_arrangement.top)
    THEN
      pabt := pabt + 'top';
    END_IF;
    IF (tlist[i].template\Multi_stratum_structured_template.location = template_arrangement.bottom)
    THEN
      pabb := pabb + 'bottom';
    END_IF;
    IF (tlist[i].template\Multi_stratum_structured_template.location = template_arrangement.symmetrical)
    THEN
      pabsymmetrical := pabsymmetrical + 'symmetrical';
    END_IF;
    IF (tlist[i].template\Multi_stratum_structured_template.location = template_arrangement.swappable)
    THEN
      pabswappable := pabswappable + 'swappable';
    END_IF;
  END_REPEAT;
      IF ((SIZEOF(pabt) > 0) AND (SIZEOF(pabb) = 0))
  THEN
    RETURN(template_arrangement.top);
  END_IF;
      IF ((SIZEOF(pabb) > 0) AND (SIZEOF(pabt) = 0))
  THEN
    RETURN(template_arrangement.bottom);
  END_IF;
      IF ((SIZEOF(pabb) = 0) AND (SIZEOF(pabt) = 0) AND (SIZEOF(pabsymmetrical) > 0))
  THEN
    RETURN(template_arrangement.symmetrical);
  END_IF;
      IF ((SIZEOF(pabb) = 0) AND (SIZEOF(pabt) = 0) AND (SIZEOF(pabsymmetrical) = 0) AND (SIZEOF(pabswappable) > 0))
  THEN
    RETURN(template_arrangement.swappable);
  END_IF;
      RETURN(?);
END_FUNCTION;

END_SCHEMA;  -- Footprint_definition_arm


© ISO 2019 — All rights reserved