| Application module: Advanced boundary representation | ISO/TS 10303-1514:2018-11(E)  © ISO  | 
         
         (*
ISO/TC 184/SC 4/WG 12 N6857 - ISO/TS 10303-1514 Advanced boundary representation - EXPRESS ARM
Supersedes 
         ISO/TC 184/SC 4/WG 12 N5272
*)
         
SCHEMA Advanced_boundary_representation_arm;
         USE FROM
         Topologically_bounded_surface_arm;
            -- ISO/TS 10303-1511
         USE FROM
         Solid_model_arm;
            -- ISO/TS 10303-1793
TYPE advanced_brep_shape_representation_item =
         
         
         SELECT
            (Axis_placement_3d, 
    Geometric_placement_operation, 
    Manifold_solid_brep);
         END_TYPE; 
         
ENTITY Advanced_brep_shape_representation
           SUBTYPE OF (Geometric_model);
           SELF\Representation.items : SET[1:?] OF advanced_brep_shape_representation_item;
WHERE
           WR1: SIZEOF(QUERY ( msb <* QUERY ( it <* SELF.items |
            ('ADVANCED_BOUNDARY_REPRESENTATION_ARM.MANIFOLD_SOLID_BREP' IN TYPEOF(it)) ) |
            ( NOT (SIZEOF(QUERY ( csh <* collect_shells(msb) |
            (NOT (SIZEOF(QUERY ( fcs <* csh\
            connected_face_set.connected_faces | (NOT (
            'ADVANCED_BOUNDARY_REPRESENTATION_ARM.ADVANCED_FACE' IN TYPEOF(fcs))) )) = 0)) ))
            = 0)) )) = 0;
         
         END_ENTITY;
ENTITY Closed_shell
           SUBTYPE OF (Connected_face_set);
         
         END_ENTITY;
ENTITY Manifold_solid_brep
           SUBTYPE OF (Solid_model);
           outer : Closed_shell;
           voids : 
         OPTIONAL 
         SET[1:?] OF Oriented_closed_shell;
WHERE
           WR1: (NOT EXISTS(voids)) OR (SIZEOF(QUERY ( ocs <* SELF.voids |                
            ( NOT (ocs.orientation = FALSE)))) = 0);
         
         END_ENTITY;
ENTITY Oriented_closed_shell
           SUBTYPE OF (Closed_shell);
           shell : Closed_shell;
           orientation : BOOLEAN;
WHERE
           WR1: NOT ('ADVANCED_BOUNDARY_REPRESENTATION_ARM.ORIENTED_CLOSED_SHELL'
            IN TYPEOF (SELF.shell));
         
         END_ENTITY;
FUNCTION collect_shells
 (brep : Manifold_solid_brep) : SET[1:?] OF Closed_shell;
         LOCAL   
      return_set: SET[1:?] OF closed_shell := [brep.outer];   
    END_LOCAL;   
    IF SIZEOF(brep.voids)  >= 1    
          THEN   
       return_set := return_set + brep.voids;   
    END_IF;   
   RETURN(return_set);
         END_FUNCTION;
         
         END_SCHEMA;  -- Advanced_boundary_representation_arm
© ISO 2018 — All rights reserved