Commit | Line | Data |
---|---|---|

42cf5bc1 | 1 | // Created on: 1991-10-03 |

2 | // Copyright (c) 1991-1999 Matra Datavision | |

3 | // Copyright (c) 1999-2014 OPEN CASCADE SAS | |

4 | // | |

5 | // This file is part of Open CASCADE Technology software library. | |

6 | // | |

7 | // This library is free software; you can redistribute it and/or modify it under | |

8 | // the terms of the GNU Lesser General Public License version 2.1 as published | |

9 | // by the Free Software Foundation, with special exception defined in the file | |

10 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT | |

11 | // distribution for complete text of the license and disclaimer of any warranty. | |

12 | // | |

13 | // Alternatively, this file may be used under the terms of Open CASCADE | |

14 | // commercial license or contractual agreement. | |

15 | ||

16 | #ifndef _Geom2dConvert_BSplineCurveKnotSplitting_HeaderFile | |

17 | #define _Geom2dConvert_BSplineCurveKnotSplitting_HeaderFile | |

18 | ||

19 | #include <Standard.hxx> | |

20 | #include <Standard_DefineAlloc.hxx> | |

21 | #include <Standard_Handle.hxx> | |

22 | ||

23 | #include <TColStd_HArray1OfInteger.hxx> | |

24 | #include <Standard_Integer.hxx> | |

25 | #include <TColStd_Array1OfInteger.hxx> | |

26 | class Standard_DimensionError; | |

27 | class Standard_RangeError; | |

28 | class Geom2d_BSplineCurve; | |

29 | ||

30 | ||

31 | //! An algorithm to determine points at which a BSpline | |

32 | //! curve should be split in order to obtain arcs of the same continuity. | |

33 | //! If you require curves with a minimum continuity for | |

34 | //! your computation, it is useful to know the points | |

35 | //! between which an arc has a continuity of a given | |

36 | //! order. The continuity order is given at the construction time. | |

37 | //! For a BSpline curve, the discontinuities are | |

38 | //! localized at the knot values. Between two knot values | |

39 | //! the BSpline is infinitely and continuously | |

40 | //! differentiable. At a given knot, the continuity is equal | |

41 | //! to: Degree - Mult, where Degree is the | |

42 | //! degree of the BSpline curve and Mult is the multiplicity of the knot. | |

43 | //! It is possible to compute the arcs which correspond to | |

44 | //! this splitting using the global function | |

45 | //! SplitBSplineCurve provided by the package Geom2dConvert. | |

46 | //! A BSplineCurveKnotSplitting object provides a framework for: | |

47 | //! - defining the curve to be analysed and the required degree of continuity, | |

48 | //! - implementing the computation algorithm, and | |

49 | //! - consulting the results. | |

50 | class Geom2dConvert_BSplineCurveKnotSplitting | |

51 | { | |

52 | public: | |

53 | ||

54 | DEFINE_STANDARD_ALLOC | |

55 | ||

56 | ||

57 | //! Determines points at which the BSpline curve | |

58 | //! BasisCurve should be split in order to obtain arcs | |

59 | //! with a degree of continuity equal to ContinuityRange. | |

60 | //! These points are knot values of BasisCurve. They | |

61 | //! are identified by indices in the knots table of BasisCurve. | |

62 | //! Use the available interrogation functions to access | |

63 | //! computed values, followed by the global function | |

64 | //! SplitBSplineCurve (provided by the package | |

65 | //! Geom2dConvert) to split the curve. | |

66 | //! Exceptions | |

67 | //! Standard_RangeError if ContinuityRange is less than zero. | |

68 | Standard_EXPORT Geom2dConvert_BSplineCurveKnotSplitting(const Handle(Geom2d_BSplineCurve)& BasisCurve, const Standard_Integer ContinuityRange); | |

69 | ||

70 | //! Returns the number of points at which the analysed | |

71 | //! BSpline curve should be split, in order to obtain arcs | |

72 | //! with the continuity required by this framework. | |

73 | //! All these points correspond to knot values. Note that | |

74 | //! the first and last points of the curve, which bound the | |

75 | //! first and last arcs, are counted among these splitting points. | |

76 | Standard_EXPORT Standard_Integer NbSplits() const; | |

77 | ||

78 | //! Loads the SplitValues table with the split knots | |

79 | //! values computed in this framework. Each value in the | |

80 | //! table is an index in the knots table of the BSpline | |

81 | //! curve analysed by this algorithm. | |

82 | //! The values in SplitValues are given in ascending | |

83 | //! order and comprise the indices of the knots which | |

84 | //! give the first and last points of the curve. Use two | |

85 | //! consecutive values from the table as arguments of the | |

86 | //! global function SplitBSplineCurve (provided by the | |

87 | //! package Geom2dConvert) to split the curve. | |

88 | //! Exceptions | |

89 | //! Standard_DimensionError if the array SplitValues | |

90 | //! was not created with the following bounds: | |

91 | //! - 1, and | |

92 | //! - the number of split points computed in this | |

93 | //! framework (as given by the function NbSplits). | |

94 | Standard_EXPORT void Splitting (TColStd_Array1OfInteger& SplitValues) const; | |

95 | ||

96 | //! Returns the split knot of index Index to the split knots | |

97 | //! table computed in this framework. The returned value | |

98 | //! is an index in the knots table of the BSpline curve | |

99 | //! analysed by this algorithm. | |

100 | //! Notes: | |

101 | //! - If Index is equal to 1, the corresponding knot | |

102 | //! gives the first point of the curve. | |

103 | //! - If Index is equal to the number of split knots | |

104 | //! computed in this framework, the corresponding | |

105 | //! point is the last point of the curve. | |

106 | //! Exceptions | |

107 | //! Standard_RangeError if Index is less than 1 or | |

108 | //! greater than the number of split knots computed in this framework. | |

109 | Standard_EXPORT Standard_Integer SplitValue (const Standard_Integer Index) const; | |

110 | ||

111 | ||

112 | ||

113 | ||

114 | protected: | |

115 | ||

116 | ||

117 | ||

118 | ||

119 | ||

120 | private: | |

121 | ||

122 | ||

123 | ||

124 | Handle(TColStd_HArray1OfInteger) splitIndexes; | |

125 | ||

126 | ||

127 | }; | |

128 | ||

129 | ||

130 | ||

131 | ||

132 | ||

133 | ||

134 | ||

135 | #endif // _Geom2dConvert_BSplineCurveKnotSplitting_HeaderFile |