Application interpreted construct: Manifold subsurface ISO 10303-521:2011(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 EXPRESS short listing
   4.1 General
   4.2 Fundamental concepts and assumptions
   4.3 Manifold subsurface entity definition
   4.4 Manifold subsurface function definitions

A Short names of entities
B Information object registration
C Computer interpretable listings
D EXPRESS-G diagrams
E Examples
Bibliography
Index

4 EXPRESS short listing

This clause defines the information requirements to which implementations shall conform using the EXPRESS language as defined in ISO 10303-11. The following EXPRESS declaration begins the aic_manifold_subsurface schema that uses elements from the integrated resources and contains the types, entity specializations, and functions that are specific to this part of ISO 10303.

EXPRESS specification:

*)
SCHEMA aic_manifold_subsurface;

USE FROM aic_topologically_bounded_surface;    --  ISO 10303-511

USE FROM geometry_schema    --  ISO 10303-42
  (cartesian_transformation_operator_3d);

USE FROM topology_schema    --  ISO 10303-42
  (closed_shell,
   connected_face_set,
   connected_face_sub_set,
   face,
   open_shell,
   subedge,
   subface);

USE FROM representation_schema    --  ISO 10303-43
  (mapped_item);

USE FROM product_property_representation_schema    --  ISO 10303-41
  (shape_representation);
(*

NOTE 1   The schemas referenced above are specified in the following parts:

aic_topologically_bounded_surface ISO 10303-511
geometry_schema ISO 10303-42
topology_schema ISO 10303-42
representation_schema ISO 10303-43
product_property_representation_schema ISO 10303-41

NOTE 2   See Annex D for a graphical representation of this schema.

NOTE 3   There may be subtypes and items of select lists that appear in the integrated resources that are not imported into the AIC. Constructs are eliminated from the subtype tree or select list through the use of the implicit interface rules of ISO 10303-11. References to eliminated constructs are outside the scope of the AIC. In some cases, all items of the select list are eliminated. Because AICs are intended to be implemented in the context of an application protocol, the items of the select list will be defined by the scope of the application protocol

4.1 General

This application interpreted construct provides a consistent set of geometric and topological entities for the definition of manifold subsurface shape representation. Faces may be advanced faces or subfaces referencing an advanced face. Edges are required to be subedges, or, to have their geometry defined by curves. The highest level entity in this AIC is manifold_subsurface_shape_representation which is a specialised type of shape_representation (see ISO 10303-41). The rules on this entity ensure that the topology and geometry are fully defined.

NOTE    This AIC uses all the entities and types from the topologicallybounded surface AIC (aic_topologically_bounded_surface). ISO 10303-511 should be referred to in order to obtain the complete data set.

4.2 Fundamental concepts and assumptions

The following entities are intended to be independently instantiated in the application protocol schemas that use this AIC:

An application protocol that uses this AIC shall ensure that the shape_representation entity is instantiated as a manifold_subsurface_shape_representation.

4.3 aic_manifold_subsurface entity definition

4.3.1 manifold_subsurface_shape_representation   EXPRESS-G

A manifold_subsurface_shape_representation is a type of shape_representation in which the shape of a product is represented by specialisations of connected_face_sub_set entities.

Each connected_face_sub_set is required to be also of type open_shell.

The faces of the connected_face_sub_set are required to be of type advanced_face, or, to be of type subface.

EXPRESS specification:

*)
ENTITY manifold_subsurface_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SIZEOF (QUERY (it <* SELF.items | NOT (SIZEOF (['AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET', 'AIC_MANIFOLD_SUBSURFACE.MAPPED_ITEM', 'AIC_MANIFOLD_SUBSURFACE.AXIS2_PLACEMENT_3D'] * TYPEOF(it)) = 1))) = 0;
  WR2: SIZEOF (QUERY (it <* SELF.items | SIZEOF(['AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET', 'AIC_MANIFOLD_SUBSURFACE.MAPPED_ITEM'] * TYPEOF(it)) =1 )) > 0;
  WR3: SIZEOF (QUERY (mi <* QUERY (it <* items | 'AIC_MANIFOLD_SUBSURFACE.MAPPED_ITEM' IN TYPEOF(it)) | NOT ('AIC_MANIFOLD_SUBSURFACE.MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source. mapped_representation)))) = 0;
  WR4: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items | 'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT('AIC_MANIFOLD_SUBSURFACE.OPEN_SHELL' IN TYPEOF(cfss)))) = 0;
  WR5: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items | 'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT( (('AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(cfss\connected_face_sub_set.parent_face_set))AND (SIZEOF(QUERY(fac <* cfss\connected_face_sub_set.parent_face_set\connected_face_set.cfs_faces | NOT advanced_face_properties(fac))) = 0)) OR (SIZEOF(QUERY(fac <* cfss\connected_face_sub_set.parent_face_set\connected_face_set.cfs_faces | NOT ('AIC_MANIFOLD_SUBSURFACE.ADVANCED_FACE' IN TYPEOF(fac)))) = 0) ))) = 0;
  WR6: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items | 'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | ( SIZEOF (QUERY (fac <* cfss\connected_face_set.cfs_faces | NOT advanced_face_properties(fac))) = 0))) = 0;
  WR7: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items | 'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds | 'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | NOT(('AIC_MANIFOLD_SUBSURFACE.EDGE_CURVE' IN TYPEOF(oe.edge_element)) OR ('AIC_MANIFOLD_SUBSURFACE.SUBEDGE' IN TYPEOF(oe.edge_element)) ))) = 0 ))) = 0 ))) = 0 ))) = 0;
  WR8: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items | 'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces | ('AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds | 'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | NOT(('AIC_MANIFOLD_SUBSURFACE.VERTEX_POINT' IN TYPEOF(oe.edge_start)) AND ('AIC_MANIFOLD_SUBSURFACE.VERTEX_POINT' IN TYPEOF(oe.edge_end)) ))) = 0 ))) = 0 ))) = 0 ))) = 0;
  WR9: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items | 'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces | ( 'AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND ( NOT (SIZEOF(QUERY (bnds <* fcs.bounds | NOT (SIZEOF (['AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP', 'AIC_MANIFOLD_SUBSURFACE.VERTEX_LOOP'] * TYPEOF(bnds.bound)) = 1 ) )) = 0) ))) = 0 ))) = 0;
  WR10: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items | 'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces | ( 'AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND ( NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds | 'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | NOT (SIZEOF (['AIC_MANIFOLD_SUBSURFACE.LINE', 'AIC_MANIFOLD_SUBSURFACE.CONIC', 'AIC_MANIFOLD_SUBSURFACE.POLYLINE', 'AIC_MANIFOLD_SUBSURFACE.SURFACE_CURVE', 'AIC_MANIFOLD_SUBSURFACE.B_SPLINE_CURVE' ] * TYPEOF(oe.edge_element\edge_curve.edge_geometry)) = 1 ) )) = 0 ))) = 0 )))) = 0 ))) = 0;
  WR11: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items | 'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces | ( 'AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND (NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds | 'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | ('AIC_MANIFOLD_SUBSURFACE.SURFACE_CURVE' IN TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND (NOT ((SIZEOF (QUERY (sc_ag <* oe.edge_element\edge_curve.edge_geometry\ surface_curve.associated_geometry | NOT ('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.PCURVE' IN TYPEOF(sc_ag)))) = 0))) )) = 0 ))) = 0 )))) = 0 ))) = 0;
  WR12: SIZEOF (QUERY (cfss <* QUERY (it <* SELF.items | 'AIC_MANIFOLD_SUBSURFACE.CONNECTED_FACE_SUB_SET' IN TYPEOF(it)) | NOT (SIZEOF (QUERY(fcs <* cfss\connected_face_set.cfs_faces | ( 'AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(fcs)) AND (NOT (SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* fcs.bounds | 'AIC_MANIFOLD_SUBSURFACE.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | ('AIC_MANIFOLD_SUBSURFACE.POLYLINE' IN TYPEOF(oe.edge_element\edge_curve.edge_geometry)) AND (NOT (SIZEOF (oe\oriented_edge.edge_element\ edge_curve.edge_geometry\polyline.points) >= 3)) )) = 0 ))) = 0 )))) = 0 ))) = 0;
