0031939: Coding - correction of spelling errors in comments
[occt.git] / src / GCPnts / GCPnts_QuasiUniformAbscissa.hxx
1 // Created on: 1996-08-22
2 // Created by: Stagiaire Mary FABIEN
3 // Copyright (c) 1996-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _GCPnts_QuasiUniformAbscissa_HeaderFile
18 #define _GCPnts_QuasiUniformAbscissa_HeaderFile
19
20 #include <StdFail_NotDone.hxx>
21 #include <TColStd_HArray1OfReal.hxx>
22
23 class Standard_DomainError;
24 class Standard_ConstructionError;
25 class Standard_OutOfRange;
26 class StdFail_NotDone;
27 class Adaptor3d_Curve;
28 class Adaptor2d_Curve2d;
29
30 //! This class provides an algorithm to compute a uniform abscissa
31 //! distribution of points on a curve, i.e. a sequence of
32 //! equidistant points. The distance between two
33 //! consecutive points is measured along the curve.
34 //! The distribution is defined:
35 //! -   either by the curvilinear distance between two consecutive points
36 //! -   or by a number of points.
37 class GCPnts_QuasiUniformAbscissa 
38 {
39 public:
40
41   DEFINE_STANDARD_ALLOC
42
43   
44   //! Constructs an empty algorithm. To define the problem
45   //! to be solved, use the function Initialize.
46   Standard_EXPORT GCPnts_QuasiUniformAbscissa();
47   
48   //! Computes a uniform abscissa distribution of points
49   //! -   on the curve C where Abscissa is the curvilinear distance between
50   //! two consecutive points of the distribution.
51   Standard_EXPORT GCPnts_QuasiUniformAbscissa(const Adaptor3d_Curve& C, const Standard_Integer NbPoints);
52   
53   //! Computes a uniform abscissa distribution of points
54   //! on the part of curve C limited by the two parameter values U1 and U2,
55   //! where Abscissa is the curvilinear distance between
56   //! two consecutive points of the distribution.
57   //! The first point of the distribution is either the origin of
58   //! curve C or the point of parameter U1. The following
59   //! points are computed such that the curvilinear
60   //! distance between two consecutive points is equal to Abscissa.
61   //! The last point of the distribution is either the end
62   //! point of curve C or the point of parameter U2.
63   //! However the curvilinear distance between this last
64   //! point and the point just preceding it in the distribution
65   //! is, of course, generally not equal to Abscissa.
66   //! Use the function IsDone to verify that the
67   //! computation was successful, the function NbPoints
68   //! to obtain the number of points of the computed
69   //! distribution, and the function Parameter to read the
70   //! parameter of each point.
71   //! Warning
72   //! The roles of U1 and U2 are inverted if U1 > U2 .
73   //! Warning
74   //! C is an adapted curve, that is, an object which is an
75   //! interface between:
76   //! -   the services provided by either a 2D curve from
77   //! the package Geom2d (in the case of an
78   //! Adaptor2d_Curve2d curve) or a 3D curve from
79   //! the package Geom (in the case of an Adaptor3d_Curve curve),
80   //! -   and those required on the curve by the computation algorithm.
81   Standard_EXPORT GCPnts_QuasiUniformAbscissa(const Adaptor3d_Curve& C, const Standard_Integer NbPoints, const Standard_Real U1, const Standard_Real U2);
82   
83   //! Initialize the algorithms with <C>, <NbPoints> and
84   Standard_EXPORT void Initialize (const Adaptor3d_Curve& C, const Standard_Integer NbPoints);
85   
86   //! Initialize the algorithms with <C>, <Abscissa>, <U1>,
87   //! <U2>.
88   Standard_EXPORT void Initialize (const Adaptor3d_Curve& C, const Standard_Integer NbPoints, const Standard_Real U1, const Standard_Real U2);
89   
90   //! Computes a uniform abscissa distribution of points on
91   //! the Curve2d <C>.
92   //! <NbPoints> defines the nomber of desired points.
93   Standard_EXPORT GCPnts_QuasiUniformAbscissa(const Adaptor2d_Curve2d& C, const Standard_Integer NbPoints);
94   
95   //! Computes a Uniform abscissa distribution of points
96   //! on a part of the Curve2d <C>.
97   Standard_EXPORT GCPnts_QuasiUniformAbscissa(const Adaptor2d_Curve2d& C, const Standard_Integer NbPoints, const Standard_Real U1, const Standard_Real U2);
98   
99   //! Initialize the algorithms with <C>, <NbPoints> and
100   Standard_EXPORT void Initialize (const Adaptor2d_Curve2d& C, const Standard_Integer NbPoints);
101   
102   //! Initialize the algorithms with <C>, <Abscissa>, <U1>,
103   //! <U2>.
104   Standard_EXPORT void Initialize (const Adaptor2d_Curve2d& C, const Standard_Integer NbPoints, const Standard_Real U1, const Standard_Real U2);
105   
106   //! Returns true if the computation was successful.
107   //! IsDone is a protection against:
108   //! -   non-convergence of the algorithm
109   //! -   querying the results before computation.
110   Standard_Boolean IsDone () const
111   {
112     return myDone;
113   }
114
115   //! Returns the number of points of the distribution
116   //! computed by this algorithm.
117   //! This value is either:
118   //! -   the one imposed on the algorithm at the time of
119   //! construction (or initialization), or
120   //! -   the one computed by the algorithm when the
121   //! curvilinear distance between two consecutive
122   //! points of the distribution is imposed on the
123   //! algorithm at the time of construction (or initialization).
124   //! Exceptions
125   //! StdFail_NotDone if this algorithm has not been
126   //! initialized, or if the computation was not successful.
127   Standard_Integer NbPoints () const
128   {
129     StdFail_NotDone_Raise_if (!myDone, "GCPnts_QuasiUniformAbscissa::NbPoints()");
130     return myNbPoints;
131   }
132   
133   //! Returns the parameter of the point of index Index in
134   //! the distribution computed by this algorithm.
135   //! Warning
136   //! Index must be greater than or equal to 1, and less
137   //! than or equal to the number of points of the
138   //! distribution. However, pay particular attention as this
139   //! condition is not checked by this function.
140   //! Exceptions
141   //! StdFail_NotDone if this algorithm has not been
142   //! initialized, or if the computation was not successful.
143   Standard_Real Parameter (const Standard_Integer Index) const
144   {
145     StdFail_NotDone_Raise_if (!myDone, "GCPnts_QuasiUniformAbscissa::Parameter()");
146     return myParams->Value (Index);
147   }
148
149 private:
150   Standard_Boolean myDone;
151   Standard_Integer myNbPoints;
152   Handle(TColStd_HArray1OfReal) myParams;
153 };
154
155 #endif // _GCPnts_QuasiUniformAbscissa_HeaderFile