a748e7e4f5f36ccbef22ceea7cc8d35d1ecd825e
[occt.git] / src / Bisector / Bisector_BisecPC.hxx
1 // Created on: 1994-01-10
2 // Created by: Yves FRICAUD
3 // Copyright (c) 1994-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 _Bisector_BisecPC_HeaderFile
18 #define _Bisector_BisecPC_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <gp_Pnt2d.hxx>
24 #include <Standard_Real.hxx>
25 #include <TColStd_SequenceOfReal.hxx>
26 #include <Standard_Integer.hxx>
27 #include <Standard_Boolean.hxx>
28 #include <Bisector_Curve.hxx>
29 #include <GeomAbs_Shape.hxx>
30 class Geom2d_Curve;
31 class Standard_DomainError;
32 class Standard_RangeError;
33 class gp_Pnt2d;
34 class Geom2d_Geometry;
35 class gp_Trsf2d;
36 class gp_Vec2d;
37
38
39 class Bisector_BisecPC;
40 DEFINE_STANDARD_HANDLE(Bisector_BisecPC, Bisector_Curve)
41
42 //! Provides the bisector between a point and a curve.
43 //! the curvature on the curve has to be monoton.
44 //! the point can't be on the curve exept at the extremitys.
45 class Bisector_BisecPC : public Bisector_Curve
46 {
47
48 public:
49
50   
51   Standard_EXPORT Bisector_BisecPC();
52   
53   //! Constructs the bisector between the point <P> and
54   //! the curve <Cu>.
55   //! <Side> = 1. if the bisector curve is on the Left of <Cu>
56   //! else <Side> = -1.
57   //! <DistMax> is used to trim the bisector.The distance
58   //! between the points of the bisector and <Cu> is smaller
59   //! than <DistMax>.
60   Standard_EXPORT Bisector_BisecPC(const Handle(Geom2d_Curve)& Cu, const gp_Pnt2d& P, const Standard_Real Side, const Standard_Real DistMax = 500);
61   
62   //! Constructs the bisector between the point <P> and
63   //! the curve <Cu> Trimmed by <UMin> and <UMax>
64   //! <Side> = 1. if the bisector curve is on the Left of <Cu>
65   //! else <Side> = -1.
66   //! Warning: the bisector is supposed all over defined between
67   //! <UMin> and <UMax>.
68   Standard_EXPORT Bisector_BisecPC(const Handle(Geom2d_Curve)& Cu, const gp_Pnt2d& P, const Standard_Real Side, const Standard_Real UMin, const Standard_Real UMax);
69   
70   //! Construct the bisector between the point <P> and
71   //! the curve <Cu>.
72   //! <Side> = 1. if the bisector curve is on the Left of <Cu>
73   //! else <Side> = -1.
74   //! <DistMax> is used to trim the bisector.The distance
75   //! between the points of the bisector and <Cu> is smaller
76   //! than <DistMax>.
77   Standard_EXPORT void Perform (const Handle(Geom2d_Curve)& Cu, const gp_Pnt2d& P, const Standard_Real Side, const Standard_Real DistMax = 500);
78   
79   //! Returns True if the bisector is extended at start.
80   Standard_EXPORT Standard_Boolean IsExtendAtStart() const Standard_OVERRIDE;
81   
82   //! Returns True if the bisector is extended at end.
83   Standard_EXPORT Standard_Boolean IsExtendAtEnd() const Standard_OVERRIDE;
84   
85
86   //! Changes the direction of parametrization of <me>.
87   //! The orientation  of the curve is modified. If the curve
88   //! is bounded the StartPoint of the initial curve becomes the
89   //! EndPoint of the reversed curve  and the EndPoint of the initial
90   //! curve becomes the StartPoint of the reversed curve.
91   Standard_EXPORT void Reverse() Standard_OVERRIDE;
92   
93   //! Returns the  parameter on the  reversed  curve for
94   //! the point of parameter U on <me>.
95   Standard_EXPORT Standard_Real ReversedParameter (const Standard_Real U) const Standard_OVERRIDE;
96   
97   Standard_EXPORT Handle(Geom2d_Geometry) Copy() const Standard_OVERRIDE;
98   
99
100   //! Transformation of a geometric object. This tansformation
101   //! can be a translation, a rotation, a symmetry, a scaling
102   //! or a complex transformation obtained by combination of
103   //! the previous elementaries transformations.
104   Standard_EXPORT void Transform (const gp_Trsf2d& T) Standard_OVERRIDE;
105   
106   //! Returns the order of continuity of the curve.
107   //! Raised if N < 0.
108   Standard_EXPORT Standard_Boolean IsCN (const Standard_Integer N) const Standard_OVERRIDE;
109   
110   //! Value of the first parameter.
111   Standard_EXPORT Standard_Real FirstParameter() const Standard_OVERRIDE;
112   
113   //! Value of the last parameter.
114   Standard_EXPORT Standard_Real LastParameter() const Standard_OVERRIDE;
115   
116   Standard_EXPORT GeomAbs_Shape Continuity() const Standard_OVERRIDE;
117   
118   //! If necessary,  breaks the  curve in  intervals  of
119   //! continuity  <C1>.    And  returns   the number   of
120   //! intervals.
121   Standard_EXPORT Standard_Integer NbIntervals() const Standard_OVERRIDE;
122   
123   //! Returns  the  first  parameter    of  the  current
124   //! interval.
125   Standard_EXPORT Standard_Real IntervalFirst (const Standard_Integer Index) const Standard_OVERRIDE;
126   
127   //! Returns  the  last  parameter    of  the  current
128   //! interval.
129   Standard_EXPORT Standard_Real IntervalLast (const Standard_Integer Index) const Standard_OVERRIDE;
130   
131   Standard_EXPORT GeomAbs_Shape IntervalContinuity() const;
132   
133   Standard_EXPORT Standard_Boolean IsClosed() const Standard_OVERRIDE;
134   
135   Standard_EXPORT Standard_Boolean IsPeriodic() const Standard_OVERRIDE;
136   
137   //! Returns   the   distance   between  the  point  of
138   //! parameter U on <me> and my point or my curve.
139   Standard_EXPORT Standard_Real Distance (const Standard_Real U) const;
140   
141   Standard_EXPORT void D0 (const Standard_Real U, gp_Pnt2d& P) const Standard_OVERRIDE;
142   
143   Standard_EXPORT void D1 (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V) const Standard_OVERRIDE;
144   
145   Standard_EXPORT void D2 (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) const Standard_OVERRIDE;
146   
147   Standard_EXPORT void D3 (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) const Standard_OVERRIDE;
148   
149   Standard_EXPORT gp_Vec2d DN (const Standard_Real U, const Standard_Integer N) const Standard_OVERRIDE;
150   
151   Standard_EXPORT void Dump (const Standard_Integer Deep = 0, const Standard_Integer Offset = 0) const;
152   
153   //! Returns the parameter on the curve1 of the projection
154   //! of the point of parameter U on <me>.
155   Standard_EXPORT Standard_Real LinkBisCurve (const Standard_Real U) const;
156   
157   //! Returns the reciproque of LinkBisCurve.
158   Standard_EXPORT Standard_Real LinkCurveBis (const Standard_Real U) const;
159   
160   //! Returns the parameter on <me> corresponding to <P>.
161   Standard_EXPORT Standard_Real Parameter (const gp_Pnt2d& P) const Standard_OVERRIDE;
162   
163   //! Returns <True> if the bisector is empty.
164   Standard_EXPORT Standard_Boolean IsEmpty() const;
165
166
167
168
169   DEFINE_STANDARD_RTTIEXT(Bisector_BisecPC,Bisector_Curve)
170
171 protected:
172
173
174
175
176 private:
177
178   
179   Standard_EXPORT void Values (const Standard_Real U, const Standard_Integer N, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) const;
180   
181   Standard_EXPORT void Extension (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) const;
182   
183   //! Computes the interval where the bisector is defined.
184   Standard_EXPORT void ComputeIntervals();
185   
186   Standard_EXPORT void CuspFilter();
187   
188   Standard_EXPORT Standard_Real SearchBound (const Standard_Real U1, const Standard_Real U2) const;
189   
190   Standard_EXPORT void Init (const Handle(Geom2d_Curve)& Curve, const gp_Pnt2d& Point, const Standard_Real Sign, const TColStd_SequenceOfReal& StartIntervals, const TColStd_SequenceOfReal& EndIntervals, const Standard_Integer BisInterval, const Standard_Integer CurrentInterval, const Standard_Real ShiftParameter, const Standard_Real DistMax, const Standard_Boolean IsEmpty, const Standard_Boolean IsConvex, const Standard_Boolean ExtensionStart, const Standard_Boolean ExtensionEnd, const gp_Pnt2d& PointStartBis, const gp_Pnt2d& PointEndBis);
191
192   Handle(Geom2d_Curve) curve;
193   gp_Pnt2d point;
194   Standard_Real sign;
195   TColStd_SequenceOfReal startIntervals;
196   TColStd_SequenceOfReal endIntervals;
197   Standard_Integer bisInterval;
198   Standard_Integer currentInterval;
199   Standard_Real shiftParameter;
200   Standard_Real distMax;
201   Standard_Boolean isEmpty;
202   Standard_Boolean isConvex;
203   Standard_Boolean extensionStart;
204   Standard_Boolean extensionEnd;
205   gp_Pnt2d pointStartBis;
206   gp_Pnt2d pointEndBis;
207
208
209 };
210
211
212
213
214
215
216
217 #endif // _Bisector_BisecPC_HeaderFile