END_ENTITY;
(*

Formal propositions:

WR1: The items in a manifold_subsurface_shape_representation shall be connected_face_sub_sets, mapped_items, or axis2_placement_3ds.

WR2: At least one of the items shall be either a connected_face_sub_set or a mapped_item.

WR3: For any mapped_item, the mapped_representation of its mapping_source shall be a manifold_subsurface_shape_representation.

WR4: Any instance of connected_face_sub_set in the items set shall be of type connected_face_sub_set AND open_shell.

WR5: For any instance of connected_face_sub_set the faces of the parent_face_set shall be of type advanced_face or the parent_face_set shall be an instance of connected_face_sub_set whose faces are related to advanced_face.

NOTE 1   The parent_face_set may be one of the subtypes, open_shell, or closed_shell of connected_face_set.

WR6: For any instance of connected_face_sub_set each face of the cfs_faces attribute shall be of type advanced_face or of type subface and, directly or indirectly, reference an advanced_face.

NOTE 2   This property is verified by the advanced_face_properties function.

WR7: For any instance of subface in the cfs_faces of a connected_face_sub_set instance the bounding edges shall be of type subedge or of type edge_curve.

WR8: For any instance of subface in the cfs_faces of a connected_face_sub_set instance all vertices used in the face definition shall be of type vertex_point.

WR9: The bounds of any subface in the cfs_faces of a connected_face_sub_set instance shall be of type edge_loop, or, of type vertex_loop.

WR10: The types of curve used to define the geometry of an edge_curve used in the definition of a subface shall be restricted to lines, conics, polylines, surface_curves or b_spline_curves.

WR11: If a surface_curve is used as part of a face bound of a subface the associated_geometry attribute shall reference a pcurve.

WR12: If a polyline is used as part of a face bound of a subface it shall contain at least 3 points.

NOTE 3   Rules WR8 to WR13 ensure that the definition of the bounds of a subface are consistent with those of an advanced_face.

4.4 aic_manifold_subsurface function definitions

4.4.1 advanced_face_properties

The advanced_face_properties function checks the properties of a face to determine if it is of type advanced_face, or, if it is a subface directly, or indirectly, referencing an advanced_face as parent_face. This check is carried out recursively and a TRUE result is returned if the face either is an advanced_face, or, via the parent_face attribute of a subface references an advanced_face. In all other cases a FALSE result is returned.

EXPRESS specification:

*)
FUNCTION advanced_face_properties (testface : face) :BOOLEAN;
IF 'AIC_MANIFOLD_SUBSURFACE.ADVANCED_FACE' IN TYPEOF(testface) THEN
    RETURN (TRUE);
END_IF;
(* if testface is a subface recursively test the parent_face,
return FALSE for all other types of face *)
IF  ('AIC_MANIFOLD_SUBSURFACE.SUBFACE' IN TYPEOF(testface)) THEN
     RETURN(advanced_face_properties(testface\subface.parent_face));
   ELSE RETURN (FALSE);
END_IF;
END_FUNCTION;
(*

Argument definitions:

testface: the face which is to be tested for advanced_face properties.



*)
END_SCHEMA;  -- aic_manifold_subsurface
(*


© ISO 2011 — All rights reserved