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 #ifndef SOFA_COMPONENT_COLLISION_NEWPROXIMITYINTERSECTION_H
00026 #define SOFA_COMPONENT_COLLISION_NEWPROXIMITYINTERSECTION_H
00027
00028 #include <sofa/component/collision/DiscreteIntersection.h>
00029 #include <sofa/helper/FnDispatcher.h>
00030 #include <sofa/component/collision/SphereModel.h>
00031 #include <sofa/component/collision/TriangleModel.h>
00032 #include <sofa/component/collision/LineModel.h>
00033 #include <sofa/component/collision/PointModel.h>
00034 #include <sofa/component/collision/CubeModel.h>
00035 #include <sofa/component/collision/RayModel.h>
00036
00037 namespace sofa
00038 {
00039
00040 namespace component
00041 {
00042
00043 namespace collision
00044 {
00045
00046 class NewProximityIntersection : public DiscreteIntersection
00047 {
00048 public:
00049 Data<double> alarmDistance;
00050 Data<double> contactDistance;
00051
00052 NewProximityIntersection();
00053
00054 virtual void init();
00055
00057 virtual bool useProximity() const { return true; }
00058
00060 double getAlarmDistance() const { return alarmDistance.getValue(); }
00061
00063 double getContactDistance() const { return contactDistance.getValue(); }
00064
00065 void setAlarmDistance(double v) { alarmDistance.setValue(v); }
00066
00067 void setContactDistance(double v) { contactDistance.setValue(v); }
00068
00069 bool testIntersection(Cube& ,Cube&);
00070 bool testIntersection(Point&, Point&);
00071 template<class Sphere>
00072 bool testIntersection(Sphere&, Point&);
00073 template<class Sphere>
00074 bool testIntersection(Sphere&, Sphere&);
00075 bool testIntersection(Line&, Point&);
00076 template<class Sphere>
00077 bool testIntersection(Line&, Sphere&);
00078 bool testIntersection(Line&, Line&);
00079 bool testIntersection(Triangle&, Point&);
00080 template<class Sphere>
00081 bool testIntersection(Triangle&, Sphere&);
00082 bool testIntersection(Triangle&, Line&);
00083 bool testIntersection(Triangle&, Triangle&);
00084 bool testIntersection(Ray&, Triangle&);
00085
00086 int computeIntersection(Cube&, Cube&, OutputVector*);
00087 int computeIntersection(Point&, Point&, OutputVector*);
00088 template<class Sphere>
00089 int computeIntersection(Sphere&, Point&, OutputVector*);
00090 template<class Sphere>
00091 int computeIntersection(Sphere&, Sphere&, OutputVector*);
00092 int computeIntersection(Line&, Point&, OutputVector*);
00093 template<class Sphere>
00094 int computeIntersection(Line&, Sphere&, OutputVector*);
00095 int computeIntersection(Line&, Line&, OutputVector*);
00096 int computeIntersection(Triangle&, Point&, OutputVector*);
00097 template<class Sphere>
00098 int computeIntersection(Triangle&, Sphere&, OutputVector*);
00099 int computeIntersection(Triangle&, Line&, OutputVector*);
00100 int computeIntersection(Triangle&, Triangle&, OutputVector*);
00101 int computeIntersection(Ray&, Triangle&, OutputVector*);
00102
00103 static inline int doIntersectionLineLine(double dist2, const Vector3& p1, const Vector3& p2, const Vector3& q1, const Vector3& q2, OutputVector* contacts, int id);
00104
00105 static inline int doIntersectionLinePoint(double dist2, const Vector3& p1, const Vector3& p2, const Vector3& q, OutputVector* contacts, int id, bool swapElems = false);
00106
00107 static inline int doIntersectionPointPoint(double dist2, const Vector3& p, const Vector3& q, OutputVector* contacts, int id);
00108
00109 static inline int doIntersectionTrianglePoint(double dist2, int flags, const Vector3& p1, const Vector3& p2, const Vector3& p3, const Vector3& n, const Vector3& q, OutputVector* contacts, int id, bool swapElems = false);
00110
00111 protected:
00112 };
00113
00114 }
00115
00116 }
00117
00118 }
00119
00120 #endif