diff options
author | Michel Selten <michel@mselten.demon.nl> | 2003-12-06 22:02:42 +0300 |
---|---|---|
committer | Michel Selten <michel@mselten.demon.nl> | 2003-12-06 22:02:42 +0300 |
commit | 581c0f232cb083da326657681fdcd4abe1d14c7a (patch) | |
tree | 99009299ecc9e18af84de3d1d20f1dd6c93270c7 /extern/solid/src/DT_Encounter.h | |
parent | bef272a5d241ae3d73ccc124594efc53b484fec1 (diff) |
Added the Solid 3.5 sources to the blender source tree.
This is a direct copy from the CD-ROM contents except for the generated
libraries for the Windows platform. If needed, I can add those later on.
(Those take up over 800 kb).
All files, including license files, documentation, examples and sources are
committed.
Diffstat (limited to 'extern/solid/src/DT_Encounter.h')
-rwxr-xr-x | extern/solid/src/DT_Encounter.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/extern/solid/src/DT_Encounter.h b/extern/solid/src/DT_Encounter.h new file mode 100755 index 00000000000..f20ea3936b0 --- /dev/null +++ b/extern/solid/src/DT_Encounter.h @@ -0,0 +1,84 @@ +/* + * SOLID - Software Library for Interference Detection + * + * Copyright (C) 2001-2003 Dtecta. All rights reserved. + * + * This library may be distributed under the terms of the Q Public License + * (QPL) as defined by Trolltech AS of Norway and appearing in the file + * LICENSE.QPL included in the packaging of this file. + * + * This library may be distributed and/or modified under the terms of the + * GNU General Public License (GPL) version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * This library is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Commercial use or any other use of this library not covered by either + * the QPL or the GPL requires an additional license from Dtecta. + * Please contact info@dtecta.com for enquiries about the terms of commercial + * use of this library. + */ + +#ifndef DT_ENCOUNTER_H +#define DT_ENCOUNTER_H + +#include <set> + +#include "MT_Vector3.h" +#include "DT_Object.h" +#include "DT_Shape.h" + +class DT_RespTable; + +class DT_Encounter { +public: + DT_Encounter() {} + DT_Encounter(DT_Object *obj_ptr1, DT_Object *obj_ptr2) + : m_sep_axis(MT_Scalar(0.0), MT_Scalar(0.0), MT_Scalar(0.0)) + { + assert(obj_ptr1 != obj_ptr2); + if (obj_ptr2->getType() < obj_ptr1->getType() || + (obj_ptr2->getType() == obj_ptr1->getType() && + obj_ptr2 < obj_ptr1)) + { + m_obj_ptr1 = obj_ptr2; + m_obj_ptr2 = obj_ptr1; + } + else + { + m_obj_ptr1 = obj_ptr1; + m_obj_ptr2 = obj_ptr2; + } + } + + DT_Object *first() const { return m_obj_ptr1; } + DT_Object *second() const { return m_obj_ptr2; } + const MT_Vector3& separatingAxis() const { return m_sep_axis; } + + DT_Bool exactTest(const DT_RespTable *respTable, int& count) const; + +private: + DT_Object *m_obj_ptr1; + DT_Object *m_obj_ptr2; + mutable MT_Vector3 m_sep_axis; +}; + +inline bool operator<(const DT_Encounter& a, const DT_Encounter& b) +{ + return a.first() < b.first() || + (a.first() == b.first() && a.second() < b.second()); +} + + + +inline std::ostream& operator<<(std::ostream& os, const DT_Encounter& a) { + return os << '(' << a.first() << ", " << a.second() << ')'; +} + + + +typedef std::set<DT_Encounter> DT_EncounterTable; + +#endif |