Integrated generic resource: Geometric and topological representation ISO 10303-42:2021(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 Geometry
   4.1 General
   4.2 Fundamental concepts and assumptions
   4.3 Geometry constant definition
   4.4 Geometry type definitions
   4.5 Geometry entity definitions
   4.6 Geometry function definitions
   4.7 Geometry rule definitions
5 Topology
   5.1 General
   5.2 Fundamental concepts and assumptions
   5.3 Topology constant definition
   5.4 Topology type definitions
   5.5 Topology entity definitions
   5.6 Topology function definitions
6 Geometric model
   6.1 General
   6.2 Fundamental concepts and assumptions
   6.3 Geometric model type definitions
   6.4 Geometric model entity definitions
   6.5 Geometric model function definitions
7 Scan data 3d shape model
   7.1 General
   7.2 Fundamental concepts and assumptions
   7.3 Scan data 3d shape model type definition
   7.4 Scan data 3d shape model entity definitions
   7.5 Scan data 3d shape model function definitions

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

6 Geometric model schema

6.1 General

The subject of the geometric_model schema is the set of basic resources necessary for the communication of data describing the size, position, and shape of objects. The solid_model subtypes provide basic resources for the communication of data describing the precise size and shape of three-dimensional solid objects. The two classical types of solid model, constructive solid geometry (CSG) and boundary representation (B-rep) are included. Also included in this clause are entities providing less complete geometric and topological information than the full CSG or B-rep models. The use of these entities is appropriate for communication with systems whose capability differs from that of solid modelling systems.

The entities in this schema are arranged in a logical order beginning with the solid_model supertype and its various subtypes. These subtypes include the different types of boundary representations (B-reps) and the CSG solids. After the solid_model subtypes the surface model entities are grouped together, followed by the wireframe models and the geometric sets. It concludes with tessellated geometry definitions.

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 geometric_model_schema and identifies the necessary external references.

Each implementation of an AP that uses this schema and that encodes entity names shall use the encoding specified in Annex A. Each reference to this schema in an open system shall use the identifier encoding specified in Annex B. This schema is illustrated in Annex D using the EXPRESS-G notation.

EXPRESS specification:

*)
SCHEMA geometric_model_schema;

REFERENCE FROM geometry_schema;    --  ISO 10303-42

REFERENCE FROM topology_schema;    --  ISO 10303-42

REFERENCE FROM measure_schema    --  ISO 10303-41
  (global_unit_assigned_context,
   length_measure,
   parameter_value,
   plane_angle_measure,
   plane_angle_unit,
   positive_length_measure,
   positive_plane_angle_measure,
   ratio_measure);

REFERENCE FROM representation_schema    --  ISO 10303-43
  (founded_item,
   representation,
   representation_item,
   using_representations);

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

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

geometry_schema ISO 10303-42
topology_schema ISO 10303-42
measure_schema ISO 10303-41
representation_schema ISO 10303-43
product_property_representation_schema ISO 10303-41

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

6.2 Fundamental concepts and assumptions

The constructive solid geometry models are represented by their component primitives and the sequence of Boolean operations (union, intersection or difference) used in their construction. The standard CSG primitives are the cone, eccentric_cone, cylinder, sphere, torus, block, right_angular_wedge, ellipsoid, tetrahedron and pyramid. These primitives should be defined in their final position and orientation. A set of two dimensional primitives is included for use in the creation of two dimensional CSG solids. The entity which communicates the logical sequence of Boolean operations is the boolean_result which identifies an operator and two operands. The operands can themselves be boolean_results, thus enabling nested operations. In addition to the CSG primitives, any solid model, including, in particular, swept solids and half_space_solids may be Boolean operands. The swept solids are the swept_area_solids and the swept_face_solids. The swept solids are obtained by extruding or sweeping a planar face which may contain holes. The half_space_solid is essentially defined as a semi-infinite solid on one side of a surface; it may be limited by a box_domain. The half_space_2d is an equivalent two dimensional entity and represents the region to one side of a curve.

B-rep models are represented by the set of shells defining their exterior or interior boundaries. Constraints ensure that the associated geometry is well defined and that the Euler formula connecting the numbers of vertices, edges, faces, loops and shells in the model is satisfied. The faceted_brep is restricted to represent B-reps in which all faces are planar and every loop is a poly_loop.

The solid_replica entity provides a mechanism for copying an existing solid in a new location. The shell_based_surface_model, face_based_surface_model, shell_based_wireframe_model, edge_based_wireframe_model, geometric_set, and geometric_curve_set entities do not enforce the integrity checks of the manifold_solid_brep and can be used for the communication of incomplete models or non-manifold objects, including two-dimensional models.

6.3 geometric_model_schema type definitions

6.3.1 angular_deviation   EXPRESS-G

An angular_deviation type specifies the maximum angular deviation of any facet in a tessellated shape model. Angular deviation is a measure of the angle between the normal vectors at two points on a shape. The angular deviation for a given facet is the maximum angular deviation for all pairs of points on the shape in the region being approximated by the facet.

NOTE    The angular deviation of a facet may be approximated by the maximum angular deviation between the pairs of vertex normals.

EXPRESS specification:

*)
TYPE angular_deviation = positive_plane_angle_measure;
END_TYPE;
(*

6.3.2 boolean_operand   EXPRESS-G

The boolean_operand type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types. A boolean_operand type identifies all those types of entities which may participate in a boolean operation to form a CSG solid. This includes provision for the special case of a two dimensional 'solid' which is an arcwise connected finite region in two dimensional space defined by boolean operations with 2D operands.

EXPRESS specification:

*)
TYPE boolean_operand = SELECT
   (boolean_result,
    csg_primitive,
    half_space_2d,
    half_space_solid,
    solid_model);
END_TYPE;
(*

6.3.3 boolean_operator   EXPRESS-G

A boolean_operator type defines the three boolean operators used in the definition of CSG solids.

EXPRESS specification:

*)
TYPE boolean_operator = ENUMERATION OF
   (union,
    intersection,
    difference);
END_TYPE;
(*

Enumerated item definitions:

union: the operation of constructing the regularised set theoretic union of the volumes defined by two solids;

intersection: the operation of constructing the regularised set theoretic intersection of the volumes defined by two solids;

difference: the regularised set theoretic difference between the volumes defined by two solids;

6.3.4 bounded_primitive_2d   EXPRESS-G

The bounded_primitive_2d type is an extensible list of alternate data types. It provides a mechanism to refer to instances of the data types included in the bounded_primitive_2d type or in its extensions.

NOTE  The list of entity data types will be extended in application resources that use the constructs of this resource.

A bounded_primitive_2d extensible select type defines the set of two dimensional CSG primitives of finite size which may participate in boolean operations or be used as tree_root_expression to directly define a two dimensional CSG solid.

EXPRESS specification:

*)
TYPE bounded_primitive_2d = EXTENSIBLE GENERIC_ENTITY SELECT
   (area_with_outer_boundary,
    circular_area,
    elliptic_area,
    polygonal_area,
    rectangular_area);
END_TYPE;
(*

6.3.5 chordal_deviation   EXPRESS-G

A chordal_deviation type specifies the maximum chordal deviation of any facet in a tessellated shape model. Chordal deviation is the maximum value of the minimum distance from any point on the edge of a facet to the closest point on the surface being approximated by the facets.

EXPRESS specification:

*)
TYPE chordal_deviation = positive_length_measure;
END_TYPE;
(*

6.3.6 csg_primitive   EXPRESS-G

The csg_primitive type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types.

A csg_primitive select type defines the set of CSG primitives which may participate in boolean operations or be used as tree_root_expression to directly define a CSG solid.

The 3D CSG primitives are sphere , ellipsoid , right_circular_cone , eccentric_cone , right_circular_cylinder , torus , block , faceted_primitive , rectangular_pyramid , and right_angular_wedge . The bounded_primitive_2d s which are all types of primitive_2d may participate in boolean operations with other two dimensional entities.

EXPRESS specification:

*)
TYPE csg_primitive = SELECT
   (block,
    bounded_primitive_2d,
    cyclide_segment_solid,
    eccentric_cone,
    ellipsoid,
    faceted_primitive,
    rectangular_pyramid,
    right_angular_wedge,
    right_circular_cone,
    right_circular_cylinder,
    sphere,
    torus);
END_TYPE;
(*

6.3.7 csg_select   EXPRESS-G

The csg_select type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types.

A csg_select select type identifies the types of entity which may be selected as the root of a CSG tree including a single CSG primitive as a special case.

EXPRESS specification:

*)
TYPE csg_select = SELECT
   (boolean_result,
    csg_primitive);
END_TYPE;
(*

6.3.8 edge_or_curve   EXPRESS-G

The edge_or_curve type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types.

An edge_or_curve select type identifies the types of entity which may be selected as the underlying geometry of a tessellated edge.

EXPRESS specification:

*)
TYPE edge_or_curve = SELECT
   (curve,
    edge_curve);
END_TYPE;
(*

6.3.9 face_or_surface   EXPRESS-G

The face_or_surface type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types.

A face_or_surface select type identifies the types of entity which may be selected as the underlying geometry of a tessellated face.

EXPRESS specification:

*)
TYPE face_or_surface = SELECT
   (face_surface,
    surface);
END_TYPE;
(*

6.3.10 geometric_set_select   EXPRESS-G

The geometric_set_select type is an extensible list of alternate data types. It provides a mechanism to refer to instances of the data types included in the geometric_set_select type or in its extensions.

NOTE  The list of entity data types will be extended in application resources that use the constructs of this resource.

A geometric_set_select type identifies the types of entities which can occur in a geometric_set .

EXPRESS specification:

*)
TYPE geometric_set_select = EXTENSIBLE GENERIC_ENTITY SELECT
   (curve,
    point,
    surface);
END_TYPE;
(*

6.3.11 length_to_height_ratio   EXPRESS-G

A length_to_height_ratio type specifies the maximum ratio of height to length of any facets in a tessellated shape model. The height is measured in a direction perpendicular to the longest edge of a facet.

NOTE    length_to_height_ratio is a criterion used to ensure reasonable proportions of the facets and thus, ensure the regularity of a set of facets in a tessellated geometry.

EXPRESS specification:

*)
TYPE length_to_height_ratio = ratio_measure;
END_TYPE;
(*

6.3.12 maximum_edge_length   EXPRESS-G

A maximum_edge_length type specifies the maximum length of any edge off any facet of a tessellated shape model.

EXPRESS specification:

*)
TYPE maximum_edge_length = positive_length_measure;
END_TYPE;
(*

6.3.13 path_or_composite_curve   EXPRESS-G

The path_or_composite_curve type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types.

A path_or_composite_curve select type identifies the types of entities in a geometric model which can be linked to a tessellated_wire .

EXPRESS specification:

*)
TYPE path_or_composite_curve = SELECT
   (composite_curve,
    path);
END_TYPE;
(*

6.3.14 surface_model   EXPRESS-G

The surface_model type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types.

A surface_model select type collects all possible surface model entities.

Some product model representations consist of collections of surfaces which do not necessarily form the complete boundary of a solid. Such a model can be represented by a collection of face s or shell s.

EXPRESS specification:

*)
TYPE surface_model = SELECT
   (face_based_surface_model,
    shell_based_surface_model);
END_TYPE;
(*

6.3.15 tessellated_facet_long_short_edge_ratio   EXPRESS-G

A tessellated_facet_long_short_edge_ratio type specifies the maximum aspect ratio of any facet in a tessellated shape model. A tessellated_facet_long_short_edge_ratio is the ratio of the longest to shortest edge of a facet.

NOTE    tessellated_facet_long_short_edge_ratio is an easily calculated criterion used to verify that the individual facets in a tessellated geometry have edges of similar lengths.

EXPRESS specification:

*)
TYPE tessellated_facet_long_short_edge_ratio = ratio_measure;
END_TYPE;
(*

6.3.16 tessellated_edge_or_vertex   EXPRESS-G

The tessellated_edge_or_vertex type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types.

A tessellated_edge_or_vertex select type identifies the types of entities that are used as items in the definition of a tessellated_wire .

EXPRESS specification:

*)
TYPE tessellated_edge_or_vertex = SELECT
   (tessellated_edge,
    tessellated_vertex);
END_TYPE;
(*

6.3.17 tessellation_accuracy_parameter_item   EXPRESS-G

The tessellation_accuracy_parameter_item type is an extensible list of alternate data types. It provides a mechanism to refer to instances of the data types included in the tessellation_accuracy_parameter_item type or in its extensions.

NOTE  The list of entity data types will be extended in application resources that use the constructs of this resource.

A tessellation_accuracy_parameter_item select type identifies the types of entities that are used as items in the definition of tessellation_accuracy_parameters of a tessellated_shape_representation_with_accuracy_parameters .

EXPRESS specification:

*)
TYPE tessellation_accuracy_parameter_item = EXTENSIBLE SELECT
   (angular_deviation,
    chordal_deviation,
    length_to_height_ratio,
    maximum_edge_length,
    tessellated_facet_long_short_edge_ratio);
END_TYPE;
(*

6.3.18 wireframe_model   EXPRESS-G

The wireframe_model type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types.

A wireframe_model type collects all possible wireframe model entities.

A wireframe representation of a geometric model contains information only about the intersections of the surfaces forming the boundary but does not contain information about the surfaces themselves.

EXPRESS specification:

*)
TYPE wireframe_model = SELECT
   (edge_based_wireframe_model,
    shell_based_wireframe_model);
END_TYPE;
(*

6.4 geometric_model_schema entity definitions

6.4.1 solid_model   EXPRESS-G

A solid_model is a type of geometric_representation_item which is a complete representation of the nominal shape of a product such that all points in the interior are connected. Any point can be classified as being inside, outside or on the boundary of a solid.

There are several different types of solid model representations including 'solid's defined as connected regions in two dimensional space.

EXPRESS specification:

*)
ENTITY solid_model
  SUPERTYPE OF (ONEOF (csg_solid,
                       manifold_solid_brep,
                       swept_face_solid,
                       swept_area_solid,
                       swept_disk_solid,
                       solid_replica,
                       brep_2d,
                       trimmed_volume))
  SUBTYPE OF (geometric_representation_item);
