0030874: Modeling Algorithms - GCPnts_TangentialDeflection inserts the points between...
[occt.git] / src / GCPnts / GCPnts_UniformAbscissa.hxx
1 // Created on: 1991-02-27
2 // Created by: Jean Claude Vauthier
3 // Copyright (c) 1991-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_UniformAbscissa_HeaderFile
18 #define _GCPnts_UniformAbscissa_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 allows to compute a uniform distribution of points
31 //! on a curve (ie the points will all be equally distant).
32 class GCPnts_UniformAbscissa 
33 {
34 public:
35
36   DEFINE_STANDARD_ALLOC
37
38   
39   //! creation of a indefinite UniformAbscissa
40   Standard_EXPORT GCPnts_UniformAbscissa();
41   
42   //! Computes a uniform abscissa distribution of points on
43   //! the Curve <C>. Parameter Toler is equal Precision::Confusion by default.
44   //! It Is used for more precise calculation of curve length
45   Standard_EXPORT GCPnts_UniformAbscissa(const Adaptor3d_Curve& C, const Standard_Real Abscissa, const Standard_Real Toler = -1);
46   
47   //! Computes a Uniform abscissa distribution of points
48   //! on a part of the Curve <C>. Parameter Toler is equal Precision::Confusion by default.
49   //! It Is used for more precise calculation of curve length
50   Standard_EXPORT GCPnts_UniformAbscissa(const Adaptor3d_Curve& C, const Standard_Real Abscissa, const Standard_Real U1, const Standard_Real U2, const Standard_Real Toler = -1);
51   
52   //! Computes a uniform abscissa distribution of points on
53   //! the Curve <C>.
54   //! <NbPoints> defines the nomber of desired points.
55   //! Parameter Toler is equal Precision::Confusion by default.
56   //! It Is used for more precise calculation of curve length
57   Standard_EXPORT GCPnts_UniformAbscissa(const Adaptor3d_Curve& C, const Standard_Integer NbPoints, const Standard_Real Toler = -1);
58   
59   //! Computes a Uniform abscissa distribution of points
60   //! on a part of the Curve <C>.
61   //! Parameter Toler is equal Precision::Confusion by default.
62   //! It Is used for more precise calculation of curve length
63   Standard_EXPORT GCPnts_UniformAbscissa(const Adaptor3d_Curve& C, const Standard_Integer NbPoints, const Standard_Real U1, const Standard_Real U2, const Standard_Real Toler = -1);
64   
65   //! Initialize the algoritms with <C>, <Abscissa>, <Toler>
66   Standard_EXPORT void Initialize (const Adaptor3d_Curve& C, const Standard_Real Abscissa, const Standard_Real Toler = -1);
67   
68   //! Initialize the algoritms with <C>, <Abscissa>, <U1>,
69   //! <U2>, <Toler>
70   Standard_EXPORT void Initialize (const Adaptor3d_Curve& C, const Standard_Real Abscissa, const Standard_Real U1, const Standard_Real U2, const Standard_Real Toler = -1);
71   
72   //! Initialize the algoritms with <C>, <NbPoints>, <Toler> and
73   Standard_EXPORT void Initialize (const Adaptor3d_Curve& C, const Standard_Integer NbPoints, const Standard_Real Toler = -1);
74   
75   //! Initialize the algoritms with <C>, <Abscissa>, <U1>,
76   //! <U2>, <Toler>.
77   Standard_EXPORT void Initialize (const Adaptor3d_Curve& C, const Standard_Integer NbPoints, const Standard_Real U1, const Standard_Real U2, const Standard_Real Toler = -1);
78   
79   //! Computes a uniform abscissa distribution of points on
80   //! the Curve2d <C>.
81   //! Parameter Toler is equal Precision::Confusion by default.
82   //! It Is used for more precise calculation of curve length
83   Standard_EXPORT GCPnts_UniformAbscissa(const Adaptor2d_Curve2d& C, const Standard_Real Abscissa, const Standard_Real Toler = -1);
84   
85   //! Computes a Uniform abscissa distribution of points
86   //! on a part of the Curve2d <C>.
87   //! Parameter Toler is equal Precision::Confusion by default.
88   //! It Is used for more precise calculation of curve length
89   Standard_EXPORT GCPnts_UniformAbscissa(const Adaptor2d_Curve2d& C, const Standard_Real Abscissa, const Standard_Real U1, const Standard_Real U2, const Standard_Real Toler = -1);
90   
91   //! Computes a uniform abscissa distribution of points on
92   //! the Curve2d <C>.
93   //! <NbPoints> defines the nomber of desired points.
94   //! Parameter Toler is equal Precision::Confusion by default.
95   //! It Is used for more precise calculation of curve length
96   Standard_EXPORT GCPnts_UniformAbscissa(const Adaptor2d_Curve2d& C, const Standard_Integer NbPoints, const Standard_Real Toler = -1);
97   
98   //! Computes a Uniform abscissa distribution of points
99   //! on a part of the Curve2d <C>.
100   //! Parameter Toler is equal Precision::Confusion by default.
101   //! It Is used for more precise calculation of curve length
102   Standard_EXPORT GCPnts_UniformAbscissa(const Adaptor2d_Curve2d& C, const Standard_Integer NbPoints, const Standard_Real U1, const Standard_Real U2, const Standard_Real Toler = -1);
103   
104   //! Initialize the algoritms with <C>, <Abscissa>, <Toler>
105   Standard_EXPORT void Initialize (const Adaptor2d_Curve2d& C, const Standard_Real Abscissa, const Standard_Real Toler = -1);
106   
107   //! Initialize the algoritms with <C>, <Abscissa>, <U1>,
108   //! <U2>, <Toler>
109   Standard_EXPORT void Initialize (const Adaptor2d_Curve2d& C, const Standard_Real Abscissa, const Standard_Real U1, const Standard_Real U2, const Standard_Real Toler = -1);
110   
111   //! Initialize the algoritms with <C>, <NbPoints>, <Toler> and
112   Standard_EXPORT void Initialize (const Adaptor2d_Curve2d& C, const Standard_Integer NbPoints, const Standard_Real Toler = -1);
113   
114   //! Initialize the algoritms with <C>, <Abscissa>, <U1>,
115   //! <U2>, <Toler>.
116   Standard_EXPORT void Initialize (const Adaptor2d_Curve2d& C, const Standard_Integer NbPoints, const Standard_Real U1, const Standard_Real U2, const Standard_Real Toler = -1);
117   
118   Standard_Boolean IsDone () const
119   {
120     return myDone;
121   }
122   
123   Standard_Integer NbPoints () const
124   {
125     StdFail_NotDone_Raise_if (!myDone, "GCPnts_UniformAbscissa::NbPoints()");
126     return myNbPoints;
127   }
128   
129   //! returns the computed Parameter of index <Index>.
130   Standard_Real Parameter (const Standard_Integer Index) const
131   {
132     StdFail_NotDone_Raise_if (!myDone, "GCPnts_UniformAbscissa::Parameter()");
133     return myParams->Value (Index);
134   }
135   
136   //! returne the current abscissa
137   //! ie the distance between two consecutive points
138   Standard_Real Abscissa () const
139   {
140     StdFail_NotDone_Raise_if (!myDone, "GCPnts_UniformAbscissa::Abscissa()");
141     return myAbscissa;
142   }
143
144 private:
145   Standard_Boolean myDone;
146   Standard_Integer myNbPoints;
147   Standard_Real myAbscissa;
148   Handle(TColStd_HArray1OfReal) myParams;
149 };
150
151 #endif // _GCPnts_UniformAbscissa_HeaderFile