hrplib
hrpCollision
Opcode
OPC_BaseModel.cpp
Go to the documentation of this file.
1
/*
3
* OPCODE - Optimized Collision Detection
4
* Copyright (C) 2001 Pierre Terdiman
5
* Homepage: http://www.codercorner.com/Opcode.htm
6
*/
8
10
16
19
27
30
// Precompiled Header
31
#include "
Stdafx.h
"
32
33
using namespace
Opcode
;
34
36
39
OPCODECREATE::OPCODECREATE
()
41
{
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
;
52
}
53
55
58
BaseModel::BaseModel
() : mIMesh(
null
), mModelCode(0), mSource(
null
), mTree(
null
)
60
{
61
}
62
64
67
BaseModel::~BaseModel
()
69
{
70
ReleaseBase
();
71
}
72
74
77
void
BaseModel::ReleaseBase
()
79
{
80
DELETESINGLE
(
mSource
);
81
DELETESINGLE
(
mTree
);
82
}
83
85
91
bool
BaseModel::CreateTree
(
bool
no_leaf,
bool
quantized)
93
{
94
DELETESINGLE
(
mTree
);
95
96
// Setup model code
97
if
(no_leaf)
mModelCode
|=
OPC_NO_LEAF
;
98
else
mModelCode
&= ~
OPC_NO_LEAF
;
99
100
if
(quantized)
mModelCode
|=
OPC_QUANTIZED
;
101
else
mModelCode
&= ~
OPC_QUANTIZED
;
102
103
// Create the correct class
104
if
(
mModelCode
&
OPC_NO_LEAF
)
105
{
106
if
(
mModelCode
&
OPC_QUANTIZED
)
mTree
=
new
AABBQuantizedNoLeafTree
;
107
else
mTree
=
new
AABBNoLeafTree
;
108
}
109
else
110
{
111
if
(
mModelCode
&
OPC_QUANTIZED
)
mTree
=
new
AABBQuantizedTree
;
112
else
mTree
=
new
AABBCollisionTree
;
113
}
114
CHECKALLOC
(
mTree
);
115
116
return
true
;
117
}
118
120
126
bool
BaseModel::Refit
()
128
{
129
// Refit the optimized tree
130
return
mTree
->
Refit
(
mIMesh
);
131
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);
138
}
BaseModel::CreateTree
bool CreateTree(bool no_leaf, bool quantized)
Definition:
OPC_BaseModel.cpp:92
OPC_NO_LEAF
@ OPC_NO_LEAF
Leaf/NoLeaf tree.
Definition:
OPC_BaseModel.h:46
AABBCollisionTree
Definition:
OPC_OptimizedTree.h:192
CHECKALLOC
#define CHECKALLOC(x)
Definition:
IceMemoryMacros.h:103
DELETESINGLE
#define DELETESINGLE(x)
Deletes an instance of a class.
Definition:
IceMemoryMacros.h:95
SPLIT_GEOM_CENTER
@ SPLIT_GEOM_CENTER
Split at geometric center (else split in the middle)
Definition:
OPC_TreeBuilders.h:33
Stdafx.h
SPLIT_SPLATTER_POINTS
@ SPLIT_SPLATTER_POINTS
Splatter primitive centers (QuickCD-style)
Definition:
OPC_TreeBuilders.h:28
BaseModel::BaseModel
BaseModel()
Definition:
OPC_BaseModel.cpp:59
AABBQuantizedTree
Definition:
OPC_OptimizedTree.h:202
BaseModel::mIMesh
const MeshInterface * mIMesh
User-defined mesh interface.
Definition:
OPC_BaseModel.h:166
BaseModel::ReleaseBase
void ReleaseBase()
Definition:
OPC_BaseModel.cpp:78
OPCODECREATE::OPCODECREATE
OPCODECREATE()
Constructor.
Definition:
OPC_BaseModel.cpp:40
BaseModel::mModelCode
udword mModelCode
Model code = combination of ModelFlag(s)
Definition:
OPC_BaseModel.h:167
AABBQuantizedNoLeafTree
Definition:
OPC_OptimizedTree.h:211
BaseModel::~BaseModel
virtual ~BaseModel()
Definition:
OPC_BaseModel.cpp:68
OPC_QUANTIZED
@ OPC_QUANTIZED
Compressed/uncompressed tree.
Definition:
OPC_BaseModel.h:45
AABBOptimizedTree::Refit
virtual bool Refit(const MeshInterface *mesh_interface)=0
BaseModel::mTree
AABBOptimizedTree * mTree
Optimized tree owned by the model.
Definition:
OPC_BaseModel.h:169
Opcode
Definition:
CollisionPairInserterBase.h:18
BaseModel::Refit
virtual bool Refit()
Definition:
OPC_BaseModel.cpp:127
BaseModel::mSource
AABBTree * mSource
Original source tree.
Definition:
OPC_BaseModel.h:168
null
#define null
our own NULL pointer
Definition:
IceTypes.h:57
AABBNoLeafTree
Definition:
OPC_OptimizedTree.h:197
openhrp3
Author(s): AIST, General Robotix Inc., Nakamura Lab of Dept. of Mechano Informatics at University of Tokyo
autogenerated on Wed Sep 7 2022 02:51:03