END_ENTITY;
(*

6.4.2 manifold_solid_brep   EXPRESS-G

A manifold_solid_brep is a type of solid_model which is is a finite, arcwise connected volume bounded by one or more surfaces, each of which is a connected, oriented, finite, closed 2-manifold. There is no restriction on the number of through holes, nor on the number of voids within the volume. The Boundary Representation (B-rep) of a manifold solid utilises a graph of edges and vertices embedded in a connected, oriented, finite, closed two manifold surface. The embedded graph divides the surface into arcwise connected areas known as faces. The edges and vertices, therefore, form the boundaries of the faces and the domain of a face does not include its boundaries. The embedded graph may be disconnected and may be a pseudograph. The graph is labelled; that is, each entity in the graph has a unique identity. The geometric surface definition used to specify the geometry of a face shall be 2-manifold embeddable in the plane within the domain of the face. In other words, it shall be connected, oriented, finite, non-self-intersecting, and of surface genus 0. Faces do not intersect except along their boundaries. Each edge along the boundary of a face is shared by at most one other face in the assemblage. The assemblage of edges in the B-rep do not intersect except at their boundaries (i.e., vertices). The geometric curve definition used to specify the geometry of an edge shall be arcwise connected and shall not self-intersect or overlap within the domain of the edge. The geometry of an edge shall be consistent with the geometry of the faces of which it forms a partial bound. The geometry used to define a vertex shall be consistent with the geometry of the faces and edges of which it forms a partial bound. A B-rep is represented by one or more closed_shell s which shall be disjoint. One shell, the outer, shall completely enclose all the other shells and no other shell may enclose a shell. The facility to define a B-rep with one or more internal voids is provided by the brep_with_voids subtype. The following version of the Euler formula shall be satisfied

χ ms = V - E + 2F - L l - 2(S - G s) = 0   (1)  

where V, E, F}, L l and S are the numbers of unique vertices, edges, faces, face bounds and shells in the model and G s is the sum of the genus of the shells. More specifically, the topological entities shall conform to the following constraints, where B denotes a manifold solid B-rep:

The topological normal of the B-rep at each point on its boundary is the surface normal direction that points away from the solid material. The closed_shell normals, as used, shall be consistent with the topological normal of the B-rep. The manifold_solid_brep has two subtypes, faceted_brep and brep_with_voids , with which there exists a default ANDOR relationship. The following can all be instantiated:

EXPRESS specification:

*)
ENTITY manifold_solid_brep
  SUBTYPE OF (solid_model);
  outer : closed_shell;
END_ENTITY;
(*

Attribute definitions:

outer: a closed_shell defining the exterior boundary of the solid; the shell normal shall point away from the interior of the solid

Informal propositions:

IP1: The dimensionality of a manifold_solid_brep shall be 3.

IP10: The Euler equation shall be satisfied for the boundary representation, where the genus term shell-genus is the sum of the genus values for the shells of the B-rep.

IP11: A manifold_solid_brep , which is not a faceted_brep , shall not reference poly_loop s.

IP12: A faceted_brep can reference only poly_loop s as face boundaries.

IP2: The extent of the manifold_solid_brep shall be finite and non-zero..

IP3: No vertex_point , undirected edge_curve (i.e., one which is not an oriented_edge ), or undirected face_surface (i.e., one which is not an oriented_face ) referenced by a manifold_solid_brep shall intersect any other vertex_point , undirected edge_curve , or undirected face_surface referenced by the same manifold_solid_brep .

IP4: Distinct loop s referenced by the same face shall have no common vertex

NOTE    This implies that distinct loops of the same face have no common edges. If geometry is present, distinct loops of the same face do not intersect.

IP5: All topological elements of the manifold_solid_brep shall have defined associated geometry.

IP6: The shell normals shall agree with the B-rep normal and point away from the solid represented by the B-rep.

IP7: Each face shall be referenced only once by the shells of the manifold_solid_brep .

IP8: Each oriented_edge in the manifold_solid_brep shall be referenced only once.

IP9: Each undirected edge shall be referenced exactly twice by the loops in the faces of the manifold_solid_brep 's shells.

6.4.3 brep_with_voids   EXPRESS-G

A brep_with_voids is a type of manifold_solid_brep which contains one or more voids in its interior. The voids are represented by oriented_closed_shell s which are defined so that the oriented_closed_shell normals point into the void, that is, with orientation FALSE. A brep_with_voids can also be a faceted_brep .

EXPRESS specification:

*)
ENTITY brep_with_voids
  SUBTYPE OF (manifold_solid_brep);
  voids : SET[1:?] OF oriented_closed_shell;
END_ENTITY;
(*

Attribute definitions:

voids: a set of oriented_closed_shell s defining voids within the solid. The set may contain one or more shells.

Informal propositions:

IP1: Each void shell shall be disjoint from the outer shell and from every other void shell.

IP3: Each shell in the brep_with_voids shall be referenced only once.

IP2: Each void shell shall be enclosed within the outer shell but not within any other void shell. In particular, the outer shell is not in the set of void shells.

6.4.4 faceted_brep   EXPRESS-G

A faceted_brep is a type of manifold_solid_brep which is a simple form of boundary representation model in which all faces are planar and all edges are straight lines.

NOTE    The faceted_brep has been introduced in order to support the large number of systems that allow boundary type solid representations with planar surfaces only. Faceted models may be represented by manifold_solid_brep but their representation as a faceted_brep will be more compact.

Unlike the B-rep model, edges and vertices are not represented explicitly in the model but are implicitly available through the poly_loop entity. A faceted_brep has to meet the same topological constraints as the manifold_solid_brep .

EXPRESS specification:

*)
ENTITY faceted_brep
  SUBTYPE OF (manifold_solid_brep);
END_ENTITY;
(*

Informal propositions:

IP1: All the bounding loops of all the faces of all the shells in the faceted_brep shall be of type poly_loop .

IP2: The faces in the shells may have implicit or explicit surface geometry. If explicit, the face surface shall be a plane. All polyloops defining the face shall be coplanar.

6.4.5 brep_2d   EXPRESS-G

A brep_2d is a type of solid_model which is a bounded two-dimensional region defined by a face. Any two-dimensional point can be classified as being inside, outside or on the boundary of a brep_2d . A brep_2d shall have an outer boundary and may have any number of holes.

EXPRESS specification:

*)
ENTITY brep_2d
  SUBTYPE OF (solid_model);
  extent : face;
WHERE
  WR1: SIZEOF (['TOPOLOGY_SCHEMA.FACE_SURFACE', 'TOPOLOGY_SCHEMA.SUBFACE', 'TOPOLOGY_SCHEMA.ORIENTED_FACE'] * TYPEOF (SELF.extent)) = 0;
  WR2: SIZEOF (QUERY (bnds <* extent.bounds | NOT ('TOPOLOGY_SCHEMA.EDGE_LOOP' IN TYPEOF(bnds.bound))) ) = 0;
  WR3: SIZEOF (QUERY (bnds <* extent.bounds | 'TOPOLOGY_SCHEMA.FACE_OUTER_BOUND' IN TYPEOF(bnds))) = 1;
  WR4: SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* extent.bounds | 'TOPOLOGY_SCHEMA.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | NOT (('TOPOLOGY_SCHEMA.EDGE_CURVE' IN TYPEOF(oe.edge_element)) AND (oe.edge_element\geometric_representation_item.dim = 2)))) = 0))) = 0;
