Application module: Footprint definition | ISO/TS 10303-1646:2019(E) © ISO |
(*
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