LocalMinDistance.h
Go to the documentation of this file.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_LOCALMINDISTANCE_H
00026 #define SOFA_COMPONENT_COLLISION_LOCALMINDISTANCE_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 LocalMinDistance : public DiscreteIntersection
00047 {
00048 public:
00049
00050
00051 Data<double> alarmDistance;
00052 Data<double> contactDistance;
00053
00054 Data<double> angleCone;
00055 Data<double> coneFactor;
00056
00057
00058 LocalMinDistance();
00059
00060 virtual void init();
00061
00063 virtual bool useProximity() const { return true; }
00064
00066 double getAlarmDistance() const { return alarmDistance.getValue(); }
00067
00069 double getContactDistance() const { return contactDistance.getValue(); }
00070
00071 void setAlarmDistance(double v) { alarmDistance.setValue(v); }
00072
00073 void setContactDistance(double v) { contactDistance.setValue(v); }
00074
00075 bool testIntersection(Cube& ,Cube&);
00076
00077 bool testIntersection(Point&, Point&);
00078 bool testIntersection(Sphere&, Point&);
00079 bool testIntersection(Sphere&, Sphere&);
00080 bool testIntersection(Line&, Point&);
00081 bool testIntersection(Line&, Sphere&);
00082 bool testIntersection(Line&, Line&);
00083 bool testIntersection(Triangle&, Point&);
00084 bool testIntersection(Triangle&, Sphere&);
00085 bool testIntersection(Ray&, Sphere&);
00086 bool testIntersection(Ray&, Triangle&);
00087
00088 int computeIntersection(Cube&, Cube&, OutputVector*);
00089 int computeIntersection(Point&, Point&, OutputVector*);
00090 int computeIntersection(Sphere&, Point&, OutputVector*);
00091 int computeIntersection(Sphere&, Sphere&, OutputVector*);
00092 int computeIntersection(Line&, Point&, OutputVector*);
00093 int computeIntersection(Line&, Sphere&, OutputVector*);
00094 int computeIntersection(Line&, Line&, OutputVector*);
00095 int computeIntersection(Triangle&, Point&, OutputVector*);
00096 int computeIntersection(Triangle&, Sphere&, OutputVector*);
00097 int computeIntersection(Ray&, Sphere&, OutputVector*);
00098 int computeIntersection(Ray&, Triangle&, OutputVector*);
00099
00104 bool testValidity(Point&, const Vector3&);
00105 bool testValidity(Line&, const Vector3&);
00106 bool testValidity(Triangle&, const Vector3&);
00107
00108 void draw();
00109
00110 private:
00111 double mainAlarmDistance;
00112 double mainContactDistance;
00113 };
00114
00115 }
00116
00117 }
00118
00119 }
00120
00121 #endif