END_ENTITY;
(*

Attribute definitions:

extent: the face which defines the region of two-dimensional space occupied by the brep_2d ;

Formal propositions:

WR1: extent shall not be a face of type face_surface , subface , or oriented_face .

WR2: Each face_bound used to define the extent shall be of type edge_loop .

WR3: Precisely one of the bounds of the face shall be of type face_outer_bound .

WR4: Each edge used to define the bounds shall be of type edge_curve and shall be two-dimensional.

6.4.6 csg_solid   EXPRESS-G

A csg_solid is a type of solid_model which is a solid represented as a CSG model defined by a collection of so-called primitive solids, combined using regularised boolean operations. The allowed operations are intersection, union and difference. As a special case a csg_solid can also consist of a single CSG primitive.

A regularised subset of space is the closure of its interior, where this phrase is interpreted in the usual sense of point set topology. For boolean_result s regularisation has the effect of removing dangling edges and other anomalies produced by the original operations.

A CSG solid requires two kinds of information for its complete definition: geometric and structural. The geometric information is conveyed by solid_model s. These typically are primitive volumes such as cylinders, wedges and extrusions, but can include general B-rep models. solid_model s can also be solid_replica s (transformed solids) and half_space_solid s. The structural information is in a tree (strictly, an acyclic directed graph) of boolean_result and CSG solids, which represent a `recipe' for building the solid. The terminal nodes are the geometric primitives and other solids. Every csg_solid has precisely one boolean_result associated with it which is the root of the tree that defines the solid. (There may be further boolean_result s within the tree as operands). The significance of a csg_solid entity is that the solid defined by the associated tree is thus identified as a significant object in itself, and in this way it is distinguished from other boolean_result entities representing intermediate results during the construction process.

EXPRESS specification:

*)
ENTITY csg_solid
  SUBTYPE OF (solid_model);
  tree_root_expression : csg_select;
END_ENTITY;
(*

Attribute definitions:

tree_root_expression: a boolean expression of primitives and regularised operators describing the solid; the root of the tree of boolean expressions is given here explicitly as a boolean_result entity, or as a csg_primitive ;

6.4.7 boolean_result   EXPRESS-G

A boolean_result is a type of geometric_representation_item which is the result of a regularised operation on two solids to create a new solid. Valid operations are regularised union, regularised intersection, and regularised difference. For purposes of Boolean operations, a solid is considered to be a regularised set of points. The final boolean_result depends upon the operation and the two operands. In the case of the difference operator the order of the operands is also significant. The operator can be either union, intersection or difference. The effect of these operators is described below.

union on two solids is the new solid that contains all the points that are in either the first_operand or the second_operand or both.

intersection on two solids is the new solid that is the regularisation of the set of all points that are in both the first_operand and the second_operand .

The result of the difference operation on two solids is the regularisation of the set of all points which are in the first_operand , but not in the second_operand .

NOTE    For example if the first operand is a block and the second operand is a solid cylinder of suitable dimensions and location the boolean_result produced with the difference operator would be a block with a circular hole.

EXPRESS specification:

*)
ENTITY boolean_result
  SUBTYPE OF (geometric_representation_item);
  operator : boolean_operator;
  first_operand : boolean_operand;
  second_operand : boolean_operand;
END_ENTITY;
(*

Attribute definitions:

operator: the boolean operator used in the operation to create the result;

first_operand: the first operand to be operated upon by the boolean operation;

second_operand: the second operand to be operated upon by the boolean operation;;

6.4.8 block   EXPRESS-G

A block is a type of geometric_representation_item which is a solid rectangular parallelepiped, defined with a location and placement coordinate system. The block is specified by the positive lengths x , y , and z along the axes of the placement coordinate system, and has one vertex at the origin of the placement coordinate system.

EXPRESS specification:

*)
ENTITY block
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  x : positive_length_measure;
  y : positive_length_measure;
  z : positive_length_measure;
END_ENTITY;
(*

Attribute definitions:

position: the location and orientation of the axis system for the primitive; the block has one vertex at position.location and its edges aligned with the placement axes in the positive sense;

x: the size of the block along the placement X axis, (position.p[1]);

y: the size of the block along the placement Y axis, (position.p[21]);

z: the size of the block along the placement Z axis, (position.p[3]);

6.4.9 right_angular_wedge   EXPRESS-G

A right_angular_wedge is a type of geometric_representation_item which can be envisioned as the result of intersecting a block with a plane perpendicular to one of its faces. It is defined with a location and local coordinate system. A triangular/trapezoidal face lies in the plane defined by the placement X and Y axes. This face is defined by positive lengths x and y along the placement X and Y axes, by the length ltx (if nonzero) parallel to the X axis at a distance y from the placement origin, and by the line connecting the ends of the x and ltx segments. The remainder of the wedge is specified by the positive length z along the placement Z axis which defines a distance through which the trapezoid or triangle is extruded. If ltx = 0, the wedge has five faces; otherwise, it has six faces.

NOTE    See Figure (26) for interpretation of attributes.



Figure 26 —  Right angular wedge and its attributes

Figure 26 —  Right angular wedge and its attributes

EXPRESS specification:

*)
ENTITY right_angular_wedge
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  x : positive_length_measure;
  y : positive_length_measure;
  z : positive_length_measure;
  ltx : length_measure;
WHERE
  WR1: ((0.0 <= ltx) AND (ltx < x));
END_ENTITY;
(*

Attribute definitions:

position: the location and orientation of the axis system for the primitive; the right_angular_wedge has one vertex at position.location and its edges aligned with the placement axes in the positive sense;

x: the size of the right_angular_wedge along the placement X axis, (position.p[1]);

y: the size of the wedge along the placement Y axis, (position.p[21]);

z: the size of the wedge along the placement Z axis, (position.p[3]);

ltx: the length in the positive X direction of the smaller surface of the wedge;

Formal propositions:

WR1: ltx shall be non-negative and less than x .

6.4.10 rectangular_pyramid   EXPRESS-G

A rectangular_pyramid is a type of geometric_representation_item which is a solid pyramid with a rectangular base. The apex of the pyramid is directly above the centre point of the base. The rectangular_pyramid is specified by its position, which provides a placement coordinate system, its length, depth and height.

EXPRESS specification:

*)
ENTITY rectangular_pyramid
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  xlength : positive_length_measure;
  ylength : positive_length_measure;
  height : positive_length_measure;
END_ENTITY;
(*

Attribute definitions:

position: the location and orientation of the pyramid. position defines a placement coordinate system for the pyramid. The pyramid has one corner of its base at position.location and the edges of the base are aligned with the first two placement axes in the positive sense;

xlength: the length of the base along the placement X axis, (position.p[1]);

ylength: the length of the base along the placement Y axis, (position.p[21]);

height: the height of the apex above the plane of the base, measured in the direction of the placement Z axis (position.p[3]);

6.4.11 faceted_primitive   EXPRESS-G

A faceted_primitive is a type of geometric_representation_item which is a type of CSG primitive with planar faces. It is defined by a list of four or more points which locate the vertices. These points shall not be coplanar.

EXPRESS specification:

*)
ENTITY faceted_primitive
  SUPERTYPE OF (ONEOF (tetrahedron,
                       convex_hexahedron))
  SUBTYPE OF (geometric_representation_item);
  points : LIST[4:?] OF UNIQUE cartesian_point;
WHERE
  WR1: points[1].dim = 3;
END_ENTITY;
(*

Attribute definitions:

points: the cartesian_point s that locate the vertices of the faceted_primitive ;

Formal propositions:

WR1: The coordinate space dimension of points [1] shall be 3.

NOTE    The rule compatible_dimension ensures that all the cartesian_point attributes of this entity have the same dimension.

Informal propositions:

IP1: The points in the list points shall not be coplanar.

IP2: The points shall define a closed solid with planar faces.

6.4.12 tetrahedron   EXPRESS-G

A tetrahedron is a type of faceted_primitive with 4 vertices and 4 triangular faces. It is defined by the four points which locate the vertices. These points shall not be coplanar.

EXPRESS specification:

*)
ENTITY tetrahedron
  SUBTYPE OF (faceted_primitive);
WHERE
  WR1: SIZEOF(points) = 4;
  WR2: above_plane(points[1], points[2], points[3], points[4]) <> 0.0;
END_ENTITY;
(*

Formal propositions:

WR1: The list of points shall contain 4 cartesian_point s.

WR2: The points shall not be coplanar. This is tested by verifying that the fourth point is either above, or below, the plane of the other 3 points.

6.4.13 convex_hexahedron   EXPRESS-G

A convex_hexahedron is a type of faceted_primitive primitive with 8 vertices and 6 four-sided faces. It is defined by the 8 points which locate the vertices.

NOTE 1   See Figure (27) for further information about the faces and vertices.



Figure 27 —  Convex_hexahedron

Figure 27 —  Convex_hexahedron

EXPRESS specification:

*)
ENTITY convex_hexahedron
  SUBTYPE OF (faceted_primitive);
WHERE
  WR1: SIZEOF(points) = 8;
  WR2: above_plane(points[1], points[2], points[3], points[4]) = 0.0;
  WR3: above_plane(points[5], points[8], points[7], points[6]) = 0.0;
  WR4: above_plane(points[1], points[4], points[8], points[5]) = 0.0;
  WR5: above_plane(points[4], points[3], points[7], points[8]) = 0.0;
  WR6: above_plane(points[3], points[2], points[6], points[7]) = 0.0;
  WR7: above_plane(points[1], points[5], points[6], points[2]) = 0.0;
  WR8: same_side([points[1], points[2], points[3]], [points[5], points[6], points[7], points[8]]);
  WR9: same_side([points[1], points[4], points[8]], [points[3], points[7], points[6], points[2]]);
  WR10: same_side([points[1], points[2], points[5]], [points[3], points[7], points[8], points[4]]);
  WR11: same_side([points[5], points[6], points[7]], [points[1], points[2], points[3], points[4]]);
  WR12: same_side([points[3], points[7], points[6]], [points[1], points[4], points[8], points[5]]);
  WR13: same_side([points[3], points[7], points[8]], [points[1], points[5], points[6], points[2]]);
END_ENTITY;
(*

Formal propositions:

WR1: The list of points shall contain 8 cartesian_point s.

WR2: The first 4 points shall be coplanar.

WR3: The final 4 points shall be coplanar.

WR4: points [1], points [4], points [8], points [5], shall be coplanar.

WR5: points [4], points [3], points [7], points [8], shall be coplanar.

WR6: points [3], points [2], points [6], points [7], shall be coplanar.

WR7: points [1], points [5], points [6], points [2], shall be coplanar.

WR8: points [5], points [6], points [7], points [8], shall all lie on the same side of the plane of points [1], points [2], points [3].

WR9: points [4], points [3], points [7], points [8], shall be coplanar.

WR10: points [4], points [3], points [7], points [8], shall all lie on the same side of the plane of points [1], points [2], points [5].

WR11: points [1], points [2], points [3], points [4], shall all lie on the same side of the plane of points [5], points [6], points [7].

WR12: points [1], points [4], points [8], points [5], shall all lie on the same side of the plane of points [3], points [7], points [6].

WR13: points [1], points [5], points [6], points [2], shall all lie on the same side of the plane of points [3], points [7], points [8].

NOTE 2   The final 6 rules ensure that the points define a convex figure.

6.4.14 sphere   EXPRESS-G

A sphere is a type of geometric_representation_item which is a CSG primitive with a spherical shape defined by a centre and a radius.

EXPRESS specification:

*)
ENTITY sphere
  SUBTYPE OF (geometric_representation_item);
  radius : positive_length_measure;
  centre : point;
END_ENTITY;
(*

Attribute definitions:

radius: the radius of the sphere ;

centre: the location of the centre of the sphere ;

6.4.15 right_circular_cone   EXPRESS-G

A right_circular_cone is a type of geometric_representation_item which is a CSG primitive in the form of a cone which may be truncated. It is defined by an axis, a point on the axis, the semi-angle of the cone, and a distance giving the location in the negative direction along the axis from the point to the base of the cone. In addition, a radius is given, which, if nonzero, gives the size and location of a truncated face of the cone.

EXPRESS specification:

*)
ENTITY right_circular_cone
  SUBTYPE OF (geometric_representation_item);
  position : axis1_placement;
  height : positive_length_measure;
  radius : length_measure;
  semi_angle : plane_angle_measure;
WHERE
  WR1: radius >= 0.0;
END_ENTITY;
(*

Attribute definitions:

position: the location of a point on the axis and the direction of the axis; position.location is a point on the axis of the cone and at the centre of one of the planar circular faces, or, if radius is zero, at the apex; position.axis is the direction of the central axis of symmetry of the cone. The direction of the axis is out of the closed solid from the point at the centre of the top face, if truncated, or from the apex if the radius is zero.

height: the distance between the planar circular faces of the cone, if radius is greater than zero; or from the base to the apex, if radius equals zero;

radius: the radius of the cone at the point on the axis (position.location); if the radius is zero, the cone has an apex at this point,. if the radius is greater than zero, the cone is truncated;

semi_angle: one half the angle of the cone; this is the angle between the axis and a generator of the conical surface;

Formal propositions:

WR1: The radius shall be non-negative.

Informal propositions:

IP1: The semi_angle shall be between 0 and 90 degrees.

6.4.16 right_circular_cylinder   EXPRESS-G

A right_circular_cylinder is a type of geometric_representation_item which is a CSG primitive in the form of a solid cylinder of finite height. It is defined by an axis point at the centre of one planar circular face, an axis, a height, and a radius. The faces are perpendicular to the axis and are circular discs with the specified radius. The height is the distance from the first circular face centre in the positive direction of the axis to the second circular face centre.

EXPRESS specification:

*)
ENTITY right_circular_cylinder
  SUBTYPE OF (geometric_representation_item);
  position : axis1_placement;
  height : positive_length_measure;
  radius : positive_length_measure;
END_ENTITY;
(*

Attribute definitions:

position: the location of a point on the axis and the direction of the axis; position.location is a point on the axis and position.axis is the direction of the central axis of symmetry of the cylinder;

height: the distance between the planar circular faces of the cylinder;

radius: the radius of the right_circular_cylinder ;

6.4.17 eccentric_cone   EXPRESS-G

A eccentric_cone is a type of geometric_representation_item which is a CSG primitive which is a generalisation of the right_circular_cone . The eccentric_cone may have an elliptic cross section, and may have a central axis which is not perpendicular to the base. Depending upon the value of the ratio attribute it may be truncated, or may take the form of a generalised cylinder. When truncated the top face of the cone is parallel to the plane of the base and has a similar cross section.

NOTE 1   In the placement coordinate system defined by position the central point of the top face of the eccentric_cone has coordinates (x_offset, y_offset, height).

NOTE 2   If ratio = 0.0 the eccentric_cone includes the apex. If ratio = 1.0 the eccentric_cone is in the form of a generalised cylinder with all cross sections of the same dimensions.

EXPRESS specification:

*)
ENTITY eccentric_cone
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  semi_axis_1 : positive_length_measure;
  semi_axis_2 : positive_length_measure;
  height : positive_length_measure;
  x_offset : length_measure;
  y_offset : length_measure;
  ratio : REAL;
WHERE
  WR1: ratio >= 0.0;
END_ENTITY;
(*

Attribute definitions:

position: the location of the central point on the axis and the direction of semi_axis_1 . This defines the centre and plane of the base of the eccentric_cone ; position.p[3] is normal to the base of the eccentric_cone ;

semi_axis_1: the length of the first radius of the base of the cone in the direction of position.p[1]

semi_axis_2: the length of the second radius of the base of the cone in the direction of position.p[2]

height: the height of the cone above the base measured in the direction of position.p[3] ;

x_offset: the distance, in the direction of position.p[1] , to the central point of the top face of the cone from the point in the plane of this face directly above the central point of the base;

y_offset: the distance, in the direction of position.p[2] , to the central point of the top face of the cone from the point in the plane of this face directly above the central point of the base;

ratio: the ratio of a radius of the top face to the corresponding radius of the base of the cone;

Formal propositions:

WR1: The ratio shall not be negative.

6.4.18 torus   EXPRESS-G

A torus is a type of geometric_representation_item which is a solid primitive defined by sweeping the area of a circle (the generatrix) about a larger circle (the directrix). The directrix is defined by a location and direction axis1_placement .

EXPRESS specification:

*)
ENTITY torus
  SUBTYPE OF (geometric_representation_item);
  position : axis1_placement;
  major_radius : positive_length_measure;
  minor_radius : positive_length_measure;
WHERE
  WR1: major_radius > minor_radius;
END_ENTITY;
(*

Attribute definitions:

position: the location of the central point on the axis and the direction of the axis. This defines the centre and plane of the directrix

major_radius: the radius of the directrix;

minor_radius: the radius of the generatrix;

Formal propositions:

WR1: The major_radius shall be greater than the minor_radius .

6.4.19 ellipsoid   EXPRESS-G

A ellipsoid is a type of geometric_representation_item which is a type of CSG primitive in the form of a solid ellipsoid. It is defined by its location and orientation and by the lengths of the three semi-axes.

EXPRESS specification:

*)
ENTITY ellipsoid
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  semi_axis_1 : positive_length_measure;
  semi_axis_2 : positive_length_measure;
  semi_axis_3 : positive_length_measure;
END_ENTITY;
(*

Attribute definitions:

position: the location and orientation of the ellipsoid. position.location is a cartesian_point at the centre of the ellipsoid and the axes of the ellipsoid are aligned with the directions position.p;

semi_axis_1: the length of the semi-axis of the ellipsoid in the direction position.p[1] ;

semi_axis_2: the length of the semi-axis of the ellipsoid in the direction position.p[2] ;

semi_axis_3: the length of the semi-axis of the ellipsoid in the direction position.p[3] ;

6.4.20 cyclide_segment_solid   EXPRESS-G

A cyclide_segment_solid is a type of geometric_representation_item which is a partial Dupin cyclide solid (see dupin_cyclide_surface). This solid has two planar circular faces that in general have different radii and different normal directions. Around the boundary of each of these faces the curved surface of the solid is tangent to a right circular cone. In the following definition the semi-vertex angle of the cone is in each case specified with respect to the outward normal to its corresponding circular face.

NOTE    See Figure (28) for further information about the attributes.



Figure 28 —  Cyclide_segment_solid

Figure 28 —  Cyclide_segment_solid



Figure 29 —  Cross section of cyclide_segment_solid

Figure 29 —  Cross section of cyclide_segment_solid

EXPRESS specification:

*)
ENTITY cyclide_segment_solid
  SUBTYPE OF (geometric_representation_item);
  position : axis2_placement_3d;
  radius1 : positive_length_measure;
  radius2 : positive_length_measure;
  cone_angle1 : plane_angle_measure;
  cone_angle2 : plane_angle_measure;
  turn_angle : plane_angle_measure;
END_ENTITY;
(*

Attribute definitions:

position: the location and orientation of the solid; position.location is at the centre of the first circular end face of the solid; position.p[3] = position.axis is in the direction of the normal to the plane of symmetry passing through the centres of both circular end faces position.p[1] lies in the plane of the first circular end face and position.p[2] is directed into the solid;

radius1: the radius of the second circular end face of the solid;

radius2: the radius of the first circular end face of the solid;

cone_angle1: the semi-vertex angle of the cone tangent to the curved surface around the first circular end face of the solid, taken as positive if the cone vertex lies in the direction of the outward-facing normal from that face;

cone_angle2: the semi-vertex angle of the cone tangent to the curved surface around the second circular end face of the solid, taken as positive if the cone vertex lies in the direction of the outward-facing normal from the centre of that face;

turn_angle: the angle between the planes of the two circular faces of the solid, measured in the sector containing the solid;

Informal propositions:

IP1: The turn_angle shall lie in the range 0 to 360 degrees (see NOTE 2).

NOTE 2   In terms of the definition of the dupin_cyclide_surface , the turn_angle is the difference in the values of u between the isoparametric lines corresponding to the boundaries of the two end faces of the solid.

IP2: The two tangent cones at the ends of the segment have generators lying in the plane containing the directrix of the Dupin cyclide that define a quadrilateral circumscribing a circle. When one cone reduces to a cylinder its generators become a pair of parallel lines. When both cones are cylinders all four generators are parallel and the circumscribed circle lies at infinity (see NOTE 3).

NOTE 3   The attributes of the cyclide_segment_solid are not mutually independent. Informal proposition IP2 expresses this fact, and states the simplest geometric characterisation of the dependency. Any correctly generated cyclide_segment_solid will satisfy IP2. The condition is illustrated in Figure (29) .

6.4.21 half_space_solid   EXPRESS-G

A half_space_solid is a type of geometric_representation_item which is defined by the half space which is the regular subset of the domain which lies on one side of an unbounded surface. The domain is limited by an orthogonal box in the boxed_half_space subtype. The side of the surface which is in the half space is determined by the surface normals and the agreement flag. If the agreement flag is TRUE, then the subset is the one the normals point away from. If the agreement flag is FALSE, then the subset is the one the normals point into. For a valid half_space_solid , the surface shall divide the domain into exactly two subsets. Also, within the domain the surface shall be manifold and all the surface normals shall point into the same subset.

NOTE    A half_space_solid is not a subtype of solid_model ; half_space_solid s are only useful as operands in Boolean expressions.

EXPRESS specification:

*)
ENTITY half_space_solid
  SUBTYPE OF (geometric_representation_item);
  base_surface : surface;
  agreement_flag : BOOLEAN;
END_ENTITY;
(*

Attribute definitions:

base_surface: a surface defining the boundary of the half space;

agreement_flag: the agreement_flag is TRUE if the normal to the base_surface points away from the material of the half_space_solid ;

Informal propositions:

IP1: The base_surface shall divide the domain into exactly two subsets. If the half_space_solid is of subtype boxed_half_space , the domainin question is that of the attribute enclosure .

6.4.22 boxed_half_space   EXPRESS-G

A boxed_half_space is a type of half_space_solid that is trimmed by a surrounding rectangular box. The box has its edges parallel to the coordinate axes of the geometric coordinate system.

NOTE    The purpose of the box is to facilitate CSG computations by producing a solid of finite size.

EXPRESS specification:

*)
ENTITY boxed_half_space
  SUBTYPE OF (half_space_solid);
  enclosure : box_domain;
END_ENTITY;
(*

Attribute definitions:

enclosure: the box which bounds the half space for computational purposes only;

6.4.23 box_domain   EXPRESS-G

A box_domain is a type of founded_item which is an orthogonal box oriented parallel to the axes of the geometric coordinate system which may be used to limit the domain of a half_space_solid . The box_domain is specified by the point at the corner of the box with minimum coordinates, and the lengths of the sides measured in the directions of the coordinate axes.e normals shall point into the same subset.

EXPRESS specification:

*)
ENTITY box_domain
  SUBTYPE OF (founded_item);
  corner : cartesian_point;
  xlength : positive_length_measure;
  ylength : positive_length_measure;
  zlength : positive_length_measure;
WHERE
  WR1: SIZEOF(QUERY(item <* USEDIN(SELF,'')| NOT ('GEOMETRIC_MODEL_SCHEMA.BOXED_HALF_SPACE' IN TYPEOF(item)))) = 0;
END_ENTITY;
(*

Attribute definitions:

corner: a cartesian_point at the corner of box with minimum coordinate values;

xlength: the length of the box_domain along the edge parallelto the x axis;

ylength: the length of the box_domain along the edge parallelto the y ayis;

zlength: the length of the box_domain along the edge parallelto the z azis;

Formal propositions:

WR1: The only use of the box domain shall be to define the limits for a boxed_half_space .

6.4.24 primitive_2d   EXPRESS-G

A primitive_2d is a type of geometric_representation_item which is a two-dimensional CSG primitive represented as either a circular_area , elliptic_area , rectangular_area , polygonal_area , or half_space_2d . primitive_2d s may be used with other two-dimensional objects to create csg_solid s in 2D.

NOTE    The combination of primitive_2d s and any of the three-dimensional csg_primitive s in a boolean_result is prohibited by the constraints on geometric_representation_item in the geometry schema.

EXPRESS specification:

*)
ENTITY primitive_2d
  SUPERTYPE OF (ONEOF (circular_area,
                       elliptic_area,
                       rectangular_area,
                       polygonal_area,
                       half_space_2d))
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: SELF\geometric_representation_item.dim = 2;
END_ENTITY;
(*

Formal propositions:

WR1: The coordinate space dimensionality of a primitive_2d shall be 2.

6.4.25 circular_area   EXPRESS-G

A circular_area is a type of primitive_2d which has the form of a circular disk. It is defined by a centre point and a radius.

EXPRESS specification:

*)
ENTITY circular_area
  SUBTYPE OF (primitive_2d);
  centre : cartesian_point;
  radius : positive_length_measure;
END_ENTITY;
(*

Attribute definitions:

centre: the cartesian_point at the centre of the circular_area ;

radius: the radius of the circular_area ;

6.4.26 elliptic_area   EXPRESS-G

A elliptic_area is a type of primitive_2d which has an ellipse as outer boundary. It is defined by its position and the lengths of the semi-axes of the bounding ellipse.

EXPRESS specification:

*)
ENTITY elliptic_area
  SUBTYPE OF (primitive_2d);
  position : axis2_placement_2d;
  semi_axis_1 : positive_length_measure;
  semi_axis_2 : positive_length_measure;
END_ENTITY;
(*

Attribute definitions:

position: the location and orientation of the elliptic_area ; the elliptic_area has its centre at position.location and its principal axes are aligned with the placement axes;

semi_axis_1: the length of the semi-axis aligned with the placement X axis ( position.p[1] );

semi_axis_2: the length of the semi-axis aligned with the placement Y axis ( position.p[2] );

6.4.27 rectangular_area   EXPRESS-G

A rectangular_area is a type of primitive_2d with a rectangular shape. It is defined by a placement coordinate system and linear dimensions. It is specified by the positive lengths x and y along the axes of the placement coordinate system, and has one corner at the origin of the placement coordinate system.

EXPRESS specification:

*)
ENTITY rectangular_area
  SUBTYPE OF (primitive_2d);
  position : axis2_placement_2d;
  x : positive_length_measure;
  y : positive_length_measure;
END_ENTITY;
(*

Attribute definitions:

position: the location and orientation of the rectangular_area ; the rectangular_area has one vertex (with minimum coordinate values) at position.location and its edges are aligned with the placement axes in the positive sense;

x: the length of the rectangular_area along the placement X axis ( position.p[1] );

y: the length of the rectangular_area along the placement Y axis ( position.p[2] );

6.4.28 polygonal_area   EXPRESS-G

A polygonal_area is a type of primitive_2d with straight edges. It is defined by a list of three or more cartesian_point s which implicitly define edges connecting consecutive points. The final edge is from the last point in the list of bounds to the first.

EXPRESS specification:

*)
ENTITY polygonal_area
  SUBTYPE OF (primitive_2d);
  bounds : LIST[3:?] OF UNIQUE cartesian_point;
END_ENTITY;
(*

Attribute definitions:

bounds: the two dimensional cartesian_point that are at the vertices of the polygonal_area ; the linear segments joining consecutive points form the boundary of the polygonal_area ;

Informal propositions:

IP1: The implicit edges of the polygonal_area shall not intersect each other.

6.4.29 area_with_outer_boundary   EXPRESS-G

An area_with_outer_boundary is a type of half_space_2d which is the finite interior of a closed curve. It is defined by its boundary, a composite_curve which is required to be closed.

EXPRESS specification:

*)
ENTITY area_with_outer_boundary
  SUBTYPE OF (half_space_2d);
  SELF\half_space_2d.base_curve : composite_curve;
WHERE
  WR1: base_curve\composite_curve.closed_curve = TRUE;
END_ENTITY;
(*

Attribute definitions:

base_curve: the two dimensional composite_curve that forms the boundary of the area_with_outer_boundary ;

Formal propositions:

WR1: The closed_curve flag of the base_curve shall have the value TRUE.

Informal propositions:

IP1: The agreement_flag shall have the value which ensures that the half_space_2d defined is the finite region inside the closed composite_curve .

6.4.30 half_space_2d   EXPRESS-G

A half_space_2d is a type of primitive_2d which is a partially bounded region of two-dimensional space. It is defined as the half plane which is the regular subset of the domain that lies on one side of an unbounded curve, or, of a closed curve. The domain is limited by a rectangle in the rectangled_half_space subtype. The side of the curve which is in the half plane is determined by the curve direction and an agreement_flag . For a valid half_space_2d , the curve shall divide the 2D space into exactly two connected regions. Within the domain of the half_space_2d the base_curve shall be manifold.

NOTE    A half_space_2d may be used as an operand in a Boolean operation provided the final CSG object is finite and arcwise connected; only subtypes which are also of type bounded_primitive_2d may define a simple CSG solid with no Boolean operation.

EXPRESS specification:

*)
ENTITY half_space_2d
  SUBTYPE OF (primitive_2d);
  base_curve : curve;
  agreement_flag : BOOLEAN;
END_ENTITY;
(*

Attribute definitions:

base_curve: the two dimensional curve defining the boundary of the half plane;

agreement_flag: a BOOLEAN value indicating to which side of the curve the half_space_2d lies; if the agreement_flag is TRUE, then the region defined is the one on the left as the curve is traversed in the direction of increasing parameter; if the agreement_flag is FALSE, then the region is on the right as the curve is traversed in the direction of increasing parameter;

Informal propositions:

IP1: The base_curve shall not be self-intersecting.

IP2: The base_curve shall divide the domain into exactly two connected subsets. This implies that, unless the half_space_2d is of type rectangled_half_space , the base_curve shall be unbounded or closed.

6.4.31 rectangled_half_space   EXPRESS-G

A rectangled_half_space is a type of half_space_2d which is trimmed by a surrounding rectangle. The trimming rectangle has its edges parallel to the coordinate axes of the geometric coordinate system.

EXPRESS specification:

*)
ENTITY rectangled_half_space
  SUBTYPE OF (half_space_2d);
  enclosure : rectangle_domain;
END_ENTITY;
(*

Attribute definitions:

enclosure: the rectangle which bounds the half plane for computational purposes;

6.4.32 rectangle_domain   EXPRESS-G

A rectangle_domain is a type of founded_item which is a rectangular area in two-dimensional space with its edges parallel to the coordinate axes. It may be used to limit the domain of a half_space_2d .

EXPRESS specification:

*)
ENTITY rectangle_domain
  SUBTYPE OF (founded_item);
  corner : cartesian_point;
  xlength : positive_length_measure;
  ylength : positive_length_measure;
WHERE
  WR1: SIZEOF(QUERY(item <* USEDIN(SELF, '')| NOT ('GEOMETRIC_MODEL_SCHEMA.RECTANGLED_HALF_SPACE' IN TYPEOF(item)))) = 0;
END_ENTITY;
(*

Attribute definitions:

corner: a cartesian_point at the corner of box with minimum coordinate values;

xlength: the length of the rectangle_domain along the edge parallelto the x axis;

ylength: the length of the rectangle_domain along the edge parallelto the y ayis;

Formal propositions:

WR1: The only use of the rectangle_domain shall be to define the limits for a rectangled_half_space .

6.4.33 swept_face_solid   EXPRESS-G

A swept_face_solid is a type of solid_model which collects the entities which are defined procedurally by a sweeping action on planar figures. The position in space of the swept solid will be dependent upon the position of the swept_face . The swept_face will be a face of the swept_face_solid , except in the case of a solid of revolution with angle equal to 360 degrees.

EXPRESS specification:

*)
ENTITY swept_face_solid
  SUPERTYPE OF (ONEOF (extruded_face_solid,
                       revolved_face_solid,
                       surface_curve_swept_face_solid))
  SUBTYPE OF (solid_model);
  swept_face : face_surface;
WHERE
  WR1: 'GEOMETRY_SCHEMA.PLANE' IN TYPEOF(swept_face.face_geometry);
END_ENTITY;
(*

Attribute definitions:

swept_face: the face_surface defining the area to be swept. The extent of this face is defined by the bounds attribute of the referenced face_surface .

Formal propositions:

WR1: The swept_face shall be planar. The face_geometry attribute of the face_surface referenced shall be a plane .

6.4.34 extruded_face_solid   EXPRESS-G

A extruded_face_solid is a type of swept_face_solid which is a solid defined by sweeping a planar face_surface . The direction of translation is defined by a direction , and the length of the translation is defined by a distance depth . The planar face may have holes which will sweep into holes in the solid.

EXPRESS specification:

*)
ENTITY extruded_face_solid
  SUBTYPE OF (swept_face_solid);
  extruded_direction : direction;
  depth : positive_length_measure;
WHERE
  WR1: dot_product( (SELF\swept_face_solid.swept_face.face_geometry\ elementary_surface.position.p[3]), extruded_direction) <> 0.0;
END_ENTITY;
(*

Attribute definitions:

extruded_direction: the direction in which the face is to be swept;

depth: the distance the face is to be swept;

Formal propositions:

WR1: extruded_direction shall not be perpendicular to the normal to the plane of the swept_face .

6.4.35 revolved_face_solid   EXPRESS-G

A revolved_face_solid is a type of swept_face_solid which is a solid of revolution formed by revolving a planar face about an axis. The axis shall be in the plane of the face and the axis shall not intersect the interior of the face. The planar face may have holes which will sweep into holes in the solid. The direction of revolution is clockwise when viewed along the axis in the positive direction. More precisely if A is the axis location and d is the axis direction and C is an arc on the surface of revolution generated by an arbitrary point p on the boundary of the face, then C leaves p in direction d × (p - A) as the face is revolved.

NOTE    See Figure (30) for illustration of attributes.



Figure 30 —  Revolved face solid

Figure 30 —  Revolved face solid

EXPRESS specification:

*)
ENTITY revolved_face_solid
  SUBTYPE OF (swept_face_solid);
  axis : axis1_placement;
  angle : plane_angle_measure;
DERIVE
  axis_line : line := representation_item('')|| geometric_representation_item()|| curve()|| line(axis.location, representation_item('')|| geometric_representation_item()|| vector(axis.z, 1.0));
END_ENTITY;
(*

Attribute definitions:

axis: the axis about which revolution will take place;

angle: the angle through which the sweep will be made; this angle is measured from the plane of the swept face;

axis_line: the line of the axis of revolution;

Informal propositions:

IP1: axis_line shall lie in plane of swept_face attribute of the swept_face_solid supertype.

IP2: The axis_line shall not intersect the interior of the swept_face .

IP3: angle shall lie in the range 0 < angle ≤ 360 degrees.

6.4.36 surface_curve_swept_face_solid   EXPRESS-G

A surface_curve_swept_face_solid is a type of swept_face_solid which is the result of sweeping a face along a directrix lying on a reference_surface . The orientation of the swept_face is related to the direction of the surface normal. The swept_face is required to be a face_surface lying in the plane z = 0 and this is swept along the directrix in such a way that the origin of the local coordinate system used to define the swept_face is on the directrix and the local X axis is in the direction of the normal to the reference_surface at the current point. The resulting solid has the property that the cross section of the surface by the normal plane to the directrix at any point is a copy of the swept_face .

The orientation of the swept_face geometry as it sweeps along the directrix is precisely defined by a cartesian_transformation_operator_3d with attributes:

local_origin as point (0,0,0),

axis1 as the normal N to the reference_surface at the point of the directrix with parameter u .

axis3 as the direction of the tangent vector t at the point of the directrix with parameter u .

The remaining attributes are defaulted to define a corresponding transformation matrix T ( u ), which varies with the directrix parameter u .

NOTE    The geometric shape of the solid is not dependent upon the curve parametrisation; the volume depends upon the area of the face and the length of the directrix .

EXPRESS specification:

*)
ENTITY surface_curve_swept_face_solid
  SUBTYPE OF (swept_face_solid);
  directrix : curve;
  start_param : REAL;
  end_param : REAL;
  reference_surface : surface;
WHERE
  WR1: (NOT ('GEOMETRY_SCHEMA.SURFACE_CURVE' IN TYPEOF(directrix))) OR (reference_surface IN (directrix\surface_curve.basis_surface));
END_ENTITY;
(*

Attribute definitions:

directrix: the curve used to define the sweeping operation; the solid is generated by sweeping the swept_face along the directrix .

start_param: the parameter value on the directrix at which the sweeping operation commences;

end_param: the parameter value on the directrix at which the sweeping operation ends;

reference_surface: the surface containing the directrix ;

Formal propositions:

WR1: If the directrix is a surface_curve then the reference_surface shall be in the basis_surface set for this curve.

Informal propositions:

IP1: The swept_face shall lie in the plane z = 0.

IP2: The directrix shall lie on the reference_surface .

NOTE 2   In the description above the normal to the reference_surface at the current point is denoted N .

6.4.37 swept_area_solid   EXPRESS-G

A swept_area_solid is a type of solid_model which collects the entities which are defined procedurally by a sweeping action on planar bounded surfaces. The position in space of the swept solid will be dependent upon the position of the swept_area . The swept_area will be a face of the resulting swept_area_solid , except for the case of a revolved_area_solid with angle equal to 360 degrees.

EXPRESS specification:

*)
ENTITY swept_area_solid
  SUPERTYPE OF (ONEOF (revolved_area_solid,
                       extruded_area_solid,
                       surface_curve_swept_area_solid))
  SUBTYPE OF (solid_model);
  swept_area : curve_bounded_surface;
WHERE
  WR1: 'GEOMETRY_SCHEMA.PLANE' IN TYPEOF(swept_area.basis_surface);
END_ENTITY;
(*

Attribute definitions:

swept_area: the curve_bounded_surface defining the area to be swept; the extent of this area is defined by the boundaries attribute of the referenced curve_bounded_surface ;

Formal propositions:

WR1: The swept_area shall be planar. The basis_surface attribute of the curve_bounded_surface referenced shall be a plane .

6.4.38 extruded_area_solid   EXPRESS-G

A extruded_area_solid is a type of swept_area_solid which is a solid defined by sweeping a bounded planar surface. The direction of translation is defined by a direction , and the length of the translation is defined by a distance depth . The planar area may have holes which will sweep into holes in the solid.

EXPRESS specification:

*)
ENTITY extruded_area_solid
  SUBTYPE OF (swept_area_solid);
  extruded_direction : direction;
  depth : positive_length_measure;
WHERE
  WR1: dot_product( (SELF\swept_area_solid.swept_area.basis_surface\ elementary_surface.position.p[3]), extruded_direction) <> 0.0;
END_ENTITY;
(*

Attribute definitions:

extruded_direction: the direction in which the area is to be swept;

depth: the distance the area is to be swept;

Formal propositions:

WR1: extruded_direction shall not be perpendicular to the normal to the plane of the swept_area .

6.4.39 revolved_area_solid   EXPRESS-G

A revolved_area_solid is a type of swept_area_solid which is a solid formed by revolving a planar bounded surface about an axis. The axis shall be in the plane of the surface and the axis shall not intersect the interior of the bounded surface. The bounded surface may have holes which will sweep into holes in the solid. The direction of revolution is clockwise when viewed along the axis in the positive direction. More precisely if A is the axis location and d is the axis direction and C is an arc on the surface of revolution generated by an arbitrary point p on the boundary of the swept_area , then C leaves p in direction d × (p - A) as the area is revolved.

EXPRESS specification:

*)
ENTITY revolved_area_solid
  SUBTYPE OF (swept_area_solid);
  axis : axis1_placement;
  angle : plane_angle_measure;
DERIVE
  axis_line : line := representation_item('')|| geometric_representation_item()|| curve()|| line(axis.location, representation_item('')|| geometric_representation_item()|| vector(axis.z, 1.0));
END_ENTITY;
(*

Attribute definitions:

axis: the axis about which revolution will take place;

angle: the angle through which the sweep will be made; this angle is measured from the plane of the swept_area ;

axis_line: the line of the axis of revolution;

Informal propositions:

IP1: axis_line shall lie in plane of swept_area attribute of the swept_area_solid supertype.

IP2: The axis_line shall not intersect the interior of the swept_area .

IP3: angle shall lie in the range 0 < angle ≤ 360 degrees.

6.4.40 surface_curve_swept_area_solid   EXPRESS-G

A surface_curve_swept_area_solid is a type of swept_area_solid which is the result of sweeping a face along a directrix lying on a reference_surface . The orientation of the swept_area is related to the direction of the surface normal.

The swept_area is required to be a curve_bounded_surface lying in the plane z = 0 and this is swept along the directrix in such a way that the origin of the local coordinate system used to define the swept_area . is on the directrix and the local X axis is in the direction of the normal to the reference_surface at the current point. The resulting solid has the property that the cross section of the surface by the normal plane to the directrix at any point is a copy of the swept_area .

The orientation of the swept_area as it sweeps along the directrix is precisely defined by a cartesian_transformation_operator_3d with attributes:

local_origin as point (0,0,0),

axis1 as the normal N to the reference_surface at the point of the directrix with parameter u .

axis3 as the direction of the tangent vector t at the point of the directrix with parameter u .

The remaining attributes are defaulted to define a corresponding transformation matrix T ( u ), which varies with the directrix parameter u .

NOTE    The geometric shape of the solid is not dependent upon the curve parametrisation; the volume depends upon the area swept and the length of the directrix .

EXPRESS specification:

*)
ENTITY surface_curve_swept_area_solid
  SUBTYPE OF (swept_area_solid);
  directrix : curve;
  start_param : REAL;
  end_param : REAL;
  reference_surface : surface;
WHERE
  WR1: (NOT ('GEOMETRY_SCHEMA.SURFACE_CURVE' IN TYPEOF(directrix))) OR (reference_surface IN (directrix\surface_curve.basis_surface));
END_ENTITY;
(*

Attribute definitions:

directrix: the curve used to define the sweeping operation; the solid is generated by sweeping the swept_area along the directrix ;

start_param: the parameter value on the directrix at which the sweeping operation commences;

end_param: the parameter value on the directrix at which the sweeping operation ends;

reference_surface: the surface containing the directrix ;

Formal propositions:

WR1: If the directrix is a surface_curve then the reference_surface shall be in the basis_surface set for this curve..

Informal propositions:

IP1: The swept_area shall lie in the plane z = 0.

IP2: The directrix shall lie on the reference_surface .

6.4.41 swept_disk_solid   EXPRESS-G

A swept_disk_solid is a type of swept_area_solid which is the solid produced by sweeping a circular disk along a three dimensional curve. During the sweeping operation the normal to the plane of the circular disk is in the direction of the tangent to the directrix curve and the centre of the disk lies on the directrix . The circular disk may, optionally, have a central hole, in this case the resulting solid has a through hole, or, an internal void when the directrix forms a close curve.

EXAMPLE    A solid in the form of a toroidal shell of major radius R 1 , minor radius R 2 and shell thickness t could be defined as an instance of swept_disk_solid with the following attributes:

directrix : a circle in 3D space of radius R 1 ,

radius : R 2 ,

inner_radius : R 2 - t ,

start_param : 0,

end_param : 360 degrees.

EXPRESS specification:

*)
ENTITY swept_disk_solid
  SUBTYPE OF (solid_model);
  directrix : curve;
  radius : positive_length_measure;
  inner_radius : OPTIONAL positive_length_measure;
  start_param : REAL;
  end_param : REAL;
WHERE
  WR1: directrix.dim = 3;
  WR2: (NOT EXISTS(inner_radius)) OR (radius > inner_radius);
END_ENTITY;
(*

Attribute definitions:

directrix: the curve used to define the sweeping operation. The solid is generated by sweeping a circular disk along the directrix ;

radius: the radius of the circular disk to be swept along the directrix;

inner_radius: an optional attribute, if present it defines the radius of a circular hole in the centre of the disk;

start_param: the parameter value on the directrix at which the sweeping operation starts;

end_param: the parameter value on the directrix at which the sweeping operation ends;

Formal propositions:

WR1: The directrix shall be a curve in three dimensional space.

NOTE    A simple solid with no self-intersections will be produced if the directrix is an open curve with radius of curvature at all points greater than radius .

WR2: If inner_radius exists then radius shall be greater than inner_radius .

6.4.42 trimmed_volume   EXPRESS-G

A trimmed_volume is a type of solid_model for which the boundaries are the 6 constant parameter surfaces u = u1, u = u2, v = v1, v = v2, w = w1, and w = w2 , of the basis_volume . In the three dimensional parameter space of the basis_volume the domain of the trimmed_volume is a cuboid.

NOTE 1   A trimmed_volume for which the basis_volume is not closed in any parameter direction will satisfy the additional constraints u1 < u2, v1 < v2, w1 < w2.

NOTE 2   If the basis_volume is closed in one or more parameter directions and uses circular functions (sine and cosine) in its definition the second value of a parameter may be less than the first value of that parameter. This is interpreted as a periodic definition of a portion of the volume from the second parameter boundary to the first including the `seam' of the parameter value.

EXAMPLE    If refcyl is a reference to a cylindrical_volume then:

trimmed_volume(refcyl, 0.0, 0.5, 0.0, 1,0, 0.0, 1.0) defines a solid half cylinder whose vertical face is defined by the plane u = 0 ,

trimmed_volume(refcyl, 0.875, 0.125, 0.0, 1.0, 0.9, 1.0) defines a quadrant of a cylindrical shell of thickness (0.1 radius 1) centred on u = 0 . The trimming values for u are from 0.875 to 0.125 (equivalent to 1.125).

EXPRESS specification:

*)
ENTITY trimmed_volume
  SUBTYPE OF (solid_model);
  basis_volume : volume;
  u1 : parameter_value;
  u2 : parameter_value;
  v1 : parameter_value;
  v2 : parameter_value;
  w1 : parameter_value;
  w2 : parameter_value;
