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 _SFPTINTERSECTOR_H
00034 #define _SFPTINTERSECTOR_H
00035
00036
00037 #include "Intersector2Obj.h"
00038
00039
00040 namespace Go {
00043
00044
00045
00048
00049 class SfPtIntersector : public Intersector2Obj {
00050 public:
00051
00068 SfPtIntersector(boost::shared_ptr<ParamGeomInt> obj1,
00069 boost::shared_ptr<ParamGeomInt> obj2,
00070 boost::shared_ptr<GeoTol> epsge,
00071 Intersector *prev = 0,
00072 int eliminated_parameter = -1,
00073 double eliminated_value = 0);
00074
00076 virtual ~SfPtIntersector();
00077
00078
00079
00080
00083 virtual int numParams() const
00084 { return 2; }
00085
00086 protected:
00087
00088
00089 virtual boost::shared_ptr<Intersector>
00090 lowerOrderIntersector(boost::shared_ptr<ParamGeomInt> obj1,
00091 boost::shared_ptr<ParamGeomInt> obj2,
00092 Intersector* prev = 0,
00093 int eliminated_parameter = -1,
00094 double eliminated_value = 0);
00095
00096 virtual int checkCoincidence();
00097
00098 virtual void microCase();
00099
00100 virtual int updateIntersections();
00101
00102 virtual int repairIntersections()
00103 { return 0; }
00104
00105 virtual int linearCase();
00106
00107 virtual int doSubdivide();
00108
00109 virtual int performRotatedBoxTest(double eps1, double eps2);
00110
00111 private:
00112
00113 int sf_idx_, pt_idx_;
00114
00115
00116 void doIterate(double clo_par[2], double& clo_dist, double *guess = 0);
00117
00118 int sortParameterDirections(int perm[]);
00119
00120 SubdivisionClassification getSubdivisionParameter(int dir, double& par);
00121
00122 };
00123
00124
00126 }
00127
00128
00129 #endif // _SFPTINTERSECTOR_H
00130