IntersectorFuncConst.h

00001 //===========================================================================
00002 // GoTools - SINTEF Geometry Tools
00003 //
00004 // GoTools module: Intersections, version 1.0
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 _INTERSECTORFUNCOBJ_H
00034 #define _INTERSECTORFUNCOBJ_H
00035 
00036 
00037 #include "Intersector.h"
00038 
00039 
00040 namespace Go {
00043 
00044 
00045 
00046 class ParamFunctionInt;
00047 
00048 
00051 
00052 class IntersectorFuncConst : public Intersector {
00053 public:
00054 
00067     IntersectorFuncConst(boost::shared_ptr<ParamFunctionInt> func,
00068                          boost::shared_ptr<ParamFunctionInt> C,
00069                          boost::shared_ptr<GeoTol> epsge,
00070                          Intersector* prev = 0,
00071                          int eliminated_parameter = -1,
00072                          double eliminated_value = 0);
00073 
00075     virtual ~IntersectorFuncConst();
00076 
00077 //     // Validation of given intersection results
00078 //     virtual void validate(int level, ValidationStat status);  @bsp
00079 
00080     friend class IntersectorAlgPar;
00081 
00082 protected:
00083 
00084     boost::shared_ptr<ParamFunctionInt> func_int_;
00085     boost::shared_ptr<ParamFunctionInt> C_;
00086 
00087     // @@sbr Currently we need intersection between a
00088     // Param1FunctionInt & ParamPointInt.  Possibly introduce
00089     // additional object (replacing ParamPointInt) in this branch of
00090     // the tree.  NB: The order of the objects ot input is not
00091     // arbitrary!  The knowledge of what is the 'first object' and the
00092     // 'second object' can be used internally, and must be consistent
00093     // with the parent Intersector.  The second object could be a
00094     // ParamPointInt or Param1FunctionInt.
00095     virtual void print_objs();
00096 
00097     virtual boost::shared_ptr<Intersector>
00098     lowerOrderIntersector(boost::shared_ptr<ParamFunctionInt> obj1,
00099                           boost::shared_ptr<ParamFunctionInt> obj2,
00100                           Intersector* prev = 0,
00101                           int eliminated_parameter = -1,
00102                           double eliminated_value = 0) = 0;
00103 
00104     virtual int getBoundaryIntersections();
00105 
00106     virtual int performInterception();
00107 
00108     virtual int simpleCase();
00109 
00110     virtual bool isLinear();
00111 
00112     virtual bool complexityReduced()
00113     {
00114         // Default behaviour, continue recursion
00115         return true;
00116     }
00117 
00118     virtual void handleComplexity()
00119     {
00120         // Default, do nothing. Must be implemented together with
00121         // complexityReduced
00122     }
00123 
00124     virtual int checkCoincidence() = 0;
00125 
00126     virtual void microCase() = 0;
00127     
00128     virtual int updateIntersections() = 0;
00129 
00130     virtual int linearCase();
00131 
00132     virtual int doSubdivide() = 0;
00133 
00134     virtual void printDebugInfo();
00135 
00136 private:
00137 
00138 };
00139 
00140 
00142 } // namespace Go
00143 
00144 
00145 #endif // _INTERSECTORFUNCOBJ_H
00146 
00147 

Generated on Fri Nov 23 12:24:33 2007 for GoTools Intersections Library by  doxygen 1.5.1