ProjectIntersectionCurve.h

00001 //===========================================================================
00002 // GoTools - SINTEF Geometry Tools version 1.1
00003 //
00004 // GoTools module: CORE
00005 //
00006 // Copyright (C) 2000-2007 SINTEF ICT, Applied Mathematics, Norway.
00007 //
00008 // This program is free software; you can redistribute it and/or          
00009 // modify it under the terms of the GNU General Public License            
00010 // as published by the Free Software Foundation version 2 of the License. 
00011 //
00012 // This program is distributed in the hope that it will be useful,        
00013 // but WITHOUT ANY WARRANTY; without even the implied warranty of         
00014 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          
00015 // GNU General Public License for more details.                           
00016 //
00017 // You should have received a copy of the GNU General Public License      
00018 // along with this program; if not, write to the Free Software            
00019 // Foundation, Inc.,                                                      
00020 // 59 Temple Place - Suite 330,                                           
00021 // Boston, MA  02111-1307, USA.                                           
00022 //
00023 // Contact information: E-mail: tor.dokken@sintef.no                      
00024 // SINTEF ICT, Department of Applied Mathematics,                         
00025 // P.O. Box 124 Blindern,                                                 
00026 // 0314 Oslo, Norway.                                                     
00027 //
00028 // Other licenses are also available for this software, notably licenses
00029 // for:
00030 // - Building commercial software.                                        
00031 // - Building software whose source code you wish to keep private.        
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     //Param curves serve as seed generators for closest point evaluations.
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_; // In direction normal to surf_.
00118     const double other_offset_dist_; // In direction normal to other_surf_.
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 } // namespace Go
00137 
00138 #endif //_GOPROJECTCURVE_
00139 

Generated on Mon Jun 11 14:48:18 2007 for GoTools Core Library by  doxygen 1.5.1