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