WHERE
  WR1: u1 <> u2;
  WR2: v1 <> v2;
  WR3: w1 <> w2;
END_ENTITY;
(*

Attribute definitions:

basis_volume: the volume to be trimmed;

u1: the first value for the The two trimming values for u shall be distinct.parameter;

u2: the second value for the u parameter;

v1: the first value for the v parameter;

v2: the second value for the v parameter;

w1: the first value for the w parameter;

w2: the second value for the w parameter;

Formal propositions:

WR1: The two trimming values for The two trimming values for u shall be distinct.shall be distinct.

WR2: The two trimming values for The two trimming values for v shall be distinct.shall be distinct.

WR3: The two trimming values for The two trimming values for u shall be distinct.shall be distinct.

6.4.43 solid_replica   EXPRESS-G

A solid_replica is a type of solid_model which is a copy of another solid at a new location.

EXPRESS specification:

*)
ENTITY solid_replica
  SUBTYPE OF (solid_model);
  parent_solid : solid_model;
  transformation : cartesian_transformation_operator_3d;
WHERE
  WR1: acyclic_solid_replica(SELF, parent_solid);
  WR2: parent_solid\geometric_representation_item.dim = 3;
END_ENTITY;
(*

Attribute definitions:

parent_solid: the solid model which is being copied to create the solid_replica ;

transformation: a cartesian_transformation_operator_3d which defines the location and orientation of the solid_replica and any associated scaling factor;

Formal propositions:

WR1: A solid_replica shall not participate in its own definition.

WR2: The parent_solid shall be of dimension 3.

6.4.44 shell_based_surface_model   EXPRESS-G

A shell_based_surface_model is a type of geometric_representation_item which is described by a set of open or closed shells of dimensionality 2. The shells shall not intersect except at edges and vertices. In particular, distinct faces may not intersect. A complete face of one shell may be shared with another shell. Coincident portions of shells shall both reference the same faces, edges and vertices defining the coincident region. There shall be at least one shell . A shell may exist independently of a shell_based_surface_model .

EXPRESS specification:

*)
ENTITY shell_based_surface_model
  SUBTYPE OF (geometric_representation_item);
  sbsm_boundary : SET[1:?] OF shell;
