The IfcBSplineSurfaceWithKnots is a general form of rational or polynomial parametric surface in which the knot values are explicitly given.
NOTE Definition according to ISO/CD 10303-42:1992
This is a B-spline surface in which the knot values are explicitly given. This subtype shall be used to represent non-uniform B-spline surfaces, and may also be used for other knot types.
All knot multiplicities except the first and the last shall be in the range 1,....,d; the first and last may have a maximum value of d + 1. In evaluating the basis functions, a knot u of, e.g., multiplicity 3 is interpreted as a sequence u, u, u, in the knot array.
NOTE Entity adapted from b_spline_surface_with_knots defined in ISO10303-42.
HISTORY New entity in IFC4.
|LayerAssignment||SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems||Assignment of the representation item to a single or multiple layer(s). The LayerAssignments can override a LayerAssignments of the IfcRepresentation it is used within the list of Items.|
> IFC2x3 CHANGE The inverse attribute LayerAssignments has been added.
> IFC4 CHANGE The inverse attribute LayerAssignment has been restricted to max 1. Upward compatibility for file based exchange is guaranteed.
|StyledByItem||SET [0:1] OF IfcStyledItem FOR Item||Reference to the IfcStyledItem that provides presentation information to the representation, e.g. a curve style, including colour and thickness to a geometric curve.|
> IFC2x3 CHANGE The inverse attribute StyledByItem has been added.
|Dim||INVALID||The space dimensionality of IfcSurface. It is always a three-dimensional geometric representation item.|
> IFC4 CHANGE Derived attribute promoted from subtypes.
|1||UDegree||IfcInteger||Algebraic degree of basis functions in u.|
|2||VDegree||IfcInteger||Algebraic degree of basis functions in v.|
|3||ControlPointsList||LIST [2:?] OF LIST [2:?] OF IfcCartesianPoint||This is a list of lists of control points.|
|4||SurfaceForm||IfcBSplineSurfaceForm||Indicator of special surface types.|
|5||UClosed||IfcLogical||Indication of whether the surface is closed in the u direction; this is for information only.|
|6||VClosed||IfcLogical||Indication of whether the surface is closed in the v direction; this is for information only.|
|7||SelfIntersect||IfcLogical||Flag to indicate whether, or not, surface is self-intersecting; this is for information only.|
|UUpper||INVALID||Upper index on control points in u direction.|
|VUpper||INVALID||Upper index on control points in v direction.|
|ControlPoints||INVALID||Array (two-dimensional) of control points defining surface geometry. This array is constructed from the control points list.|
|8||UMultiplicities||LIST [2:?] OF IfcInteger||The multiplicities of the knots in the u parameter direction.|
|9||VMultiplicities||LIST [2:?] OF IfcInteger||The multiplicities of the knots in the v parameter direction.|
|10||UKnots||LIST [2:?] OF IfcParameterValue||The list of the distinct knots in the u parameter direction.|
|11||VKnots||LIST [2:?] OF IfcParameterValue||The list of the distinct knots in the v parameter direction.|
|12||KnotSpec||IfcKnotType||The description of the knot type.|
|KnotVUpper||INVALID||The number of distinct knots in the v parameter direction.|
|KnotUUpper||INVALID||The number of distinct knots in the u parameter direction.|
ENTITY IfcBSplineSurfaceWithKnots SUPERTYPE OF (ONEOF (IfcRationalBSplineSurfaceWithKnots)) SUBTYPE OF (IfcBSplineSurface); UMultiplicities : LIST [2:?] OF IfcInteger; VMultiplicities : LIST [2:?] OF IfcInteger; UKnots : LIST [2:?] OF IfcParameterValue; VKnots : LIST [2:?] OF IfcParameterValue; KnotSpec : IfcKnotType; DERIVE KnotVUpper : IfcInteger := SIZEOF(VKnots); KnotUUpper : IfcInteger := SIZEOF(UKnots); WHERE UDirectionConstraints : IfcConstraintsParamBSpline ( SELF\IfcBSplineSurface.UDegree, KnotUUpper, SELF\IfcBSplineSurface.UUpper, UMultiplicities, UKnots); VDirectionConstraints : IfcConstraintsParamBSpline ( SELF\IfcBSplineSurface.VDegree, KnotVUpper, SELF\IfcBSplineSurface.VUpper, VMultiplicities, VKnots); CorrespondingULists : SIZEOF(UMultiplicities) = KnotUUpper; CorrespondingVLists : SIZEOF(VMultiplicities) = KnotVUpper; END_ENTITY;