00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef WM4QUERY3_H
00018 #define WM4QUERY3_H
00019
00020 #include "Wm4FoundationLIB.h"
00021 #include "Wm4Query.h"
00022 #include "Wm4Vector3.h"
00023
00024 namespace Wm4
00025 {
00026
00027 template <class Real>
00028 class Query3 : public Query
00029 {
00030 public:
00031
00032 Query3 (int iVQuantity, const Vector3<Real>* akVertex);
00033 virtual ~Query3 ();
00034
00035
00036 virtual Query::Type GetType () const;
00037
00038
00039 int GetQuantity () const;
00040 const Vector3<Real>* GetVertices () const;
00041
00042
00043
00044
00045
00046
00047
00048 virtual int ToPlane (int i, int iV0, int iV1, int iV2) const;
00049 virtual int ToPlane (const Vector3<Real>& rkP, int iV0, int iV1, int iV2)
00050 const;
00051
00052
00053
00054
00055
00056 virtual int ToTetrahedron (int i, int iV0, int iV1, int iV2, int iV3)
00057 const;
00058 virtual int ToTetrahedron (const Vector3<Real>& rkP, int iV0, int iV1,
00059 int iV2, int iV3) const;
00060
00061
00062
00063
00064
00065 virtual int ToCircumsphere (int i, int iV0, int iV1, int iV2, int iV3)
00066 const;
00067 virtual int ToCircumsphere (const Vector3<Real>& rkP, int iV0, int iV1,
00068 int iV2, int iV3) const;
00069
00070 protected:
00071
00072 int m_iVQuantity;
00073 const Vector3<Real>* m_akVertex;
00074
00075 static Real Dot (Real fX0, Real fY0, Real fZ0, Real fX1, Real fY1,
00076 Real fZ1);
00077
00078 static Real Det3 (Real fX0, Real fY0, Real fZ0, Real fX1, Real fY1,
00079 Real fZ1, Real fX2, Real fY2, Real fZ2);
00080
00081 static Real Det4 (Real fX0, Real fY0, Real fZ0, Real fW0, Real fX1,
00082 Real fY1, Real fZ1, Real fW1, Real fX2, Real fY2, Real fZ2, Real fW2,
00083 Real fX3, Real fY3, Real fZ3, Real fW3);
00084 };
00085
00086 }
00087
00088 #include "Wm4Query3.inl"
00089
00090 namespace Wm4
00091 {
00092 typedef Query3<float> Query3f;
00093 typedef Query3<double> Query3d;
00094
00095 }
00096
00097 #endif