Reverted incorrect merge (missing files)
[blender.git] / extern / solid / src / DT_Encounter.h
1 /*
2  * SOLID - Software Library for Interference Detection
3  * 
4  * Copyright (C) 2001-2003  Dtecta.  All rights reserved.
5  *
6  * This library may be distributed under the terms of the Q Public License
7  * (QPL) as defined by Trolltech AS of Norway and appearing in the file
8  * LICENSE.QPL included in the packaging of this file.
9  *
10  * This library may be distributed and/or modified under the terms of the
11  * GNU General Public License (GPL) version 2 as published by the Free Software
12  * Foundation and appearing in the file LICENSE.GPL included in the
13  * packaging of this file.
14  *
15  * This library is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17  *
18  * Commercial use or any other use of this library not covered by either 
19  * the QPL or the GPL requires an additional license from Dtecta. 
20  * Please contact info@dtecta.com for enquiries about the terms of commercial
21  * use of this library.
22  */
23
24 #ifndef DT_ENCOUNTER_H
25 #define DT_ENCOUNTER_H
26
27 #include <set>
28
29 #include "MT_Vector3.h"
30 #include "DT_Object.h"
31 #include "DT_Shape.h"
32
33 class DT_RespTable;
34
35 class DT_Encounter {
36 public:
37     DT_Encounter() {}
38     DT_Encounter(DT_Object *obj_ptr1, DT_Object *obj_ptr2) 
39         : m_sep_axis(MT_Scalar(0.0), MT_Scalar(0.0), MT_Scalar(0.0)) 
40     {
41                 assert(obj_ptr1 != obj_ptr2);
42         if (obj_ptr2->getType() < obj_ptr1->getType() || 
43             (obj_ptr2->getType() == obj_ptr1->getType() &&
44              obj_ptr2 < obj_ptr1))
45         { 
46             m_obj_ptr1 = obj_ptr2; 
47             m_obj_ptr2 = obj_ptr1; 
48         }
49         else 
50         { 
51             m_obj_ptr1 = obj_ptr1; 
52             m_obj_ptr2 = obj_ptr2; 
53         }
54     }
55
56     DT_Object         *first()          const { return m_obj_ptr1; }
57     DT_Object         *second()         const { return m_obj_ptr2; }
58     const MT_Vector3&  separatingAxis() const { return m_sep_axis; }
59
60         DT_Bool exactTest(const DT_RespTable *respTable, int& count) const;
61
62 private:
63     DT_Object          *m_obj_ptr1;
64     DT_Object          *m_obj_ptr2;
65     mutable MT_Vector3  m_sep_axis;
66 };
67
68 inline bool operator<(const DT_Encounter& a, const DT_Encounter& b) 
69
70     return a.first() < b.first() || 
71         (a.first() == b.first() && a.second() < b.second()); 
72 }
73
74
75
76 inline std::ostream& operator<<(std::ostream& os, const DT_Encounter& a) {
77     return os << '(' << a.first() << ", " << a.second() << ')';
78 }
79
80
81
82 typedef std::set<DT_Encounter> DT_EncounterTable;
83
84 #endif