WHERE
  WR1: constraints_geometry_shell_based_surface_model(SELF);
END_ENTITY;
(*

Attribute definitions:

sbsm_boundary: the set of shell s which define the shell_based_surface_model ;

Formal propositions:

WR1: The shell s which make up the shell_based_surface_model shall be of type open_shell or closed_shell only.

Informal propositions:

IP1: The topological dimensionality of the shell_based_surface_model is 2.

IP2: The shell s shall not overlap or intersect except at common face s, edge s or vertex s.

6.4.45 face_based_surface_model   EXPRESS-G

A face_based_surface_model is a type of geometric_representation_item which is described by a set of connected_face_set s of dimensionality 2. The connected_face_set s shall not intersect except at edges and vertices, except that a face in one connected face set may overlap a face in another connected face set, provided the face boundaries are identical. There shall be at least one connected_face_set . A connected_face_set may exist independently of a face_based_surface_model .

EXPRESS specification:

*)
ENTITY face_based_surface_model
  SUBTYPE OF (geometric_representation_item);
  fbsm_faces : SET[1:?] OF connected_face_set;
END_ENTITY;
(*

Attribute definitions:

fbsm_faces: the set of connected_face_set s which define the face_based_surface_model ;

Informal propositions:

IP1: The connected_face_set >s shall not overlap or intersect except at common face s, edge s or vertex s.

IP2: The topological dimensionality of the fbsm_faces is 2.

6.4.46 shell_based_wireframe_model   EXPRESS-G

A shell_based_wireframe_model is a type of geometric_representation_item which is described by a graph of edges and vertices embedded in R 3 . The graph may be disconnected. Within the graph the edges do not intersect except at their boundaries (i.e., vertices). The geometry associated with a vertex shall be consistent with the geometry associated with any of the edges of which the vertex forms a boundary. A shell_based_wireframe_model is represented by one or more shell s of dimensionality 0 or 1. There shall be at least one shell . A shell may exist independently of a shell_based_wireframe_model .

EXPRESS specification:

*)
ENTITY shell_based_wireframe_model
  SUBTYPE OF (geometric_representation_item);
  sbwm_boundary : SET[1:?] OF shell;
