00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __RBD_ColliderBFA_h__
00017 #define __RBD_ColliderBFA_h__
00018
00019 #include "RBD_API.h"
00020 #include "RBD_Object.h"
00021
00022 #include <SIM/SIM_ColliderBFA.h>
00023 #include <SIM/SIM_Isect.h>
00024
00025 class RBD_API RBD_ColliderBFA : public SIM_ColliderBFA
00026 {
00027 public:
00028
00029
00030 void intersectRBDObjects(SIM_IsectPriorityQueue &queue,
00031 RBD_Object *obj_a, RBD_Object *obj_b,
00032 bool findany,
00033 bool findearliest,
00034 fpreal timetol,
00035 const SIM_Time &starttime,
00036 const SIM_Time &endtime,
00037 SIM_ImpactApplyType impactapplytype,
00038 int impactflags,
00039 int child_a_id = -1,
00040 int child_b_id = -1) const;
00041 protected:
00042 explicit RBD_ColliderBFA(const SIM_DataFactory *factory);
00043 virtual ~RBD_ColliderBFA();
00044
00045 virtual bool doCheckTangle() const
00046 { return true; }
00047 virtual BV_LeafIterator
00048 *createLeafIt(const SIM_Object &object,
00049 const SIM_Time ×tep,
00050 bool startPosOnly) const;
00051 virtual void convertLeafToPrim(const BV_LeafIterator &leafIt,
00052 int leafId,
00053 int &outPrimId, int &outEdgeId) const;
00054 virtual fpreal getLeafRadius(const BV_LeafIterator &leafIt,
00055 int leafId) const;
00056
00057 private:
00058 static const SIM_DopDescription *getDopDescription();
00059
00060 DECLARE_STANDARD_GETCASTTOTYPE();
00061 DECLARE_DATAFACTORY(RBD_ColliderBFA,
00062 SIM_ColliderBFA,
00063 "ThinPlate/ThinPlate Collider (Bridson)",
00064 getDopDescription());
00065 };
00066
00067 #endif
00068