Application module: B spline geometry | ISO/TS 10303-1801:2011-02(E) © ISO |
This clause specifies the information requirements for the B spline geometry 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 B_spline_geometry_arm schema and identifies the necessary external references.
EXPRESS specification:
*)
SCHEMA B_spline_geometry_arm;
(*
The following EXPRESS interface statement specifies the elements imported from the ARM of another application module.
EXPRESS specification:
*)
USE FROM
Basic_geometry_arm;
--
ISO/TS 10303-1652
(*
NOTE 1 The schemas referenced above are specified in the following part of ISO 10303:
Basic_geometry_arm ISO/TS 10303-1652
NOTE 2 See Annex C, Figures C.1and C.2 for a graphical representation of this schema.
This subclause specifies the ARM types for this application module. The ARM types and definitions are specified below.
EXPRESS specification:
*)
TYPE
knot_specification =
ENUMERATION
OF
(bezier,
quasi_uniform,
uniform);
END_TYPE;
(*
Enumerated item definitions:
bezier: the form of knots appropriate for a piecewise Bezier curve or surface. If the degree is d, the first knot is 0.0 with multiplicity (d + 1), the subsequent intermediate knots have values separated by 1.0 and are of multiplicity d, the final knot has multiplicity (d + 1);
quasi_uniform: the form of knots appropriate for a quasi-uniform B-spline curve; the knots are of multiplicity (degree +1) at the ends, of multiplicity 1 elsewhere, and they start with 0.0 and each differs by 1.0 from the preceding knot;
uniform: the form of knots appropriate for a uniform B-spline curve; all knots are of multiplicity 1, they start with the value -d, where d is the degree, and each differs by 1.0 from the preceding knot;
EXPRESS specification:
*)
TYPE
parameter_value =
REAL;
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 B_spline_curve is a type of Bounded_curve that is a piecewise parametric polynomial or rational curve described in terms of control points and basis functions. The basis functions are defined by their degree and knot values and multiplicities. Depending upon the type these knots may be explicitly, or implicitly defined.
NOTE The full semantics of this entity are defined in the corresponding MIM object which has an additional derived attribute.
EXPRESS specification:
*)
ENTITY B_spline_curve
ABSTRACT SUPERTYPE
OF (ONEOF (Curve_with_explicit_knots,
Curve_with_implicit_knots)
ANDOR Rational_b_spline_curve)
SUBTYPE OF (Bounded_curve);
degree : INTEGER;
control_points : LIST[2:?] OF Cartesian_point;
closed : LOGICAL;
WHERE
WR1: ('B_SPLINE_GEOMETRY_ARM.CURVE_WITH_EXPLICIT_KNOTS' IN TYPEOF(self)) OR
('B_SPLINE_GEOMETRY_ARM.CURVE_WITH_IMPLICIT_KNOTS' IN TYPEOF(self));
END_ENTITY;
(*
Attribute definitions:
degree: the algebraic degree of the B-spline basis functions for the curve.
control_points: the list of control points for the curve.
closed: indication of whether, or not, the curve is closed; it is for information only.
Formal propositions:
WR1: Any instantiation of this entity shall include one of the subtypes Curve_with_explicit_knots or Curve_with_implicit_knots.
A B_spline_surface is a type of Bounded_surface that is a piecewise parametric polynomial or rational surface described in terms of a two dimensional array of control points and basis functions. The basis functions are defined by their degree and knot values and nultiplicities. Depending upon the type these knots may be explicitly, or implicitly defined.
NOTE The full semantics of this entity are defined in the corresponding MIM object which has an additional derived attributes.
EXPRESS specification:
*)
ENTITY B_spline_surface
ABSTRACT SUPERTYPE
OF (ONEOF (Surface_with_explicit_knots,
Surface_with_implicit_knots)
ANDOR Rational_b_spline_surface)
SUBTYPE OF (Bounded_surface);
u_degree : INTEGER;
v_degree : INTEGER;
control_points : LIST[2:?] OF LIST[2:?] OF Cartesian_point;
u_closed : LOGICAL;
v_closed : LOGICAL;
WHERE
WR1: ('B_SPLINE_GEOMETRY_ARM.SURFACE_WITH_EXPLICIT_KNOTS' IN TYPEOF(self)) OR
('B_SPLINE_GEOMETRY_ARM.SURFACE_WITH_IMPLICIT_KNOTS' IN TYPEOF(self));
END_ENTITY;
(*
Attribute definitions:
u_degree: the algebraic degree of the B-spline basis functions for the surface in the first parameter direction.
v_degree: the algebraic degree of the B-spline basis functions for the surface in the second parameter direction.
control_points: the list of list of control points for the surface.
u_closed: indication of whether, or not, the surface is closed in the first parametric direction; it is for information only.
v_closed: indication of whether, or not, the surface is closed in the second parametric direction; it is for information only.
Formal propositions:
WR1: Any instantiation of this entity shall include one of the subtypes Surface_with_explicit_knots or Surface_with_implicit_knots.
A Curve_with_explicit_knots is a type of B_spline_curve for which the knot values are explicitly given. This subtype shall be used to represent non-uniform B-spline curves and may be used for other knot types.
NOTE The full semantics of this entity are defined in the corresponding MIM object which has an additional derived attribute and a constraint to ensure that the specified knot values are compatible with the degree and control points for the curve.
EXPRESS specification:
*)
ENTITY Curve_with_explicit_knots
SUBTYPE OF (B_spline_curve);
knot_multiplicities : LIST[2:?] OF INTEGER;
knot_values : LIST[2:?] OF parameter_value;
WHERE
WR1: SIZEOF(knot_multiplicities) = SIZEOF(knot_values);
END_ENTITY;
(*
Attribute definitions:
knot_multiplicities: the list of multiplicities for the knot_values.
knot_values: the list of knot values used to define the B-spline basis functions.
Formal propositions:
WR1: The two lists of knot values and knot multiplicities shall have the same length.
A Curve_with_implicit_knots is a type of B_spline_curve for which the knot values are implicitly given. The precise specification of the knots depends upon the value of knot_type
NOTE This entity is mapped to one of 3 distinct MIM entities depending upon the value of knot_type.
EXPRESS specification:
*)
ENTITY Curve_with_implicit_knots
SUBTYPE OF (B_spline_curve);
knot_type : knot_specification;
END_ENTITY;
(*
Attribute definitions:
knot_type: the type of configuration for the implicit set of knots and multiplicities. These are described in knot_specification.
A Rational_b_spline_curve is a type of B_spline_curve and is a piecewise parametric rational curve described in terms of control points, weights and basis functions. This subtype is instantiated with one of the other subtypes of B_spline_curve which explicitly or implicitly provide the knot values used to define the basis functions. All weights shall be positive.
NOTE The full semantics and parameterization of this entity are defined in the corresponding MIM object.
EXPRESS specification:
*)
ENTITY Rational_b_spline_curve
SUBTYPE OF (B_spline_curve);
weight_values : LIST[2:?] OF REAL;
WHERE
WR1: SIZEOF(weight_values) = SIZEOF(SELF\B_spline_curve.control_points);
WR2: positive_curve_weights(SELF);
END_ENTITY;
(*
Attribute definitions:
weight_values: the list of positive weights to be associated with the control points of the curve.
NOTE If all the weights have value 1.0 the curve is identical to a simple non-rational B-spline curve.
Formal propositions:
WR1: The two lists of weight values and control points shall have the same length.
WR2: The weight values shall all be positive.
A Rational_b_spline_surface is a type of B_spline_surface and is a piecewise parametric rational curve described in terms of control points, weights and basis functions. This subtype is instantiated with one of the other subtypes of B_spline_surface which explicitly or implicitly provide the knot values used to define the basis functions. All weights shall be positive.
NOTE The full semantics and parameterization of this entity are defined in the corresponding MIM object.
EXPRESS specification:
*)
ENTITY Rational_b_spline_surface
SUBTYPE OF (B_spline_surface);
weight_values : LIST[2:?] OF LIST[2:?] OF REAL;
WHERE
WR1: (SIZEOF(weight_values) =
SIZEOF(SELF\B_spline_surface.control_points))
AND (SIZEOF(weight_values[1]) =
SIZEOF(SELF\B_spline_surface.control_points[1]));
WR2: positive_surface_weights(SELF);
END_ENTITY;
(*
Attribute definitions:
weight_values: the list of positive weights to be associated with the control points of the curve.
NOTE If all the weights have value 1.0 the curve is identical to a simple non-rational B-spline surface.
Formal propositions:
WR1: The two lists of lists weight values and control points shall have the same lengths.
WR2: The weight values shall all be positive.
A Surface_with_explicit_knots is a type of B_spline_surface for which the knot values are explicitly given. This subtype shall be used to represent non-uniform B-spline surfaces and may be used for other knot types.
NOTE The full semantics of this entity are defined in the corresponding MIM object which has an additional derived attribute and a constraint to ensure that the specified knot values are compatible with the degree and control points for the surface.
EXPRESS specification:
*)
ENTITY Surface_with_explicit_knots
SUBTYPE OF (B_spline_surface);
u_knot_multiplicities : LIST[2:?] OF INTEGER;
u_knot_values : LIST[2:?] OF parameter_value;
v_knot_multiplicities : LIST[2:?] OF INTEGER;
v_knot_values : LIST[2:?] OF parameter_value;
WHERE
WR1: SIZEOF(u_knot_multiplicities) = SIZEOF(u_knot_values);
WR2: SIZEOF(v_knot_multiplicities) = SIZEOF(v_knot_values);
END_ENTITY;
(*
Attribute definitions:
u_knot_multiplicities: the list of multiplicities for the u_knot_values, these are in the first parametric direction for the surface.
u_knot_values: the list of knot values used to define the B-spline basis functions in the first parametric direction of the surface.
v_knot_multiplicities: the list of multiplicities for the v_knot_values, these are in the second parametric direction for the surface.
v_knot_values: the list of knot values used to define the B-spline basis functions in the second parametric direction of the surface.
Formal propositions:
WR1: The two lists of knot values and knot multiplicities in the u parameter direction shall have the same length.
WR2: The two lists of knot values and knot multiplicities in the v parameter direction shall have the same length.
A Surface_with_implicit_knots is a type of B_spline_surface for which the knot values are implicitly given. The precise specification of the knots depends upon the value of knot_type. There are two knot sets for a surface and the precise values depend also on the degree of the surface in each parametric direction.
NOTE This entity is mapped to one of 3 distinct MIM entities depending upon the value of knot_type.
EXPRESS specification:
*)
ENTITY Surface_with_implicit_knots
SUBTYPE OF (B_spline_surface);
knot_type : knot_specification;
END_ENTITY;
(*
Attribute definitions:
knot_type: the type of configuration for the implicit sets of knots and multiplicities. These are described in knot_specification.
This subclause specifies the ARM functions for this module. The ARM functions and definitions are specified below.
EXPRESS specification:
*)
FUNCTION positive_curve_weights (bsc : Rational_b_spline_curve) :BOOLEAN;
LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 1 TO SIZEOF(bsc.weight_values); IF bsc.weight_values[i] <= 0.0 THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; RETURN(result);
END_FUNCTION;
(*
Argument definitions:
bsc: (Input) The Rational_b_spline_curve for which the weights are to be validated.
EXPRESS specification:
*)
FUNCTION positive_surface_weights (bss : Rational_b_spline_surface) :BOOLEAN;
LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 1 TO SIZEOF(bss.weight_values); REPEAT j := 0 TO SIZEOF(bss.weight_values[1]); IF (bss.weight_values[i][j] <= 0.0) THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; END_REPEAT; RETURN(result);
END_FUNCTION;
(*
Argument definitions:
bss: (Input) The Rational_b_spline_surface for which the weights are to be validated.
*)
END_SCHEMA; -- B_spline_geometry_arm
(*
© ISO 2011 — All rights reserved