WHERE
  WR1: constraints_geometry_shell_based_wireframe_model(SELF);
END_ENTITY;
(*

Attribute definitions:

sbwm_boundary: the set of vertex_shell s and/or wire_shell s which define the shell_based_wireframe_model ;

Formal propositions:

WR1: Each shell shall be either of type vertex_shell or wire_shell . The function constraints_geometry_shell_based_wireframe_model returns TRUE, where the function evaluates these geometric constraints and finds them satisfied.

Informal propositions:

IP1: The topological dimensionality of sbwm_boundary is less than 2.

IP2: The shell_based_wireframe_model has positive and finite extent.

IP3: The shell s shall not overlap or intersect except at common edge s or vertex s.

6.4.47 edge_based_wireframe_model   EXPRESS-G

An edge_based_wireframe_model is a type of geometric_representation_item which is described by a graph of edges and vertices embedded in R 3 . The graph may be disconnected. Within the graph the edges do not intersect except at their boundaries (i.e., vertices). The geometry associated with a vertex shall be consistent with the geometry associated with any of the edges of which the vertex forms a boundary. An edge_based_wireframe_model is represented by one or more connected_edge_set s of dimensionality 1. There shall be at least one connected_edge_set . A connected_edge_set may exist independently of an edge_based_wireframe_model .

EXPRESS specification:

*)
ENTITY edge_based_wireframe_model
  SUBTYPE OF (geometric_representation_item);
  ebwm_boundary : SET[1:?] OF connected_edge_set;
END_ENTITY;
(*

Attribute definitions:

ebwm_boundary: the set of connected_edge_set s comprising the edge_based_wireframe_model ;

Informal propositions:

IP1: The dimensionality of edge_based_wireframe_model is 1.

IP2: The connected_edge_set s shall not overlap or intersect except at common edge s or vertex s.

6.4.48 geometric_set   EXPRESS-G

A geometric_set is a type of geometric_representation_item which is intended for the transfer of models when a topological structure is not available.

EXPRESS specification:

*)
ENTITY geometric_set
  SUPERTYPE OF (ONEOF (geometric_curve_set,
                       geometric_set_replica))
  SUBTYPE OF (geometric_representation_item);
  elements : SET[1:?] OF geometric_set_select;
END_ENTITY;
(*

Attribute definitions:

elements: the geometric elements which make up the geometric_set , these may be point s, curve s or surface s; but are required to be of the same coordinate space dimensionality;

6.4.49 geometric_curve_set   EXPRESS-G

An geometric_curve_set is a type of geometric_set which is a collection of two- or three-dimensional point s and curve s.

EXPRESS specification:

*)
ENTITY geometric_curve_set
  SUBTYPE OF (geometric_set);
WHERE
  WR1: SIZEOF(QUERY(temp <* SELF\geometric_set.elements |NOT (('GEOMETRY_SCHEMA.CURVE' IN TYPEOF(temp)) OR ('GEOMETRY_SCHEMA.POINT' IN TYPEOF(temp))) )) = 0;
END_ENTITY;
(*

Formal propositions:

WR1: Only curves and points shall be included in a geometric_curve_set.

6.4.50 sectioned_spine   EXPRESS-G

An sectioned_spine is a type of geometric_curve_set which is a representation of the shape of a three dimensional object composed of a spine curve and a number of planar cross_sections . The shape is defined between the first element of cross_sections and the last element of this set.

NOTE    A sectioned_spine may be used to represent a surface or a solid but the interpolation of the shape between the cross-sections is not defined. For the representation of a solid all cross-sections are closed curves.

EXPRESS specification:

*)
ENTITY sectioned_spine
  SUBTYPE OF (geometric_curve_set);
  cross_sections : LIST[2:?] OF curve;
  spine_points : LIST[2:?] OF point;
WHERE
  WR1: SIZEOF(SELF\geometric_set.elements) = 1;
  WR2: 'GEOMETRY_SCHEMA.CURVE' IN TYPEOF(SELF\geometric_set.elements[1]);
  WR3: SIZEOF(cross_sections) = SIZEOF(spine_points);
  WR4: SELF\geometric_representation_item.dim = 3;
END_ENTITY;
(*

Attribute definitions:

cross_sections: the set of 2 or more planar cross-sections; each cross-section is defined in its correct location relative to the spine curve;

spine_points: the set of point s on the spine, each point lies in the plane of the corresponding cross-section;

Formal propositions:

WR1: The elements set shall contain a single item.

WR2: The elements set shall contain a single item.

WR3: The set of cross_sections and the set of spine_points shall be of the same size.

WR4: The space dimensionality of the sectioned_spine shall be 3.

Informal propositions:

IP1: Each curve in the cross_sections set shall be a planar curve.

IP2: Each point in the spine_points set shall lie in the plane of the corresponding curve from the cross_sections .

6.4.51 geometric_set_replica   EXPRESS-G

An geometric_set_replica is a type of geometric_set which defines a replica of a geometric_set in a different location. Each element of the set is transformed by the same transformation which may include scaling. The type of set produced will correspond to that of the parent_set

EXPRESS specification:

*)
ENTITY geometric_set_replica
  SUBTYPE OF (geometric_set);
  parent_set : geometric_set;
  transformation : cartesian_transformation_operator;
DERIVE
  SELF\geometric_set.elements : SET[1:?] OF geometric_set_select := build_transformed_set(transformation, parent_set);
WHERE
  WR1: acyclic_set_replica(SELF, parent_set);
END_ENTITY;
(*

Attribute definitions:

parent_set: a geometric_set which is being copied to create the geometric_set_replica ;

transformation: a Cartesian transformation operator which defines the location and orientation of the geometric_set_replica ;

elements: the set of elements resulting from the transformation of the parent_set ;

Formal propositions:

WR1: A geometric_set_replica shall not participate in its own definition.

6.4.52 tessellated_shape_representation   EXPRESS-G

A tessellated_shape_representation is a type of shape_representation in which the geometry is approximately represented by a tessellated model with planar facets.

EXPRESS specification:

*)
ENTITY tessellated_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: 'REPRESENTATION_SCHEMA.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF(SELF\representation.context_of_items);
  WR2: NOT( SIZEOF(QUERY ( it <* SELF.items| 'GEOMETRIC_MODEL_SCHEMA.TESSELLATED_ITEM' IN TYPEOF (it))) = 0 );
END_ENTITY;
(*

Formal propositions:

WR1: The context of the tessellated_shape_representation shall be a global_unit_assigned_context . This ensures that the coordinates used to define the points of the tessellated geometry have defined units.

WR2: The tessellated_shape_representation shall contain at least 1 tessellated_item in the items set.

6.4.53 tessellated_item   EXPRESS-G

A tessellated_item is a type of geometric_representation_item used in the description of a tessellated shape.

EXPRESS specification:

*)
ENTITY tessellated_item
  ABSTRACT SUPERTYPE OF (ONEOF (coordinates_list,
                                tessellated_solid,
                                tessellated_shell,
                                tessellated_wire,
                                tessellated_geometric_set,
                                tessellated_curve_set,
                                tessellated_point_set,
                                tessellated_surface_set,
                                tessellated_structured_item))
  SUBTYPE OF (geometric_representation_item);
WHERE
  WR1: SIZEOF (QUERY (using_rep <* using_representations (SELF) | NOT ('GEOMETRIC_MODEL_SCHEMA.TESSELLATED_SHAPE_REPRESENTATION' IN TYPEOF(using_rep)))) = 0;
END_ENTITY;
(*

Formal propositions:

WR1: A tessellated_item shall only be used in a tessellated_shape_representation ;.

6.4.54 repositioned_tessellated_item   EXPRESS-G

A repositioned_tessellated_item is a type of tessellated_item which has been re-postioned by defining the coordinates with respect to a new axis system.

EXPRESS specification:

*)
ENTITY repositioned_tessellated_item
  SUBTYPE OF (tessellated_item);
  location : axis2_placement_3d;
WHERE
  WR1: NOT (SIZEOF (['GEOMETRIC_MODEL_SCHEMA.TESSELLATED_CURVE_SET', 'GEOMETRIC_MODEL_SCHEMA.TESSELLATED_GEOMETRIC_SET', 'GEOMETRIC_MODEL_SCHEMA.TESSELLATED_POINT_SET', 'GEOMETRIC_MODEL_SCHEMA.TESSELLATED_SURFACE_SET', 'GEOMETRIC_MODEL_SCHEMA.TESSELLATED_SHELL', 'GEOMETRIC_MODEL_SCHEMA.TESSELLATED_SOLID', 'GEOMETRIC_MODEL_SCHEMA.TESSELLATED_WIRE'] * TYPEOF(SELF)) = 0);
END_ENTITY;
(*

Attribute definitions:

location: an axis2_placement_3d defining the origin and axis direction for the coordinates of the referenced points in the repositioned_tessellated_item ;

Formal propositions:

WR1: A repositioned_tessellated_item shall only be used as a complex subtype with one of the following types of tessellated_item :

tessellated_curve_set , tessellated_geometric_set , tessellated_point_set , tessellated_surface_set , tessellated_shell , tessellated_solid , tessellated_wire .

6.4.55 tessellated_structured_item   EXPRESS-G

A tessellated_structured_item is a type of geometric_set which has a topological structure. The links to topological components of an exact geometric model are defined with the subtypes.

EXPRESS specification:

*)
ENTITY tessellated_structured_item
  SUPERTYPE OF (ONEOF (tessellated_face,
                       tessellated_edge,
                       tessellated_vertex))
  SUBTYPE OF (tessellated_item);
END_ENTITY;
(*

6.4.56 coordinates_list   EXPRESS-G

A coordinates_list is a type of tessellated_item that defines the coordinate values for points used in a tessellated_shape_representation .

EXPRESS specification:

*)
ENTITY coordinates_list
  SUBTYPE OF (tessellated_item);
  npoints : INTEGER;
  position_coords : LIST[1:?] OF LIST[3:3] OF REAL;
WHERE
  WR1: npoints = SIZEOF(position_coords);
  WR2: SIZEOF (['GEOMETRIC_MODEL_SCHEMA.REPOSITIONED_TESSELLATED_ITEM'] * TYPEOF(SELF)) = 0;
END_ENTITY;
(*

Attribute definitions:

npoints: the number of points with coordinates in the list;

position_coords: the list of real triples defining the coordinates of the points;

NOTE 1   These real triples have the semantics of length_measure s, but are not formally defined as such, the units for these are defined since a tessellated_item is required to be used in a tessellated_shape_representation having a global_unit_assigned_context .

Formal propositions:

WR1: The value of npoints shall be equal to the size of the position_coords list.

WR2: This entity shall not be instantiated as a complex subtype with repositioned_tessellated_item .

NOTE 2   This rule together with the ONEOF rule on the supertype tessellated_item ensures that it is not instantiated with any subtype of tessellated_item .

6.4.57 tessellated_vertex   EXPRESS-G

A tessellated_vertex is a type of tessellated_structured_item and is a single vertex in a tessellated model.

EXPRESS specification:

*)
ENTITY tessellated_vertex
  SUBTYPE OF (tessellated_structured_item);
  coordinates : coordinates_list;
  topological_link : OPTIONAL vertex_point;
  point_index : INTEGER;
END_ENTITY;
(*

Attribute definitions:

coordinates: the coordinates_list giving the vertex coordinate values;

topological_link: an optional link to a topological vertex_point entity;

point_index: the location in the coordinates list of the coordinates for this vertex;

6.4.58 tessellated_edge   EXPRESS-G

A tessellated_edge is a type of tessellated_structured_item . The geometry of the tessellated_edge is approximated by straight line segments joining the points listed.

NOTE    A tessellated_edge may be used as the boundary between two tessellated_face s.

EXPRESS specification:

*)
ENTITY tessellated_edge
  SUPERTYPE OF (ONEOF (tessellated_connecting_edge,
                       cubic_bezier_tessellated_edge))
  SUBTYPE OF (tessellated_structured_item);
  coordinates : coordinates_list;
  geometric_link : OPTIONAL edge_or_curve;
  line_strip : LIST[2:?] OF INTEGER;
END_ENTITY;
(*

Attribute definitions:

coordinates: the coordinates_list giving the coordinate values for points of the tessellated_edge

geometric_link: the edge or curve of an exact model to which this tessellated_edge corresponds;

line_strip: the list of integers giving the locations in the coordinates list of consecutive points of this edge;

6.4.59 tessellated_connecting_edge   EXPRESS-G

A tessellated_connecting_edge is a type of tessellated_edge . The tessellated_connecting_edge connects two faces and contains information relating to the face normals at corresponding points on the 2 faces.

EXPRESS specification:

*)
ENTITY tessellated_connecting_edge
  SUBTYPE OF (tessellated_edge);
  smooth : LOGICAL;
  face1 : tessellated_face;
  face2 : tessellated_face;
  line_strip_face1 : LIST[2:?] OF INTEGER;
  line_strip_face2 : LIST[2:?] OF INTEGER;
WHERE
  WR1: SIZEOF(line_strip_face1) = SIZEOF(line_strip_face2);
  WR2: SIZEOF(line_strip_face1) = SIZEOF(SELF\tessellated_edge.line_strip);
  WR3: NOT(('GEOMETRIC_MODEL_SCHEMA.CUBIC_BEZIER_TRIANGULATED_FACE') IN TYPEOF(face1));
  WR4: NOT(('GEOMETRIC_MODEL_SCHEMA.CUBIC_BEZIER_TRIANGULATED_FACE') IN TYPEOF(face2));
