Application module: Scan data 3D shape | ISO/TS 10303-1831:2019(E) © ISO |
This clause specifies the information requirements for the Scan data 3D shape application module. The information requirements are specified as the Application Reference Model (ARM) of this application module.
NOTE 1 A graphical representation of the information requirements is given in Annex C.
NOTE 2 The mapping specification is specified in 5.1. It shows how the information requirements are met by using common resources and constructs defined or imported in the MIM schema of this application module.
This clause defines the information requirements to which implementations shall conform using the EXPRESS language as defined in ISO 10303-11. The following begins the Scan_data_3d_shape_arm schema and identifies the necessary external references.
EXPRESS specification:
*)
SCHEMA Scan_data_3d_shape_arm;
(*
The following EXPRESS interface statements specify the elements imported from the ARMs of other application modules.
EXPRESS specification:
*)
USE FROM
Elemental_geometric_shape_arm;
--
ISO/TS 10303-1004
REFERENCE FROM
Foundation_representation_arm
--
ISO/TS 10303-1006
(using_representations);
(*
NOTE 1 The schemas referenced above are specified in the following part of ISO 10303:
Elemental_geometric_shape_arm ISO/TS 10303-1004 Foundation_representation_arm ISO/TS 10303-1006
NOTE 2 See Annex C, Figures C.1and C.2 for a graphical representation of this schema.
This subclause specifies the ARM type for this application module. The ARM type and definition is specified below.
The point_cloud_set_or_superset select type collects together for reference when constructing more complex models, sets and supersets of point clouds.
EXPRESS specification:
*)
TYPE
point_cloud_set_or_superset =
SELECT
(Point_cloud_dataset,
Point_cloud_superdataset);
END_TYPE;
(*
This subclause specifies the ARM entities for this module. Each ARM application entity is an atomic element that embodies a unique application concept and contains attributes specifying the data elements of the entity. The ARM entities and definitions are specified below.
A Point_cloud_dataset is a type of Scanned_data_item and represents the geometry of a cloud of points produced by a scanner.
NOTE 1 The Point_cloud_dataset has subtypes with additional attributes to permit the creation of instances of a Point_cloud_dataset with normals, with colours, or with intensities.
EXAMPLE The and/or relationship between these subtypes enables, for example, the creation as a complex instance, of a Point_cloud_dataset with normals and colours attached to each point.
EXPRESS specification:
*)
ENTITY Point_cloud_dataset
SUBTYPE OF (Scanned_data_item);
point_coordinates : LIST[1:?] OF LIST[3:3] OF REAL;
END_ENTITY;
(*
Attribute definitions:
point_coordinates: the list of real triples defining the coordinates of the points.
NOTE 2 These real triples have the semantics of length_measures but are not formally defined as such. The units for these coordinates are defined since a Scanned_data_item is required to be used in a Scan_data_shape_representation having as context a Geometric_coordinate_space.
EXPRESS specification:
*)
ENTITY Point_cloud_dataset_with_colours
SUBTYPE OF (Point_cloud_dataset);
colour_indices : LIST[1:?] OF LIST[3:3] OF INTEGER;
WHERE
WR1: SIZEOF(colour_indices) = SIZEOF(SELF\Point_cloud_dataset.point_coordinates);
END_ENTITY;
(*
Attribute definitions:
colour_indices: a list of integer triples defining the RGB integer values of the colours at each point of the Point_cloud_dataset.
Formal propositions:
WR1: The size of the colour_indices list shall be the same as the size of the point_coordinates list.
EXPRESS specification:
*)
ENTITY Point_cloud_dataset_with_intensities
SUBTYPE OF (Point_cloud_dataset);
intensities : LIST[1:?] OF REAL;
WHERE
WR1: SIZEOF(intensities) = SIZEOF(SELF\Point_cloud_dataset.point_coordinates);
END_ENTITY;
(*
Attribute definitions:
intensities: a list of real numbers defining the intensity value at each point of the Point_cloud_dataset.
Formal propositions:
WR1: The size of the intensities list shall be the same as the size of the point_coordinates list.
EXPRESS specification:
*)
ENTITY Point_cloud_dataset_with_normals
SUBTYPE OF (Point_cloud_dataset);
normals : LIST[1:?] OF LIST[3:3] OF REAL;
WHERE
WR1: SIZEOF(normals) = SIZEOF(SELF\Point_cloud_dataset.point_coordinates);
END_ENTITY;
(*
Attribute definitions:
normals: a list of real triples defining the direction ratios of the normals at each point of the Point_cloud_dataset.
Formal propositions:
WR1: The size of the normals list shall be the same as the size of the point_coordinates list.
EXPRESS specification:
*)
ENTITY Point_cloud_superdataset
SUBTYPE OF (Scanned_data_item);
pts_per_sublist : INTEGER;
sublists : LIST[2:?] OF Point_cloud_dataset;
WHERE
WR1: consistent_sizes_point_clouds(SELF.pts_per_sublist, SELF.sublists);
END_ENTITY;
(*
Attribute definitions:
pts_per_sublist: the number of points in each listed Point_cloud_dataset, except for the last.
sublists: a list of two or more Point_cloud_datasets.
Formal propositions:
WR1: The number of points in each Point_cloud_dataset in sublists, except for the last shall be pts_per_sublist the last element of the sublists shall not contain more than this number of points. These conditions are verified by the consistent_sizes_point_clouds function.
EXPRESS specification:
*)
ENTITY Scan_3d_model
SUBTYPE OF (Scanned_data_item);
scanner_info : SET[1:?] OF Scanner_property;
scanned_points : SET[1:?] OF Scanned_data_item;
WHERE
WR1: SIZEOF(QUERY(tmp <* Scanned_points | 'SCAN_DATA_3D_SHAPE_ARM.SCAN_3D_MODEL' IN TYPEOF(tmp))) = 0;
END_ENTITY;
(*
Attribute definitions:
scanner_info: a set of one or more Scanner_property.
scanned_points: a set of one or more Scanned_data_items which contains the point cloud data produced by the scanning operation.
Formal propositions:
WR1: The scanned_points set shall not contain a Scan_3d_model.
A Scan_data_shape_representation is a type of Geometric_model in which the geometry of a 3D shape is represented by a set of point cloud data produced by a scanner.
EXPRESS specification:
*)
ENTITY Scan_data_shape_representation
SUBTYPE OF (Geometric_model);
SELF\Representation.items : SET[1:?] OF Scanned_data_item;
END_ENTITY;
(*
Attribute definitions:
items: the Scanned_data_items defining the shape.
A Scanned_data_item is a type of Detailed_geometric_model_element that represents an element of geometric data produced by a scanner. A Scanned_data_item is required to be used in a Scan_data_shape_representation.
EXPRESS specification:
*)
ENTITY Scanned_data_item
SUPERTYPE OF (ONEOF (Point_cloud_dataset,
Point_cloud_superdataset,
Triangulated_point_cloud_dataset,
Scan_3d_model))
SUBTYPE OF (Detailed_geometric_model_element);
WHERE
WR1: SIZEOF (QUERY (using_rep <* using_representations (SELF) | NOT ('SCAN_DATA_3D_SHAPE_ARM.SCAN_DATA_SHAPE_REPRESENTATION'
IN TYPEOF(using_rep)))) = 0;
END_ENTITY;
(*
Formal propositions:
WR1: Each Scanned_data_item,shall be used in a Scan_data_shape_representation.
A Scanner_basic_properties is a type of Scanner_property which represents the basic properties of a scanner.
NOTE 1 More advanced properties of a scanner may be represented by further subtypes of Scanner_property
EXPRESS specification:
*)
ENTITY Scanner_basic_properties
SUBTYPE OF (Scanner_property);
scanner_identification : label;
scanner_location : Axis_placement_3d;
scanner_uncertainty :
OPTIONAL
length_measure;
WHERE
WR1: (NOT (EXISTS(scanner_uncertainty))) OR (scanner_uncertainty > 0.0);
END_ENTITY;
(*
Attribute definitions:
scanner_identification: a label which identifies the scanner.
scanner_location: an axis2_placement_3d which is the location and orientation of the scanner.
scanner_uncertainty: an optional positive length_measure which gives the possible error in the coordinate values measured by the scanner.
Formal propositions:
WR1: The scanner_uncertainty, if present, shall be positive.
EXPRESS specification:
*)
ENTITY Scanner_property
ABSTRACT SUPERTYPE
SUBTYPE OF (Representation_item);
END_ENTITY;
(*
EXPRESS specification:
*)
ENTITY Triangulated_point_cloud_dataset
SUBTYPE OF (Scanned_data_item);
points : point_cloud_set_or_superset;
triangles : LIST[1:?] OF LIST[3:3] OF INTEGER;
END_ENTITY;
(*
Attribute definitions:
points: the Point_cloud_dataset or Point_cloud_superdataset containing the coordinates of the points used to construct the triangles.
triangles: a list of integer triples defining the locations in points of the coordinate values for the three vertices of each triangle. If points is of type Point_cloud_dataset the integer directly gives the position in point_coordinates of the coordinates of the vertex point. If points is of type Point_cloud_superdataset it is necessary to first determine, by dividing the integer value by pts_per_sublist, the Point_cloud_dataset in which to find the coordinates position. The remainder from this division is then the required address.
EXAMPLE In the case of a super dataset, if the integer value is 5927 and if the value of pts_per_sublist is 2000, then the required point coordinates will be in position 1927 of the points coordinates list of the 3rd. Point_cloud_dataset. If the integer value is exactly 2000 then the required point coordinates are in the last position in the first Point_cloud_dataset. points list.
This subclause specifies the ARM function for this module. The ARM function and definition is specified below.
EXPRESS specification:
*)
FUNCTION consistent_sizes_point_clouds (max : INTEGER; point_lists : LIST[0:?] OF Point_cloud_dataset) : BOOLEAN;
LOCAL ndatasets : INTEGER := SIZEOF(point_lists); RESULT: BOOLEAN := TRUE; END_LOCAL; REPEAT i := 1 TO (ndatasets - 1); IF (SIZEOF(point_lists[i].point_coordinates) <> max) THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; IF (SIZEOF(point_lists[ndatasets].point_coordinates) > max) THEN result := FALSE; RETURN(result); END_IF; RETURN(result);
END_FUNCTION;
(*
Argument definitions:
max: (input) the maximum permitted size of any of the point coordinate lists;
point_lists: (input) a list of Point_cloud_datasets whose sizes are to be checked.
*)
END_SCHEMA; -- Scan_data_3d_shape_arm
(*
© ISO 2019 — All rights reserved