File indexing completed on 2026-07-26 09:16:15
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef _Extrema_ExtCC_HeaderFile
0018 #define _Extrema_ExtCC_HeaderFile
0019
0020 #include <Standard.hxx>
0021 #include <Standard_DefineAlloc.hxx>
0022
0023 #include <Extrema_ECC.hxx>
0024 #include <Extrema_SequenceOfPOnCurv.hxx>
0025 #include <TColStd_SequenceOfReal.hxx>
0026 #include <gp_Pnt.hxx>
0027
0028 class Adaptor3d_Curve;
0029 class Extrema_POnCurv;
0030 class Extrema_ExtElC;
0031
0032
0033
0034 class Extrema_ExtCC
0035 {
0036 public:
0037 DEFINE_STANDARD_ALLOC
0038
0039 Standard_EXPORT Extrema_ExtCC(const Standard_Real TolC1 = 1.0e-10,
0040 const Standard_Real TolC2 = 1.0e-10);
0041
0042
0043 Standard_EXPORT Extrema_ExtCC(const Adaptor3d_Curve& C1,
0044 const Adaptor3d_Curve& C2,
0045 const Standard_Real TolC1 = 1.0e-10,
0046 const Standard_Real TolC2 = 1.0e-10);
0047
0048
0049 Standard_EXPORT Extrema_ExtCC(const Adaptor3d_Curve& C1,
0050 const Adaptor3d_Curve& C2,
0051 const Standard_Real U1,
0052 const Standard_Real U2,
0053 const Standard_Real V1,
0054 const Standard_Real V2,
0055 const Standard_Real TolC1 = 1.0e-10,
0056 const Standard_Real TolC2 = 1.0e-10);
0057
0058
0059 Standard_EXPORT void Initialize(const Adaptor3d_Curve& C1,
0060 const Adaptor3d_Curve& C2,
0061 const Standard_Real TolC1 = 1.0e-10,
0062 const Standard_Real TolC2 = 1.0e-10);
0063
0064
0065 Standard_EXPORT void Initialize(const Adaptor3d_Curve& C1,
0066 const Adaptor3d_Curve& C2,
0067 const Standard_Real U1,
0068 const Standard_Real U2,
0069 const Standard_Real V1,
0070 const Standard_Real V2,
0071 const Standard_Real TolC1 = 1.0e-10,
0072 const Standard_Real TolC2 = 1.0e-10);
0073
0074 Standard_EXPORT void SetCurve(const Standard_Integer theRank, const Adaptor3d_Curve& C);
0075
0076 Standard_EXPORT void SetCurve(const Standard_Integer theRank,
0077 const Adaptor3d_Curve& C,
0078 const Standard_Real Uinf,
0079 const Standard_Real Usup);
0080
0081 Standard_EXPORT void SetRange(const Standard_Integer theRank,
0082 const Standard_Real Uinf,
0083 const Standard_Real Usup);
0084
0085 Standard_EXPORT void SetTolerance(const Standard_Integer theRank, const Standard_Real Tol);
0086
0087 Standard_EXPORT void Perform();
0088
0089
0090 Standard_EXPORT Standard_Boolean IsDone() const;
0091
0092
0093 Standard_EXPORT Standard_Integer NbExt() const;
0094
0095
0096 Standard_EXPORT Standard_Boolean IsParallel() const;
0097
0098
0099 Standard_EXPORT Standard_Real SquareDistance(const Standard_Integer N = 1) const;
0100
0101
0102
0103 Standard_EXPORT void Points(const Standard_Integer N,
0104 Extrema_POnCurv& P1,
0105 Extrema_POnCurv& P2) const;
0106
0107
0108
0109
0110
0111 Standard_EXPORT void TrimmedSquareDistances(Standard_Real& dist11,
0112 Standard_Real& distP12,
0113 Standard_Real& distP21,
0114 Standard_Real& distP22,
0115 gp_Pnt& P11,
0116 gp_Pnt& P12,
0117 gp_Pnt& P21,
0118 gp_Pnt& P22) const;
0119
0120
0121 Standard_EXPORT void SetSingleSolutionFlag(const Standard_Boolean theSingleSolutionFlag);
0122
0123
0124 Standard_EXPORT Standard_Boolean GetSingleSolutionFlag() const;
0125
0126 protected:
0127
0128 Standard_EXPORT void PrepareResults(const Extrema_ExtElC& AlgExt,
0129 const Standard_Boolean theIsInverse,
0130 const Standard_Real Ut11,
0131 const Standard_Real Ut12,
0132 const Standard_Real Ut21,
0133 const Standard_Real Ut22);
0134
0135
0136 Standard_EXPORT void PrepareResults(const Extrema_ECC& AlgExt,
0137 const Standard_Real Ut11,
0138 const Standard_Real Ut12,
0139 const Standard_Real Ut21,
0140 const Standard_Real Ut22);
0141
0142
0143 Standard_EXPORT void PrepareParallelResult(const Standard_Real theUt11,
0144 const Standard_Real theUt12,
0145 const Standard_Real theUt21,
0146 const Standard_Real theUt22,
0147 const Standard_Real theSqDist);
0148
0149
0150
0151 void ClearSolutions()
0152 {
0153 mySqDist.Clear();
0154 mypoints.Clear();
0155 }
0156
0157 private:
0158
0159 Extrema_ExtCC(Extrema_ExtCC&) Standard_DELETE;
0160 Extrema_ExtCC& operator=(Extrema_ExtCC&) Standard_DELETE;
0161
0162 private:
0163 Standard_Boolean myIsFindSingleSolution;
0164 Extrema_ECC myECC;
0165 Standard_Boolean myDone;
0166 Standard_Boolean myIsParallel;
0167 Extrema_SequenceOfPOnCurv mypoints;
0168 TColStd_SequenceOfReal mySqDist;
0169 const Adaptor3d_Curve* myC[2];
0170 Standard_Real myInf[2];
0171 Standard_Real mySup[2];
0172 Standard_Real myTol[2];
0173 gp_Pnt myP1f;
0174 gp_Pnt myP1l;
0175 gp_Pnt myP2f;
0176 gp_Pnt myP2l;
0177 Standard_Real mydist11;
0178 Standard_Real mydist12;
0179 Standard_Real mydist21;
0180 Standard_Real mydist22;
0181 };
0182
0183 #endif