END_ENTITY;
(*

Attribute definitions:

smooth: a LOGICAL variable; if TRUE, there is tangent continuity where two faces join along this edge

face1: the first tessellated_face using this edge;

face2: the second tessellated_face using this edge;

line_strip_face1: the list of integers giving the locations in the normals list of face1 of the normals on the face1 side at consecutive points of this edge, and, for connection checking, if required, the locations in the face1 coordinates list or face1 pnindex of consecutive points of this edge; in cases where normals are not defined for face1 the locations in the coordinates list are given;

line_strip_face2: the list of integers giving the locations in the normals list of face2 of the normals on the face2 side at consecutive points of this edge, and, for connection checking, if required, the locations in the face2 coordinates list or face2 pnindex of consecutive points of this edge; in cases where normals are not defined for face2 the locations in the coordinates list are given.

Formal propositions:

WR1: line_strip_face1 and line_strip_face2 shall be of the same size.

WR2: line_strip_face1 shall be of the same size as the inherited line_strip attribute.

WR3: face1 shall not be of type cubic_bezier_triangulated_face .

WR4: face2 shall not be of type cubic_bezier_triangulated_face .

6.4.60 tessellated_face   EXPRESS-G

A tessellated_face is a type of tessellated_structured_item that represents a face of a tessellated model.

EXPRESS specification:

*)
ENTITY tessellated_face
  ABSTRACT SUPERTYPE OF (ONEOF (triangulated_face,
                                complex_triangulated_face,
                                cubic_bezier_triangulated_face))
  SUBTYPE OF (tessellated_structured_item);
  coordinates : coordinates_list;
  pnmax : INTEGER;
  normals : LIST[0:?] OF LIST[3:3] OF REAL;
  geometric_link : OPTIONAL face_or_surface;
WHERE
  WR1: ((SIZEOF(normals) = 0) OR (SIZEOF(normals) = 1) OR (SIZEOF(normals) = pnmax));
END_ENTITY;
(*

Attribute definitions:

coordinates: the coordinates_list giving the coordinate values for points of the tessellated_face

pnmax: the larger of the number of points defined with the face or the number of unique point and normal combinations in the face;

normals: the list of REAL triples defining the normals at the points of the face. If the size of this list is greater than one the ordering of the normals is the same as the ordering used for the points via pnindex in one of the subtypes.

geometric_link: the face or surface of an exact model to which this tessellated_face corresponds;

Formal propositions:

WR1: The size of normals shall be 0, 1 or equal to pnmax .

NOTE    If size = 0 normals are undefined at all face points, if size = 1 the normal has the same value at each face point and the underlying surface is planar, if size is greater than 1 each point on the face has an individual underlying surface normal defined.

6.4.61 triangulated_face   EXPRESS-G

A triangulated_face is a type of tessellated_face that has its geometry defined by a set of triangles.



Figure 31 —  Use of pnindex to locate coordinates

Figure 31 —  Use of pnindex to locate coordinates

EXPRESS specification:

*)
ENTITY triangulated_face
  SUBTYPE OF (tessellated_face);
  pnindex : LIST[0:?] OF INTEGER;
  triangles : LIST[1:?] OF LIST[3:3] OF INTEGER;
WHERE
  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_face.pnmax));
  WR2: NOT((SIZEOF(pnindex) = 0) AND (SELF\tessellated_face.pnmax <> coordinates.npoints));
END_ENTITY;
(*

Attribute definitions:

pnindex: the list of integers defining the locations in the coordinates list of the points and normals of the triangles of the face

triangles: the list of INTEGER triples, in the range 1 to pnmax, giving the locations of the coordinate values in the coordinates list or in pnindex for each triangle. The i th triple in the list defines the orders in the appropriate list of the 3 vertices of the i th triangle;

NOTE 1   See Figure (31) for further details of use of pnindex.

NOTE 2   In the simplest case where no point is associated with more than 1 normal and the size of coordinates is pnmax the triangles refer directly to the coordinates list and pnindex is empty. In all other cases pnindex is required to identify points and normals for the triangles.

NOTE 3   In the the simple case where each vertex point is defined with a unique normal this entity is equivalent to a set of curved triangles with normals at the vertices as defined in the AMF standard [4]

Formal propositions:

WR1: The size of pnindex , if non-zero, shall be equal to pnmax .

WR2: pnindex shall not be empty unless pnmax is equal to the size of the coordinates list.

NOTE 4   This option can only be used in the simple case of a local coordinates list and 0 or 1 normals per point.

6.4.62 cubic_bezier_tessellated_edge   EXPRESS-G

A cubic_bezier_tessellated_edge is a type of tessellated_edge which takes the form of a piecewise cubic bezier curve. The cubic_bezier_tessellated_edge has its geometry defined by a list of control points, referenced by the inherited line_strip attribute; in this list only the points corresponding to ends of segments lie on the edge and the list of pointers is of length 3n +1, where n is the number of segments.

EXPRESS specification:

*)
ENTITY cubic_bezier_tessellated_edge
  SUBTYPE OF (tessellated_edge);
  SELF\tessellated_edge.line_strip : LIST[4:?] OF INTEGER;
END_ENTITY;
(*

Attribute definitions:

line_strip: the list of 3n + 1 integers, where n is the number of cubic segments, giving the locations in the coordinates list of consecutive control points points of this edge.

6.4.63 cubic_tessellated_connecting_edge   EXPRESS-G

A cubic_tessellated_connecting_edge is a type of cubic_bezier_tessellated_edge which takes the form of a cubic curve and connects two cubic_bezier_triangulated_faces. The cubic_tessellated_connecting_edge has its geometry defined by a list of control points contained in the inherited line_strip attribute; in this list only the points corresponding to vertices of the cubic triangles of the adjacent faces lie on the edge and the list of pointers is of length 3n +1, where n is the number of triangles with adjacent edges on each side of the connecting edge.

EXPRESS specification:

*)
ENTITY cubic_tessellated_connecting_edge
  SUBTYPE OF (cubic_bezier_tessellated_edge);
  smooth : LOGICAL;
  face1 : cubic_bezier_triangulated_face;
  face2 : cubic_bezier_triangulated_face;
END_ENTITY;
(*

Attribute definitions:

smooth: a LOGICAL variable; if TRUE, there is tangent continuity where two faces join along this edge;

face1: the cubic_bezier_triangulated_face to the left of this edge;

face2: the cubic_bezier_triangulated_face to the right of this edge.

6.4.64 complex_triangulated_face   EXPRESS-G

A complex_triangulated_face is a type of tessellated_face defining the geometry as a set of triangles arranged in strips and fans.

NOTE 1   The ordering of the points used to define the strips or fans of triangles is shown in Figure (32) .



Figure 32 —  Ordering of points for complex_triangulated_face

Figure 32 —  Ordering of points for complex_triangulated_face

EXPRESS specification:

*)
ENTITY complex_triangulated_face
  SUBTYPE OF (tessellated_face);
  pnindex : LIST[0:?] OF INTEGER;
  triangle_strips : LIST[0:?] OF LIST[3:?] OF INTEGER;
  triangle_fans : LIST[0:?] OF LIST[3:?] OF INTEGER;
WHERE
  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_face.pnmax));
  WR2: NOT((SIZEOF(pnindex) = 0) AND (SELF\tessellated_face.pnmax <> coordinates.npoints));
  WR3: NOT ((SIZEOF(triangle_strips) = 0) AND (SIZEOF(triangle_fans) = 0));
END_ENTITY;
(*

Attribute definitions:

pnindex: the list of integers defining the locations in the coordinates list of the points and normals of the triangles of the face

triangle_strips: the list of lists of INTEGERs giving the locations of the coordinate values in the coordinates list for each strip of triangles. Each sublist defines the orders in the coordinates list, via the pnindex if used, of the vertices of the i th strip of triangles.

NOTE 2   If required a single triangle can be included in this structure as a strip of one triangle, in which case the sublist will contain 3 INTEGERs.

triangle_fans: the list of lists of INTEGERs giving the locations of the coordinate values in the coordinates list for each fan of triangles. Each sublist defines the orders in the coordinates list of the vertices of the i th fan of triangles.

NOTE 3   In the simplest case where no point is associated with more than 1 normal and the size of coordinates is pnmax the triangles defined by the strips and fans refer directly to the coordinates list and pnindex is empty. In all other cases pnindex is required to identify points and normals for the triangles.

Formal propositions:

WR1: The size of pnindex , if non-zero, shall be equal to pnmax .

WR2: pnindex shall not be empty unless pnmax is equal to the size of the coordinates list.

NOTE 4   This option can only be used in the simple case of a local coordinates list and 0 or 1 normals per point.

WR3: The triangle_strips list and the triangle_fans list shall not both be empty.

6.4.65 cubic_bezier_triangulated_face   EXPRESS-G

A cubic_bezier_triangulated_face is a type of tessellated_face that has its geometry defined by a set of curved triangles. Each of the triangles is a 3 sided Bezier cubic surface defined by a list of 10 control points, 9 near the edges and one above the centre. The control points P 1 , P 2 , P 3 , are at the vertices of the triangle. Each triangle is a bi-parametric surface with equation:

s (u,v) = (1 - u -v) 3 P 1 + u 3 P 2 + v 3 P 3 + 3(1 - u -v) 2 u P 4 + 3(1 - u -v)u 2 P 5 + 3u 2 v P 6 + 3uv 2 P 7 + 3(1 - u -v)v 2 P 8 + 3(1 - u -v) 2 v P 9 + 6uv(1 - u -v) P 10

The parametric range for each triangle is 0 ≤ u ≤ 1; 0 ≤ v ≤ 1; with u + v ≤ 1.

Continuity of geometry between adjacent triangles is assured provided the adjacent edges reference the same 4 control points. Each edge of the triangle is a Bezier cubic curve of parametric length 1 defined by the 4 control points along that edge. P 1 , P 4 , P 5 , P 2 define the cubic curve of the first edge of the triangle, other edges are defined in a similar manner.



Figure 33 —  Relationship between control points and triangular surface

Figure 33 —  Relationship between control points and triangular surface

NOTE 1   See Figure (33) for illustration of the numbering of the control points.

EXPRESS specification:

*)
ENTITY cubic_bezier_triangulated_face
  SUBTYPE OF (tessellated_face);
  ctriangles : LIST[1:?] OF LIST[10:10] OF INTEGER;
WHERE
  WR1: SIZEOF( SELF\tessellated_face.normals) = 0;
END_ENTITY;
(*

Attribute definitions:

ctriangles: the list of list of 10 INTEGER pointers, giving the locations of the coordinate values of the control points for each triangle in the coordinates list.

NOTE 2   The control points for each triangle are ordered as shown in Figure (33)

Formal propositions:

WR1: The size of normals list. shall be zero, the geometry of each triangle is completely defined by the control points.

6.4.66 tessellated_solid   EXPRESS-G

A tessellated_solid is a type of tessellated_item that is a tessellated representation of a solid model. Its geometry is defined as a set of tessellated_structured_item s.

NOTE    The tessellated_structured_item s defining the geometry may be relocated in a local coordinate system by defining a complex instance of this entity with a repositioned_tessellated_item .

EXPRESS specification:

*)
ENTITY tessellated_solid
  SUBTYPE OF (tessellated_item);
  items : SET[1:?] OF tessellated_structured_item;
  geometric_link : OPTIONAL manifold_solid_brep;
END_ENTITY;
(*

Attribute definitions:

items: the set of tessellated_structured_item s defining the faces of the solid;

geometric_link: a corresponding exact model of the solid;

6.4.67 tessellated_shell   EXPRESS-G

A tessellated_shell is a type of tessellated_item that is a tessellated representation of a shell. Its geometry is defined as a set of tessellated_structured_item s.

NOTE    The tessellated_structured_item s defining the geometry may be relocated in a local coordinate system by defining a complex instance of this entity with a repositioned_tessellated_item .

EXPRESS specification:

*)
ENTITY tessellated_shell
  SUBTYPE OF (tessellated_item);
  items : SET[1:?] OF tessellated_structured_item;
  topological_link : OPTIONAL connected_face_set;
END_ENTITY;
(*

Attribute definitions:

items: the set of tessellated_structured_item s defining the faces of the shell;

topological_link: a connected_face_set representing the exact geometry of the shell;

6.4.68 tessellated_wire   EXPRESS-G

A tessellated_wire is a type of tessellated_item that is a tessellated representation of a collection of bounded curves joined end to end. Its geometry is defined as a set of tessellated edges and vertices.

NOTE    The edges and vertices defining the geometry may be relocated in a local coordinate system by defining a complex instance of this entity with a repositioned_tessellated_item .

EXPRESS specification:

*)
ENTITY tessellated_wire
  SUBTYPE OF (tessellated_item);
  items : SET[1:?] OF tessellated_edge_or_vertex;
  geometric_model_link : OPTIONAL path_or_composite_curve;
END_ENTITY;
(*

Attribute definitions:

items: the set of tessellated_edge_or_vertex s defining the geometry of the wire;

geometric_model_link: the corresponding exact geometry which may be a path or composite_curve ;

6.4.69 tessellated_surface_set   EXPRESS-G

A tessellated_surface_set is a type of tessellated_item that is a tessellated representation of a collection of surfaces.

NOTE 1   If the surfaces are triangulated the geometry of the surfaces is fully defined by creating an instance of one of the subtypes.

EXPRESS specification:

*)
ENTITY tessellated_surface_set
  ABSTRACT SUPERTYPE OF (ONEOF (triangulated_surface_set,
                                complex_triangulated_surface_set))
  SUBTYPE OF (tessellated_item);
  coordinates : coordinates_list;
  pnmax : INTEGER;
  normals : LIST[0:?] OF LIST[3:3] OF REAL;
WHERE
  WR1: ((SIZEOF(normals) = 0) OR (SIZEOF(normals) = 1) OR (SIZEOF(normals) = pnmax));
