0022048: Visualization, AIS_InteractiveContext - single object selection should alway...
[occt.git] / src / Bisector / Bisector_BisecCC.hxx
CommitLineData
42cf5bc1 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_BisecCC_HeaderFile
18#define _Bisector_BisecCC_HeaderFile
19
20#include <Standard.hxx>
21#include <Standard_Type.hxx>
22
23#include <Standard_Real.hxx>
24#include <TColStd_SequenceOfReal.hxx>
25#include <Standard_Integer.hxx>
26#include <Bisector_PolyBis.hxx>
27#include <Standard_Boolean.hxx>
28#include <gp_Pnt2d.hxx>
29#include <Bisector_Curve.hxx>
30#include <GeomAbs_Shape.hxx>
31class Geom2d_Curve;
32class Standard_DomainError;
33class Standard_RangeError;
34class gp_Pnt2d;
35class Geom2d_Geometry;
36class gp_Trsf2d;
37class gp_Vec2d;
38class Bisector_PolyBis;
39
40
41class Bisector_BisecCC;
42DEFINE_STANDARD_HANDLE(Bisector_BisecCC, Bisector_Curve)
43
44//! Construct the bisector between two curves.
45//! The curves can intersect only in their extremities.
46class Bisector_BisecCC : public Bisector_Curve
47{
48
49public:
50
51
52 Standard_EXPORT Bisector_BisecCC();
53
54 //! Constructs the bisector between the curves <Cu1>
55 //! and <Cu2>.
56 //!
57 //! <Side1> (resp <Side2>) = 1 if the
58 //! bisector curve is on the left of <Cu1> (resp <Cu2>)
59 //! else <Side1> (resp <Side2>) = -1.
60 //!
61 //! the Bisector is trimmed by the Point <Origin>.
62 //! <DistMax> is used to trim the bisector.The distance
63 //! between the points of the bisector and <Cu> is smaller
64 //! than <DistMax>.
65 Standard_EXPORT Bisector_BisecCC(const Handle(Geom2d_Curve)& Cu1, const Handle(Geom2d_Curve)& Cu2, const Standard_Real Side1, const Standard_Real Side2, const gp_Pnt2d& Origin, const Standard_Real DistMax = 500);
66
67 //! Computes the bisector between the curves <Cu1>
68 //! and <Cu2>.
69 //!
70 //! <Side1> (resp <Side2>) = 1 if the
71 //! bisector curve is on the left of <Cu1> (resp <Cu2>)
72 //! else <Side1> (resp <Side2>) = -1.
73 //!
74 //! the Bisector is trimmed by the Point <Origin>.
75 //!
76 //! <DistMax> is used to trim the bisector.The distance
77 //! between the points of the bisector and <Cu> is smaller
78 //! than <DistMax>.
79 Standard_EXPORT void Perform (const Handle(Geom2d_Curve)& Cu1, const Handle(Geom2d_Curve)& Cu2, const Standard_Real Side1, const Standard_Real Side2, const gp_Pnt2d& Origin, const Standard_Real DistMax = 500);
80
79104795 81 Standard_EXPORT Standard_Boolean IsExtendAtStart() const Standard_OVERRIDE;
42cf5bc1 82
79104795 83 Standard_EXPORT Standard_Boolean IsExtendAtEnd() const Standard_OVERRIDE;
42cf5bc1 84
79104795 85 Standard_EXPORT void Reverse() Standard_OVERRIDE;
42cf5bc1 86
79104795 87 Standard_EXPORT Standard_Real ReversedParameter (const Standard_Real U) const Standard_OVERRIDE;
42cf5bc1 88
89 //! Returns the order of continuity of the curve.
90 //! Raised if N < 0.
79104795 91 Standard_EXPORT Standard_Boolean IsCN (const Standard_Integer N) const Standard_OVERRIDE;
42cf5bc1 92
93 //! The parameter on <me> is linked to the parameter
94 //! on the first curve. This method creates the same bisector
95 //! where the curves are inversed.
96 Standard_EXPORT Handle(Bisector_BisecCC) ChangeGuide() const;
97
79104795 98 Standard_EXPORT Handle(Geom2d_Geometry) Copy() const Standard_OVERRIDE;
42cf5bc1 99
100
101 //! Transformation of a geometric object. This tansformation
102 //! can be a translation, a rotation, a symmetry, a scaling
103 //! or a complex transformation obtained by combination of
104 //! the previous elementaries transformations.
79104795 105 Standard_EXPORT void Transform (const gp_Trsf2d& T) Standard_OVERRIDE;
42cf5bc1 106
79104795 107 Standard_EXPORT Standard_Real FirstParameter() const Standard_OVERRIDE;
42cf5bc1 108
79104795 109 Standard_EXPORT Standard_Real LastParameter() const Standard_OVERRIDE;
42cf5bc1 110
79104795 111 Standard_EXPORT GeomAbs_Shape Continuity() const Standard_OVERRIDE;
42cf5bc1 112
113 //! If necessary, breaks the curve in intervals of
114 //! continuity <C1>. And returns the number of
115 //! intervals.
79104795 116 Standard_EXPORT Standard_Integer NbIntervals() const Standard_OVERRIDE;
42cf5bc1 117
118 //! Returns the first parameter of the current
119 //! interval.
79104795 120 Standard_EXPORT Standard_Real IntervalFirst (const Standard_Integer Index) const Standard_OVERRIDE;
42cf5bc1 121
122 //! Returns the last parameter of the current
123 //! interval.
79104795 124 Standard_EXPORT Standard_Real IntervalLast (const Standard_Integer Index) const Standard_OVERRIDE;
42cf5bc1 125
126 Standard_EXPORT GeomAbs_Shape IntervalContinuity() const;
127
79104795 128 Standard_EXPORT Standard_Boolean IsClosed() const Standard_OVERRIDE;
42cf5bc1 129
79104795 130 Standard_EXPORT Standard_Boolean IsPeriodic() const Standard_OVERRIDE;
42cf5bc1 131
132 //! Returns the point of parameter U.
133 //! Computes the distance between the current point and
134 //! the two curves I separate.
135 //! Computes the parameters on each curve corresponding
136 //! of the projection of the current point.
137 Standard_EXPORT gp_Pnt2d ValueAndDist (const Standard_Real U, Standard_Real& U1, Standard_Real& U2, Standard_Real& Distance) const;
138
139 //! Returns the point of parameter U.
140 //! Computes the distance between the current point and
141 //! the two curves I separate.
142 //! Computes the parameters on each curve corresponding
143 //! of the projection of the current point.
144 Standard_EXPORT gp_Pnt2d ValueByInt (const Standard_Real U, Standard_Real& U1, Standard_Real& U2, Standard_Real& Distance) const;
145
79104795 146 Standard_EXPORT void D0 (const Standard_Real U, gp_Pnt2d& P) const Standard_OVERRIDE;
42cf5bc1 147
79104795 148 Standard_EXPORT void D1 (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V) const Standard_OVERRIDE;
42cf5bc1 149
79104795 150 Standard_EXPORT void D2 (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) const Standard_OVERRIDE;
42cf5bc1 151
79104795 152 Standard_EXPORT void D3 (const Standard_Real U, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) const Standard_OVERRIDE;
42cf5bc1 153
79104795 154 Standard_EXPORT gp_Vec2d DN (const Standard_Real U, const Standard_Integer N) const Standard_OVERRIDE;
42cf5bc1 155
156 Standard_EXPORT Standard_Boolean IsEmpty() const;
157
158 //! Returns the parameter on the curve1 of the projection
159 //! of the point of parameter U on <me>.
160 Standard_EXPORT Standard_Real LinkBisCurve (const Standard_Real U) const;
161
162 //! Returns the reciproque of LinkBisCurve.
163 Standard_EXPORT Standard_Real LinkCurveBis (const Standard_Real U) const;
164
79104795 165 Standard_EXPORT Standard_Real Parameter (const gp_Pnt2d& P) const Standard_OVERRIDE;
42cf5bc1 166
167 Standard_EXPORT Handle(Geom2d_Curve) Curve (const Standard_Integer IndCurve) const;
168
169 Standard_EXPORT const Bisector_PolyBis& Polygon() const;
170
171 Standard_EXPORT void Dump (const Standard_Integer Deep = 0, const Standard_Integer Offset = 0) const;
172
173
174
175
92efcf78 176 DEFINE_STANDARD_RTTIEXT(Bisector_BisecCC,Bisector_Curve)
42cf5bc1 177
178protected:
179
180
181
182
183private:
184
185
186 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;
187
188 Standard_EXPORT void SupLastParameter();
189
190 Standard_EXPORT gp_Pnt2d Extension (const Standard_Real U, Standard_Real& U1, Standard_Real& U2, Standard_Real& Dist, gp_Vec2d& T1) const;
191
192 Standard_EXPORT Standard_Real SearchBound (const Standard_Real U1, const Standard_Real U2) const;
193
194 Standard_EXPORT void ComputePointEnd();
195
196 Standard_EXPORT void Curve (const Standard_Integer Index, const Handle(Geom2d_Curve)& C);
197
198 Standard_EXPORT void Sign (const Standard_Integer Index, const Standard_Real Sign);
199
200 Standard_EXPORT void Polygon (const Bisector_PolyBis& Poly);
201
202 Standard_EXPORT void DistMax (const Standard_Real DistMax);
203
204 Standard_EXPORT void IsConvex (const Standard_Integer Index, const Standard_Boolean IsConvex);
205
206 Standard_EXPORT void IsEmpty (const Standard_Boolean IsEmpty);
207
208 Standard_EXPORT void ExtensionStart (const Standard_Boolean ExtensionStart);
209
210 Standard_EXPORT void ExtensionEnd (const Standard_Boolean ExtensionEnd);
211
212 Standard_EXPORT void PointStart (const gp_Pnt2d& Point);
213
214 Standard_EXPORT void PointEnd (const gp_Pnt2d& Point);
215
216 Standard_EXPORT void StartIntervals (const TColStd_SequenceOfReal& StartIntervals);
217
218 Standard_EXPORT void EndIntervals (const TColStd_SequenceOfReal& EndIntervals);
219
220 Standard_EXPORT void FirstParameter (const Standard_Real U1);
221
222 Standard_EXPORT void LastParameter (const Standard_Real U1);
223
224 Handle(Geom2d_Curve) curve1;
225 Handle(Geom2d_Curve) curve2;
226 Standard_Real sign1;
227 Standard_Real sign2;
228 TColStd_SequenceOfReal startIntervals;
229 TColStd_SequenceOfReal endIntervals;
230 Standard_Integer currentInterval;
231 Bisector_PolyBis myPolygon;
232 Standard_Real shiftParameter;
233 Standard_Real distMax;
234 Standard_Boolean isEmpty;
235 Standard_Boolean isConvex1;
236 Standard_Boolean isConvex2;
237 Standard_Boolean extensionStart;
238 Standard_Boolean extensionEnd;
239 gp_Pnt2d pointStart;
240 gp_Pnt2d pointEnd;
241
242
243};
244
245
246
247
248
249
250
251#endif // _Bisector_BisecCC_HeaderFile