Integrated generic resource: Geometric and topological representation | ISO 10303-42:2021(E) © ISO |
(*
ISO/TC 184/SC 4/WG 12 N10888 - ISO 10303-42 Geometric and topological representation - EXPRESS
Supersedes
ISO/TC 184/SC 4/WG 12 N9792
*)
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);
TYPE angular_deviation =
positive_plane_angle_measure;
END_TYPE;
TYPE boolean_operand =
SELECT
(boolean_result,
csg_primitive,
half_space_2d,
half_space_solid,
solid_model);
END_TYPE;
TYPE boolean_operator =
ENUMERATION
OF
(union,
intersection,
difference);
END_TYPE;
TYPE bounded_primitive_2d =
EXTENSIBLE
GENERIC_ENTITY
SELECT
(area_with_outer_boundary,
circular_area,
elliptic_area,
polygonal_area,
rectangular_area);
END_TYPE;
TYPE chordal_deviation =
positive_length_measure;
END_TYPE;
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;
TYPE csg_select =
SELECT
(boolean_result,
csg_primitive);
END_TYPE;
TYPE edge_or_curve =
SELECT
(curve,
edge_curve);
END_TYPE;
TYPE face_or_surface =
SELECT
(face_surface,
surface);
END_TYPE;
TYPE geometric_set_select =
EXTENSIBLE
GENERIC_ENTITY
SELECT
(curve,
point,
surface);
END_TYPE;
TYPE length_to_height_ratio =
ratio_measure;
END_TYPE;
TYPE maximum_edge_length =
positive_length_measure;
END_TYPE;
TYPE path_or_composite_curve =
SELECT
(composite_curve,
path);
END_TYPE;
TYPE surface_model =
SELECT
(face_based_surface_model,
shell_based_surface_model);
END_TYPE;
TYPE tessellated_facet_long_short_edge_ratio =
ratio_measure;
END_TYPE;
TYPE tessellated_edge_or_vertex =
SELECT
(tessellated_edge,
tessellated_vertex);
END_TYPE;
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;
TYPE wireframe_model =
SELECT
(edge_based_wireframe_model,
shell_based_wireframe_model);
END_TYPE;
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;
ENTITY manifold_solid_brep
SUBTYPE OF (solid_model);
outer : closed_shell;
END_ENTITY;
ENTITY brep_with_voids
SUBTYPE OF (manifold_solid_brep);
voids : SET[1:?] OF oriented_closed_shell;
END_ENTITY;
ENTITY faceted_brep
SUBTYPE OF (manifold_solid_brep);
END_ENTITY;
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;
ENTITY csg_solid
SUBTYPE OF (solid_model);
tree_root_expression : csg_select;
END_ENTITY;
ENTITY boolean_result
SUBTYPE OF (geometric_representation_item);
operator : boolean_operator;
first_operand : boolean_operand;
second_operand : boolean_operand;
END_ENTITY;
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;
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;
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;
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;
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;
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;
ENTITY sphere
SUBTYPE OF (geometric_representation_item);
radius : positive_length_measure;
centre : point;
END_ENTITY;
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;
ENTITY right_circular_cylinder
SUBTYPE OF (geometric_representation_item);
position : axis1_placement;
height : positive_length_measure;
radius : positive_length_measure;
END_ENTITY;
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;
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;
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;
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;
ENTITY half_space_solid
SUBTYPE OF (geometric_representation_item);
base_surface : surface;
agreement_flag : BOOLEAN;
END_ENTITY;
ENTITY boxed_half_space
SUBTYPE OF (half_space_solid);
enclosure : box_domain;
END_ENTITY;
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;
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;
ENTITY circular_area
SUBTYPE OF (primitive_2d);
centre : cartesian_point;
radius : positive_length_measure;
END_ENTITY;
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;
ENTITY rectangular_area
SUBTYPE OF (primitive_2d);
position : axis2_placement_2d;
x : positive_length_measure;
y : positive_length_measure;
END_ENTITY;
ENTITY polygonal_area
SUBTYPE OF (primitive_2d);
bounds : LIST[3:?] OF
UNIQUE
cartesian_point;
END_ENTITY;
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;
ENTITY half_space_2d
SUBTYPE OF (primitive_2d);
base_curve : curve;
agreement_flag : BOOLEAN;
END_ENTITY;
ENTITY rectangled_half_space
SUBTYPE OF (half_space_2d);
enclosure : rectangle_domain;
END_ENTITY;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
ENTITY face_based_surface_model
SUBTYPE OF (geometric_representation_item);
fbsm_faces : SET[1:?] OF connected_face_set;
END_ENTITY;
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;
ENTITY edge_based_wireframe_model
SUBTYPE OF (geometric_representation_item);
ebwm_boundary : SET[1:?] OF connected_edge_set;
END_ENTITY;
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;
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;
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;
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;
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;
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;
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;
ENTITY tessellated_structured_item
SUPERTYPE OF
(ONEOF (tessellated_face,
tessellated_edge,
tessellated_vertex))
SUBTYPE OF (tessellated_item);
END_ENTITY;
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;
ENTITY tessellated_vertex
SUBTYPE OF (tessellated_structured_item);
coordinates : coordinates_list;
topological_link :
OPTIONAL
vertex_point;
point_index : INTEGER;
END_ENTITY;
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;
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;
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;
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;
ENTITY cubic_bezier_tessellated_edge
SUBTYPE OF (tessellated_edge);
SELF\tessellated_edge.line_strip : LIST[4:?] OF INTEGER;
END_ENTITY;
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;
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;
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;
ENTITY tessellated_solid
SUBTYPE OF (tessellated_item);
items : SET[1:?] OF tessellated_structured_item;
geometric_link :
OPTIONAL
manifold_solid_brep;
END_ENTITY;
ENTITY tessellated_shell
SUBTYPE OF (tessellated_item);
items : SET[1:?] OF tessellated_structured_item;
topological_link :
OPTIONAL
connected_face_set;
END_ENTITY;
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;
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;
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;
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;
ENTITY tessellated_curve_set
SUBTYPE OF (tessellated_item);
coordinates : coordinates_list;
line_strips : LIST[1:?] OF LIST[2:?] OF INTEGER;
END_ENTITY;
ENTITY tessellated_geometric_set
SUBTYPE OF (tessellated_item);
children : SET[1:?] OF tessellated_item;
END_ENTITY;
ENTITY tessellated_point_set
SUBTYPE OF (tessellated_item);
coordinates : coordinates_list;
point_list : LIST[1:?] OF INTEGER;
END_ENTITY;
ENTITY tessellated_shape_representation_with_accuracy_parameters
SUBTYPE OF (tessellated_shape_representation);
tessellation_accuracy_parameters : SET[1:?] OF tessellation_accuracy_parameter_item;
END_ENTITY;
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;
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;
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;
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;
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;
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;
END_SCHEMA; -- geometric_model_schema
© ISO 2021 — All rights reserved