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 
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 
69 {
70  ReleaseBase();
71 }
72 
74 
79 {
82 }
83 
85 
91 bool BaseModel::CreateTree(bool no_leaf, bool quantized)
93 {
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  {
107  else mTree = new AABBNoLeafTree;
108  }
109  else
110  {
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