File indexing completed on 2026-06-11 08:33:36
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef _IntWalk_PWalking_HeaderFile
0018 #define _IntWalk_PWalking_HeaderFile
0019
0020 #include <Adaptor3d_Surface.hxx>
0021 #include <gp_Dir.hxx>
0022 #include <IntImp_ConstIsoparametric.hxx>
0023 #include <IntSurf_PntOn2S.hxx>
0024 #include <gp_Dir2d.hxx>
0025 #include <IntWalk_TheInt2S.hxx>
0026 #include <TColStd_Array1OfReal.hxx>
0027 #include <IntWalk_StatusDeflection.hxx>
0028
0029 class gp_Pnt;
0030
0031
0032
0033
0034
0035 class IntWalk_PWalking
0036 {
0037 public:
0038 DEFINE_STANDARD_ALLOC
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 Standard_EXPORT IntWalk_PWalking(const Handle(Adaptor3d_Surface)& Caro1,
0056 const Handle(Adaptor3d_Surface)& Caro2,
0057 const Standard_Real TolTangency,
0058 const Standard_Real Epsilon,
0059 const Standard_Real Deflection,
0060 const Standard_Real Increment);
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075 Standard_EXPORT IntWalk_PWalking(const Handle(Adaptor3d_Surface)& Caro1,
0076 const Handle(Adaptor3d_Surface)& Caro2,
0077 const Standard_Real TolTangency,
0078 const Standard_Real Epsilon,
0079 const Standard_Real Deflection,
0080 const Standard_Real Increment,
0081 const Standard_Real U1,
0082 const Standard_Real V1,
0083 const Standard_Real U2,
0084 const Standard_Real V2);
0085
0086
0087 Standard_EXPORT void Perform(const TColStd_Array1OfReal& ParDep);
0088
0089
0090
0091
0092
0093
0094 Standard_EXPORT void Perform(const TColStd_Array1OfReal& ParDep,
0095 const Standard_Real u1min,
0096 const Standard_Real v1min,
0097 const Standard_Real u2min,
0098 const Standard_Real v2min,
0099 const Standard_Real u1max,
0100 const Standard_Real v1max,
0101 const Standard_Real u2max,
0102 const Standard_Real v2max);
0103
0104
0105 Standard_EXPORT Standard_Boolean PerformFirstPoint(const TColStd_Array1OfReal& ParDep,
0106 IntSurf_PntOn2S& FirstPoint);
0107
0108
0109 Standard_Boolean IsDone() const;
0110
0111
0112
0113 Standard_Integer NbPoints() const;
0114
0115
0116
0117
0118 const IntSurf_PntOn2S& Value(const Standard_Integer Index) const;
0119
0120 const Handle(IntSurf_LineOn2S)& Line() const;
0121
0122
0123
0124
0125 Standard_Boolean TangentAtFirst() const;
0126
0127
0128
0129
0130 Standard_Boolean TangentAtLast() const;
0131
0132
0133
0134 Standard_Boolean IsClosed() const;
0135
0136 const gp_Dir& TangentAtLine(Standard_Integer& Index) const;
0137
0138 Standard_EXPORT IntWalk_StatusDeflection TestDeflection(const IntImp_ConstIsoparametric ChoixIso,
0139 const IntWalk_StatusDeflection theStatus);
0140
0141 Standard_EXPORT Standard_Boolean TestArret(const Standard_Boolean DejaReparti,
0142 TColStd_Array1OfReal& Param,
0143 IntImp_ConstIsoparametric& ChoixIso);
0144
0145 Standard_EXPORT void RepartirOuDiviser(Standard_Boolean& DejaReparti,
0146 IntImp_ConstIsoparametric& ChoixIso,
0147 Standard_Boolean& Arrive);
0148
0149
0150 void AddAPoint(const IntSurf_PntOn2S& thePOn2S);
0151
0152
0153
0154
0155
0156 void RemoveAPoint(const Standard_Integer theIndex)
0157 {
0158 const Standard_Integer anIdx = Min(theIndex, line->NbPoints());
0159
0160 if (anIdx < 1)
0161 return;
0162
0163 if (anIdx <= myTangentIdx)
0164 {
0165 myTangentIdx--;
0166
0167 if (myTangentIdx < 1)
0168 myTangentIdx = 1;
0169 }
0170
0171 line->RemovePoint(anIdx);
0172 }
0173
0174 Standard_EXPORT Standard_Boolean PutToBoundary(const Handle(Adaptor3d_Surface)& theASurf1,
0175 const Handle(Adaptor3d_Surface)& theASurf2);
0176
0177 Standard_EXPORT Standard_Boolean SeekAdditionalPoints(const Handle(Adaptor3d_Surface)& theASurf1,
0178 const Handle(Adaptor3d_Surface)& theASurf2,
0179 const Standard_Integer theMinNbPoints);
0180
0181 Standard_Real MaxStep(Standard_Integer theIndex)
0182 {
0183 Standard_OutOfRange_Raise_if((theIndex < 0) || (theIndex > 3),
0184 "IntWalk_PWalking::MaxStep() - index is out of range");
0185 return pasInit[theIndex];
0186 }
0187
0188 protected:
0189 Standard_EXPORT void ComputePasInit(const Standard_Real theDeltaU1,
0190 const Standard_Real theDeltaV1,
0191 const Standard_Real theDeltaU2,
0192 const Standard_Real theDeltaV2);
0193
0194
0195
0196
0197
0198 Standard_EXPORT Standard_Boolean
0199 DistanceMinimizeByGradient(const Handle(Adaptor3d_Surface)& theASurf1,
0200 const Handle(Adaptor3d_Surface)& theASurf2,
0201 TColStd_Array1OfReal& theInit,
0202 const Standard_Real* theStep0 = 0);
0203
0204
0205
0206
0207
0208
0209 Standard_EXPORT Standard_Boolean
0210 DistanceMinimizeByExtrema(const Handle(Adaptor3d_Surface)& theASurf,
0211 const gp_Pnt& theP0,
0212 Standard_Real& theU0,
0213 Standard_Real& theV0,
0214 const Standard_Real* theStep0 = 0);
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227 Standard_EXPORT Standard_Boolean SeekPointOnBoundary(const Handle(Adaptor3d_Surface)& theASurf1,
0228 const Handle(Adaptor3d_Surface)& theASurf2,
0229 const Standard_Real theU1,
0230 const Standard_Real theV1,
0231 const Standard_Real theU2,
0232 const Standard_Real theV2,
0233 const Standard_Boolean isTheFirst);
0234
0235
0236 Standard_EXPORT Standard_Boolean
0237 HandleSingleSingularPoint(const Handle(Adaptor3d_Surface)& theASurf1,
0238 const Handle(Adaptor3d_Surface)& theASurf2,
0239 const Standard_Real the3DTol,
0240 TColStd_Array1OfReal& thePnt);
0241
0242 Standard_EXPORT Standard_Boolean
0243 ExtendLineInCommonZone(const IntImp_ConstIsoparametric theChoixIso,
0244 const Standard_Boolean theDirectionFlag);
0245
0246 private:
0247 Standard_Boolean done;
0248 Handle(IntSurf_LineOn2S) line;
0249 Standard_Boolean close;
0250 Standard_Boolean tgfirst;
0251 Standard_Boolean tglast;
0252
0253
0254
0255 Standard_Integer myTangentIdx;
0256
0257
0258 gp_Dir tgdir;
0259
0260 Standard_Real fleche;
0261 Standard_Real pasMax;
0262 Standard_Real tolconf;
0263 Standard_Real myTolTang;
0264 Standard_Real pasuv[4];
0265 Standard_Real myStepMin[4];
0266 Standard_Real pasSav[4];
0267 Standard_Real pasInit[4];
0268 Standard_Real Um1;
0269 Standard_Real UM1;
0270 Standard_Real Vm1;
0271 Standard_Real VM1;
0272 Standard_Real Um2;
0273 Standard_Real UM2;
0274 Standard_Real Vm2;
0275 Standard_Real VM2;
0276 Standard_Real ResoU1;
0277 Standard_Real ResoU2;
0278 Standard_Real ResoV1;
0279 Standard_Real ResoV2;
0280 Standard_Integer sensCheminement;
0281 IntImp_ConstIsoparametric choixIsoSav;
0282 IntSurf_PntOn2S previousPoint;
0283 Standard_Boolean previoustg;
0284 gp_Dir previousd;
0285 gp_Dir2d previousd1;
0286 gp_Dir2d previousd2;
0287 gp_Dir2d firstd1;
0288 gp_Dir2d firstd2;
0289 IntWalk_TheInt2S myIntersectionOn2S;
0290 Standard_Integer STATIC_BLOCAGE_SUR_PAS_TROP_GRAND;
0291 Standard_Integer STATIC_PRECEDENT_INFLEXION;
0292 };
0293
0294 #include <IntWalk_PWalking.lxx>
0295
0296 #endif