带节有理B样条曲线是用控制点和基本函数描述的B样条曲线。它描述了除了在超类型ifcbsprinecurve中定义的控制点之外的权重。
所有权重应为正,曲线由以下公式给出:

where
| k+1 | number of control points |
| Pi | control points |
| wi | weights |
| d | degree |
注:实体改编自ISO 10303-42中的有理曲线。
IFC4中增加的新实体。
Formal Propositions
| Rule | Description |
|---|---|
| SameNumOfWeightsAndPoints | There shall be the same number of weights as control points. |
| WeightsGreaterZero | All the weights shall have values greater than 0.0. |

| # | Attribute | Type | Cardinality | Description | C |
|---|---|---|---|---|---|
| IfcRepresentationItem | |||||
| LayerAssignment | IfcPresentationLayerAssignment @AssignedItems |
S[0:1] | 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. | X | |
| StyledByItem | IfcStyledItem @Item |
S[0:1] | Reference to the IfcStyledItem that provides presentation information to the representation, e.g. a curve style, including colour and thickness to a geometric curve. | X | |
| IfcGeometricRepresentationItem | |||||
| IfcCurve | |||||
| Dim :=IfcCurveDim(SELF) |
IfcDimensionCount | [1:1] | The space dimensionality of this abstract class, defined differently for all subtypes, i.e. for IfcLine, IfcConic and IfcBoundedCurve. | X | |
| IfcBoundedCurve | |||||
| IfcBSplineCurve | |||||
| 1 | Degree | IfcInteger | [1:1] | The algebraic degree of the basis functions. | X |
| 2 | ControlPointsList | IfcCartesianPoint | L[2:?] | The list of control points for the curve. | X |
| 3 | CurveForm | IfcBSplineCurveForm | [1:1] | Used to identify particular types of curve; it is for information only. | X |
| 4 | ClosedCurve | IfcLogical | [1:1] | Indication of whether the curve is closed; it is for information only. | X |
| 5 | SelfIntersect | IfcLogical | [1:1] | Indication whether the curve self-intersects or not; it is for information only. | X |
| UpperIndexOnControlPoints :=(SIZEOF(ControlPointsList) - 1) |
IfcInteger | [1:1] | The upper index on the array of control points; the lower index is 0. This value is derived from the control points list. | X | |
| ControlPoints :=IfcListToArray(ControlPointsList,0,UpperIndexOnControlPoints) |
IfcCartesianPoint | A[0:UpperIndexOnControlPoints] | The array of control points used to define the geometry of the curve. This is derived from the list of control points. | X | |
| IfcBSplineCurveWithKnots | |||||
| 6 | KnotMultiplicities | IfcInteger | L[2:?] | The multiplicities of the knots. This list defines the number of times each knot in the knots list is to be repeated in constructing the knot array. | X |
| 7 | Knots | IfcParameterValue | L[2:?] | The list of distinct knots used to define the B-spline basis functions. | X |
| 8 | KnotSpec | IfcKnotType | [1:1] | The description of the knot type. This is for information only. | X |
| UpperIndexOnKnots :=SIZEOF(Knots) |
IfcInteger | [1:1] | The upper index on the knot arrays; the lower index is 1. | X | |
| IfcRationalBSplineCurveWithKnots | |||||
| 9 | WeightsData | IfcReal | L[2:?] | The supplied values of the weights. | X |
| Weights :=IfcListToArray(WeightsData,0,SELF\IfcBSplineCurve.UpperIndexOnControlPoints) |
IfcReal | A[0:UpperIndexOnControlPoints] | The array of weights associated with the control points. This is derived from the weights data. | X | |
ENTITY IfcRationalBSplineCurveWithKnots
SUBTYPE OF (IfcBSplineCurveWithKnots);
WeightsData : LIST [2:?] OF IfcReal;
DERIVE
Weights : ARRAY [0:UpperIndexOnControlPoints] OF IfcReal := IfcListToArray(WeightsData,0,SELF\IfcBSplineCurve.UpperIndexOnControlPoints);
WHERE
SameNumOfWeightsAndPoints : SIZEOF(WeightsData) = SIZEOF(SELF\IfcBSplineCurve.ControlPointsList);
WeightsGreaterZero : IfcCurveWeightsPositive(SELF);
END_ENTITY;
IfcRationalBSplineCurveWithKnots
原文:https://www.cnblogs.com/herd/p/13217419.html