END_ENTITY;
(*

Attribute definitions:

coordinates: the coordinates_list for the vertices of the triangles;

pnmax: the larger of the number of points defined with the triangles or the number of unique point and normal combinations in the set of triangles;

NOTE 2   In the case of a tessellated_surface_set with a discontinuous boundary between faces it is possible to have more than one normal defined at a point on the boundary.

normals: the list of REAL triples defining the normals at the vertices of the triangles. If the size of this list is greater than one the ordering of the normals is the same as the ordering used for the pnindex ;

Formal propositions:

WR1: The size of normals shall be 0, 1 or equal to pnmax .

NOTE 3   If size = 0 normals are undefined at all vertices, if size = 1 the normal has the same value at each vertex and the underlying surface is planar, if size is greater than 1 each triangle vertex has an individual underlying surface normal defined.

6.4.70 triangulated_surface_set   EXPRESS-G

A triangulated_surface_set is a type of tessellated_surface_set defining the geometry of the surface set as a set of triangles. The individual triangles are defined by listing the coordinates of their vertices. Normals to the surfaces defined by the set of triangles may be included.

EXPRESS specification:

*)
ENTITY triangulated_surface_set
  SUBTYPE OF (tessellated_surface_set);
  pnindex : LIST[0:?] OF INTEGER;
  triangles : LIST[1:?] OF LIST[3:3] OF INTEGER;
WHERE
  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_surface_set.pnmax));
  WR2: NOT((SIZEOF(pnindex) = 0) AND (SELF\tessellated_surface_set.pnmax <> coordinates.npoints));
END_ENTITY;
(*

Attribute definitions:

pnindex: the list of integers defining the locations in the coordinates list of the points and normals of the triangles;

NOTE 1   See Figure (31) . for further details of use of pnindex.

triangles: the list of INTEGER triples, in the range 1 to pnmax, giving the locations of the coordinate values in the coordinates list or pnindex for each triangle. The i th triple in the list defines the orders in the appropriate list of the 3 vertices of the i th triangle;

NOTE 2   In the simplest case where no point is associated with more than 1 normal and the size of coordinates is pnmax the triangles refer directly to the coordinates list and pnindex is empty. In all other cases pnindex is required to identify points and normals for the triangles.

Formal propositions:

WR1: The size of pnindex , if non-zero, shall be equal to pnmax .

WR2: pnindex shall not be empty unless pnmax is equal to the size of the coordinates list.

NOTE 3   This option can only be used in the simple case of a local coordinates and 0 or 1 normals per point.

6.4.71 complex_triangulated_surface_set   EXPRESS-G

A complex_triangulated_surface_set is a type of tessellated_surface_set defining the geometry by a set of triangles arranged in strips and fans.

NOTE 1   The ordering of the points used to define the strips or fans of triangles is shown in Figure (32) .

EXPRESS specification:

*)
ENTITY complex_triangulated_surface_set
  SUBTYPE OF (tessellated_surface_set);
  pnindex : LIST[0:?] OF INTEGER;
  triangle_strips : LIST[0:?] OF LIST[3:?] OF INTEGER;
  triangle_fans : LIST[0:?] OF LIST[3:?] OF INTEGER;
WHERE
  WR1: ((SIZEOF(pnindex) = 0) OR (SIZEOF(pnindex) = SELF\tessellated_surface_set.pnmax));
  WR2: NOT((SIZEOF(pnindex) = 0) AND (SELF\tessellated_surface_set.pnmax <> coordinates.npoints));
  WR3: NOT ((SIZEOF(triangle_strips) = 0) AND (SIZEOF(triangle_fans) = 0));
END_ENTITY;
(*

Attribute definitions:

pnindex: the list of integers defining the locations in the coordinates list of the points and normals of the triangles;

triangle_strips: the list of lists of INTEGERs giving the locations of the coordinate values in the coordinates list for each strip of triangles. Each sublist defines the orders in the coordinates list, via the pnindex if used, of the vertices of the i th strip of triangles.

NOTE 2   If required a single triangle can be included in this structure as a strip of one triangle, in which case the sublist will contain 3 INTEGERs.

triangle_fans: the list of lists of INTEGERs giving the locations of the coordinate values in the coordinates list for each fan of triangles. Each sublist defines the orders in the coordinates list of the vertices of the i th fan of triangles.

NOTE 3   In the simplest case where no point is associated with more than 1 normal and the size of coordinates is pnmax the triangles defined by the strips and fans refer directly to the coordinates list and pnindex is empty. In all other cases pnindex is required to identify points and normals for the triangles.

Formal propositions:

WR1: The size of pnindex , if non-zero, shall be equal to pnmax .

WR2: pnindex shall not be empty unless pnmax is equal to the size of the coordinates list.

NOTE 4   This option can only be used in the simple case of a local coordinates and 0 or 1 normals per point.

WR3: The triangle_strips list and the triangle_fans list shall not both be empty.

6.4.72 tessellated_curve_set   EXPRESS-G

A tessellated_curve_set is a type of tessellated_item that is a tessellated representation of a collection of curves. The geometry of each curve is defined as a list of points obtained via the line_strips attribute.

EXPRESS specification:

*)
ENTITY tessellated_curve_set
  SUBTYPE OF (tessellated_item);
  coordinates : coordinates_list;
  line_strips : LIST[1:?] OF LIST[2:?] OF INTEGER;
END_ENTITY;
(*

Attribute definitions:

coordinates: the coordinates_list giving the coordinate values for points of the curves;

line_strips: the list of lists of integers defining the locations in the coordinates list of the consecutive points for each curve;

6.4.73 tessellated_geometric_set   EXPRESS-G

A tessellated_geometric_set is a type of tessellated_item that is a collection of geometric_set s.

EXPRESS specification:

*)
ENTITY tessellated_geometric_set
  SUBTYPE OF (tessellated_item);
  children : SET[1:?] OF tessellated_item;
END_ENTITY;
(*

Attribute definitions:

children: the individual items of tessellated geometry;

6.4.74 tessellated_point_set   EXPRESS-G

A tessellated_point_set is a type of tessellated_item that is a collection of points used to define tessellated geometry.

EXPRESS specification:

*)
ENTITY tessellated_point_set
  SUBTYPE OF (tessellated_item);
  coordinates : coordinates_list;
  point_list : LIST[1:?] OF INTEGER;
END_ENTITY;
(*

Attribute definitions:

coordinates: the coordinates_list giving the coordinate values for points of the set;

point_list: the list of locations in the coordinates list of the individual points of this set.

6.4.75 tessellated_shape_representation_with_accuracy_parameters   EXPRESS-G

A tessellated_shape_representation_with_accuracy_parameters is a type of tessellated_shape_representation which has additional parameters to define the accuracy of the tessellated approximation to the corresponding exact geometric shape.

EXPRESS specification:

*)
ENTITY tessellated_shape_representation_with_accuracy_parameters
  SUBTYPE OF (tessellated_shape_representation);
  tessellation_accuracy_parameters : SET[1:?] OF tessellation_accuracy_parameter_item;
END_ENTITY;
(*

Attribute definitions:

tessellation_accuracy_parameters: the set of parameters defining the accuracy of the tessellated_shape_representation_with_accuracy_parameters .

6.5 geometric_model_schema function definitions

6.5.1 acyclic_set_replica

The acyclic_set_replica boolean function is a recursive function which determines whether, or not, a given geometric_set_replica participates in its own definition. The function returns FALSE if the geometric_set_replica refers to itself, directly or indirectly, in its own definition.

EXPRESS specification:

*)
FUNCTION acyclic_set_replica (rep : geometric_set_replica; parent : geometric_set) : BOOLEAN;
IF NOT (('GEOMETRY_SCHEMA.GEOMETRIC_SET_REPLICA') IN TYPEOF(parent))
        THEN  RETURN (TRUE);
   END_IF;
 (* Return TRUE if the parent is not of type geometric_set_replica *)
   IF (parent :=: rep) THEN
      RETURN (FALSE);
  (* Return FALSE if the parent is the same geometric_set_replica,
     otherwise, call function again with the parents own parent_set.  *)
    ELSE RETURN(acyclic_set_replica(rep,
                          parent\geometric_set_replica.parent_set));
    END_IF;
END_FUNCTION;
(*

Argument definitions:

rep: (input) the geometric_set_replica which is to be tested for a cyclic reference;

parent: (input) a geometric_set used in the definition of the replica;

6.5.2 acyclic_solid_replica

The acyclic_solid_replica boolean function is a recursive function which determines whether, or not, a given solid_replica participates in its own definition. The function returns FALSE if the solid_replica refers to itself, directly or indirectly, in its own definition.

EXPRESS specification:

*)
FUNCTION acyclic_solid_replica (rep : solid_replica; parent : solid_model) : BOOLEAN;
IF NOT (('GEOMETRY_SCHEMA.SOLID_REPLICA') IN TYPEOF(parent)) THEN
      RETURN (TRUE);
   END_IF;
 (* Return TRUE if the parent is not of type solid_replica. *)
   IF (parent :=: rep) THEN
      RETURN (FALSE);
  (* Return FALSE if the parent is the same solid_replica, otherwise,
   call function again with the parents own parent_solid.     *)
    ELSE RETURN(acyclic_solid_replica(rep,
                      parent\solid_replica.parent_solid));
    END_IF;
END_FUNCTION;
(*

Argument definitions:

rep: (input) the solid_replica which is to be tested for a cyclic reference;

parent: (input) a solid_model used in the definition of the replica;

6.5.3 build_transformed_set

The build_transformed_set function builds a transformed set by applying the input cartesian_transformation_operator to the individual curve, point or surface elements of the input geometric_set .

EXPRESS specification:

*)
FUNCTION build_transformed_set (tr : cartesian_transformation_operator; gset : geometric_set) : SET[0:?] OF geometric_set_select;
LOCAL
   s          : SET [1:?] OF geometric_set_select := gset.elements;
   trset      : SET [0:?] OF geometric_set_select := [];
  END_LOCAL;
  REPEAT j := 1 TO SIZEOF(s);
    IF ('GEOMETRY_SCHEMA.CURVE' IN TYPEOF(s[j])) THEN
     trset := trset + dummy_gri || curve() ||curve_replica(s[j],tr); ELSE
     IF ('GEOMETRY_SCHEMA.POINT' IN TYPEOF(s[j])) THEN
       trset := trset + dummy_gri || point() || point_replica(s[j],tr);
       ELSE
       IF ('GEOMETRY_SCHEMA.SURFACE' IN TYPEOF(s[j])) THEN
         trset := trset + dummy_gri || surface()  || surface_replica(s[j],
           tr || cartesian_transformation_operator_3d (?));
       END_IF;
     END_IF;
    END_IF;
  END_REPEAT;
  RETURN(trset);
END_FUNCTION;
(*

Argument definitions:

tr: (input) the cartesian_transformation_operator defining the transformation;

gset: (input) the geometric set to be transformed;

6.5.4 constraints_geometry_shell_based_surface_model

The constraints_geometry_shell_based_surface_model boolean function evaluates the geometric constraints on a shell_based_surface_model and returns TRUE if they are satisfied. The constraints_geometry_shell_based_surface_model boolean function evaluates the geometric constraints on a shell_based_surface_model and returns TRUE if they are satisfied.

EXPRESS specification:

*)
FUNCTION constraints_geometry_shell_based_surface_model (m : shell_based_surface_model) : BOOLEAN;
LOCAL
     result : BOOLEAN := TRUE;
   END_LOCAL;
   
   REPEAT j := 1 TO SIZEOF(m.sbsm_boundary);
     IF (NOT ('TOPOLOGY_SCHEMA.OPEN_SHELL' IN
                     TYPEOF(m.sbsm_boundary[j])) AND
        (NOT ('TOPOLOGY_SCHEMA.CLOSED_SHELL' IN
           TYPEOF(m.sbsm_boundary[j]))))
     THEN
       result := FALSE;
       RETURN(result);
       (* A surface model is composed of OPEN_ and CLOSED_SHELLs. *)
     END_IF;
   END_REPEAT;
   RETURN(result);
END_FUNCTION;
(*

Argument definitions:

m: (input) the shell_based_surface_model for which the geometric constraints are to be checked;

m: (input) the shell_based_surface_model for which the geometric constraints are to be checked;

6.5.5 constraints_geometry_shell_based_wireframe_model

The constraints_geometry_shell_based_wireframe_model boolean function evaluates the geometric constraints on a shell_based_wireframe_model and returns TRUE if they are satisfied.

EXPRESS specification:

*)
FUNCTION constraints_geometry_shell_based_wireframe_model (m : shell_based_wireframe_model) : BOOLEAN;
LOCAL
     result : BOOLEAN := TRUE;
   END_LOCAL;

   REPEAT j := 1 TO SIZEOF(m.sbwm_boundary);
     IF (NOT ('TOPOLOGY_SCHEMA.WIRE_SHELL' IN
                    TYPEOF(m.sbwm_boundary[j])) AND
        (NOT ('TOPOLOGY_SCHEMA.VERTEX_SHELL' IN
                      TYPEOF(m.sbwm_boundary[j]))))
     THEN
       result := FALSE;
       RETURN(result);
       (* A wireframe model is composed of WIRE_ and VERTEX_SHELLs *)
     END_IF;
   END_REPEAT;
   RETURN(result);
END_FUNCTION;
(*

Argument definitions:

m: (input) the shell_based_wireframe_model for which the geometric constraints are to be checked;

6.5.6 msb_shells

The msb_shells function determines the set of all closed_shell s used in the definition of a manifold_solid_brep . Special provision is made for the brep_with_voids subtype.

EXPRESS specification:

*)
FUNCTION msb_shells (brep : manifold_solid_brep) : SET[1:?] OF closed_shell;
LOCAL   
      return_set: SET[1:?] OF closed_shell := [brep.outer];   
    END_LOCAL;   

    IF SIZEOF(QUERY(msbtype <* TYPEOF(brep) |   
                 msbtype LIKE '*BREP_WITH_VOIDS'))  >= 1    
          THEN   
       return_set := return_set + brep\brep_with_voids.voids;   
    END_IF;   
   RETURN(return_set);
END_FUNCTION;
(*

Argument definitions:

brep: (input) A manifold_solid_brep for which a set of closed_shell components is required.;



*)
END_SCHEMA;  -- geometric_model_schema
(*


© ISO 2021 — All rights reserved