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 _GOPROJECTCURVE_
00034 #define _GOPROJECTCURVE_
00035
00036 #include <boost/smart_ptr.hpp>
00037
00038 #include "Point.h"
00039 #include "EvalCurve.h"
00040 #include "SplineCurve.h"
00041 #include "SplineSurface.h"
00042
00043 namespace Go
00044
00045 {
00048
00049
00053 class ProjectIntersectionCurve : public EvalCurve
00054 {
00055 public:
00056
00066 ProjectIntersectionCurve(boost::shared_ptr<SplineCurve>& inters_crv,
00067 boost::shared_ptr<SplineCurve>& p_crv,
00068 boost::shared_ptr<SplineCurve>& other_p_crv,
00069 boost::shared_ptr<ParamSurface>& surf,
00070 boost::shared_ptr<ParamSurface>& other_surf,
00071 double offset_dist, double other_offset_dist,
00072 double epsgeo);
00073
00075 virtual ~ProjectIntersectionCurve();
00076
00080 virtual Point eval(double t) const;
00081
00088 virtual void eval(double t, int n, Point der[]) const;
00089
00092 virtual double start() const;
00095 virtual double end() const;
00096
00099 virtual int dim() const;
00100
00107 virtual bool approximationOK(double par, Point approxpos,
00108 double tol1, double tol2) const;
00109
00110 private:
00111 const boost::shared_ptr<SplineCurve> inters_crv_;
00112
00113 const boost::shared_ptr<SplineCurve> p_crv_;
00114 const boost::shared_ptr<SplineCurve> other_p_crv_;
00115 const boost::shared_ptr<ParamSurface> surf_;
00116 const boost::shared_ptr<ParamSurface> other_surf_;
00117 const double offset_dist_;
00118 const double other_offset_dist_;
00119 const double epsgeo_;
00120
00128 std::vector<double>
00129 getSuggestedSurfaceParameter(const SplineCurve& space_cv, double t,
00130 const SplineCurve& param_cv,
00131 bool pcv_turned) const;
00132
00133 };
00134
00136 }
00137
00138 #endif //_GOPROJECTCURVE_
00139