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 _GOPROJECTCURVEANDTAN_
00034 #define _GOPROJECTCURVEANDTAN_
00035
00036 #include <boost/smart_ptr.hpp>
00037
00038 #include "Point.h"
00039 #include "EvalCurveSet.h"
00040 #include "SplineCurve.h"
00041 #include "SplineSurface.h"
00042
00043
00044
00045 namespace Go
00046 {
00049
00050
00056 class ProjectCurveAndCrossTan : public EvalCurveSet
00057 {
00058 public:
00059
00071 ProjectCurveAndCrossTan(const SplineCurve& space_crv,
00072 const SplineCurve& crosstan_crv,
00073 const SplineSurface& surf,
00074 const Point* start_par_pt,
00075 const Point* end_par_pt,
00076 double epsgeo,
00077 const RectDomain* domain_of_interest = NULL);
00078
00080 virtual ~ProjectCurveAndCrossTan();
00081
00085 virtual std::vector<Go::Point> eval(double t);
00086
00092 virtual void eval(double t, int n, std::vector<std::vector<Go::Point> >& ders);
00093
00096 virtual double start();
00097
00100 virtual double end();
00101
00104
00105
00106 virtual int dim();
00107
00115 virtual bool approximationOK(double par, const std::vector<Go::Point>& approxpos,
00116 double tol1, double tol2);
00117
00120 virtual int nmbCvs();
00121
00122 private:
00123 const SplineCurve& space_crv_;
00124 const SplineCurve& crosstan_crv_;
00125 const SplineSurface& surf_;
00126 const Point* start_par_pt_;
00127 const Point* end_par_pt_;
00128 const double epsgeo_;
00129 const Go::RectDomain* domain_of_interest_;
00130
00134 std::vector<double> createSeed(double tpar);
00135
00136 };
00137
00139 }
00140
00141
00142 #endif //_GOPROJECTCURVEANDTAN_
00143