Cosmetic: Premake script fixed to avoid adding outest.cpp to the project being generated
[ode.git] / OPCODE / OPC_BaseModel.cpp
blob9520d9ef3f63dca76847d344819639f3414fd518
1 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2 /*
3 * OPCODE - Optimized Collision Detection
4 * Copyright (C) 2001 Pierre Terdiman
5 * Homepage: http://www.codercorner.com/Opcode.htm
6 */
7 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10 /**
11 * Contains base model interface.
12 * \file OPC_BaseModel.cpp
13 * \author Pierre Terdiman
14 * \date May, 18, 2003
16 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
18 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
19 /**
20 * The base class for collision models.
22 * \class BaseModel
23 * \author Pierre Terdiman
24 * \version 1.3
25 * \date May, 18, 2003
27 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
29 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
30 // Precompiled Header
31 #include "Stdafx.h"
33 using namespace Opcode;
35 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
36 /**
37 * Constructor.
39 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
40 OPCODECREATE::OPCODECREATE()
42 mIMesh = null;
43 mSettings.mRules = SPLIT_SPLATTER_POINTS | SPLIT_GEOM_CENTER;
44 mSettings.mLimit = 1; // Mandatory for complete trees
45 mNoLeaf = true;
46 mQuantized = true;
47 #ifdef __MESHMERIZER_H__
48 mCollisionHull = false;
49 #endif // __MESHMERIZER_H__
50 mKeepOriginal = false;
51 mCanRemap = false;
54 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
55 /**
56 * Constructor.
58 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
59 BaseModel::BaseModel() : mIMesh(null), mModelCode(0), mSource(null), mTree(null)
63 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
64 /**
65 * Destructor.
67 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
68 BaseModel::~BaseModel()
70 ReleaseBase();
73 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
74 /**
75 * Releases everything.
77 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
78 void BaseModel::ReleaseBase()
80 DELETESINGLE(mSource);
81 DELETESINGLE(mTree);
84 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
85 /**
86 * Creates an optimized tree according to user-settings, and setups mModelCode.
87 * \param no_leaf [in] true for "no leaf" tree
88 * \param quantized [in] true for quantized tree
89 * \return true if success
91 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
92 bool BaseModel::CreateTree(bool no_leaf, bool quantized)
94 DELETESINGLE(mTree);
96 // Setup model code
97 if(no_leaf) mModelCode |= OPC_NO_LEAF;
98 else mModelCode &= ~OPC_NO_LEAF;
100 if(quantized) mModelCode |= OPC_QUANTIZED;
101 else mModelCode &= ~OPC_QUANTIZED;
103 // Create the correct class
104 if(mModelCode & OPC_NO_LEAF)
106 if(mModelCode & OPC_QUANTIZED) mTree = new AABBQuantizedNoLeafTree;
107 else mTree = new AABBNoLeafTree;
109 else
111 if(mModelCode & OPC_QUANTIZED) mTree = new AABBQuantizedTree;
112 else mTree = new AABBCollisionTree;
114 CHECKALLOC(mTree);
116 return true;
119 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
121 * Refits the collision model. This can be used to handle dynamic meshes. Usage is:
122 * 1. modify your mesh vertices (keep the topology constant!)
123 * 2. refit the tree (call this method)
124 * \return true if success
126 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
127 bool BaseModel::Refit()
129 // Refit the optimized tree
130 return mTree->Refit(mIMesh);
132 // Old code kept for reference : refit the source tree then rebuild !
133 // if(!mSource) return false;
134 // // Ouch...
135 // mSource->Refit(&mTB);
136 // // Ouch...
137 // return mTree->Build(mSource);