00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef _CLOSESTPTCURVESURF_H
00034 #define _CLOSESTPTCURVESURF_H
00035
00047 #include "ParamCurve.h"
00048 #include "ParamSurface.h"
00049
00050 namespace Go {
00053
00054
00077 void closestPtCurveSurf(ParamCurve* pcurve, ParamSurface* psurf, double aepsge,
00078 double astart1, double aend1, RectDomain *domain,
00079 double anext1, double enext2[],
00080 double& cpos1, double gpos2[],
00081 double& dist, Point& pt_cv, Point& pt_su,
00082 bool second_order=false);
00083
00108 void closestPtCurveSurf(ParamCurve* pcurve, ParamSurface* psurf, double aepsge,
00109 double astart1, double estart2[], double aend1,
00110 double eend2[], double anext1, double enext2[],
00111 double& cpos1, double gpos2[],
00112 double& dist, Point& pt_cv, Point& pt_su, int& istat,
00113 bool second_order=false);
00114
00115
00116
00118 namespace {
00121
00131 void insideParamDomain(Point& gd, const Point& acoef, double astart1,
00132 double aend1, double astart2[],double aend2[],
00133 int& corr);
00134
00148 void nextStep(double& dist,Point& diff,Point& delta,int& kstat,
00149 std::vector<Point>& eval_cv,std::vector<Point>& eval_su,
00150 int order);
00151
00152
00163 int localPretop(double dist,const Point& diff,const Point& normal,
00164 const std::vector<Point>& eval_cv,
00165 const std::vector<Point>& eval_su);
00166
00167
00185 void singular(ParamCurve* pcurve,ParamSurface* psurf,Point& par_val,
00186 double& dist, double aepsge,double delta,const Point& diff,
00187 const Point& norm_vec,
00188 const std::vector<Point>&eval_cv,
00189 const std::vector<Point>&eval_su,
00190 double astart1,double estart2[],double aend1,double eend2[]);
00191
00192
00206 void secant(ParamCurve *pcurve,ParamSurface *psurf,Point& par_val,
00207 double& dist,int& jstat, double delta,double aepsge,
00208 double astart1,double estart2[],double aend1,double eend2[]);
00209
00210
00223 void setReturnValues(const Point& par_val,ParamCurve* pcurve,
00224 ParamSurface* psurf,double aepsge,
00225 int& jstat,double& par_cv,double par_su[],
00226 double& dist,Point& pt_cv,Point& pt_su);
00227
00228
00246 void newPointEval(ParamCurve *pcurve,double par_cv,ParamSurface *psurf,
00247 double estart2[],double eend2[],double aepsge,
00248 Point& par_su,double& y,double& dist,int& jstat);
00249
00250
00252 }
00255
00256
00258 }
00259
00260 #endif // _CLOSESTPTCURVESURF_H
00261