![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsModelForInstrument.hpp 00003 ******************************************************************************/ 00007 /****************************************************************************** 00008 SUKITTI PUNAK (08/06/2008) 00009 UPDATE (09/03/2010) 00010 ******************************************************************************/ 00011 #ifndef TAPs_MODEL_FOR_SURGERY_HPP 00012 #define TAPs_MODEL_FOR_SURGERY_HPP 00013 00014 #include <TAPs/DataStructure/TAPsFlag.hpp> 00015 #include <TAPs/Support/TAPsTransformationSupport.hpp> 00016 00017 #include <TAPs/OpenGLModel/TAPsHETriMeshOneModelMultiParts.hpp> 00018 #include <TAPs/CD/TAPsColDetFns.hpp> 00019 00020 #if defined(__gl_h_) || defined(__GL_H__) 00021 #include <TAPs/OpenGLModel/TAPsOpenGLHETriMeshOneModelMultiParts.hpp> 00022 #else 00023 #endif 00024 00025 BEGIN_NAMESPACE_TAPs 00026 //============================================================================= 00027 template <typename T> 00028 class ModelForSurgery { 00029 //============================================================================= 00030 public: 00031 00032 enum Operation { 00033 SIMULATION_ON = 1, 00034 COLLISION_ON = 1 << 1, 00035 RENDER_ON = 1 << 2, 00036 //FIXED = 1 << 3, 00037 //DEFORMABLE = 1 << 4, 00038 }; 00039 00040 enum ModelType { 00041 00042 // Organs 00043 HEART = 0, 00044 LEFT_KIDNEY, 00045 RIGHT_KIDNEY, 00046 LIVER, 00047 LEFT_LUNG, 00048 RIGHT_LUNG, 00049 STOMACH, 00050 00051 // For Practice 00052 TISSUE_BOX_01, 00053 TISSUE_TWO_TUBES_01, 00054 00055 UNDEFINED 00056 }; 00057 00059 friend std::ostream & operator<< ( std::ostream &output, ModelForSurgery<T> const &obj ) 00060 { 00061 output << obj.StrInfo(); 00062 return output; 00063 } 00064 00065 // Member Functions ------------------------------------------------------- 00066 00068 virtual ~ModelForSurgery (); 00069 00071 virtual std::string StrInfo () const; 00072 00074 inline int GetID () const 00075 { return m_iId; } 00077 inline void SetID ( int id ) 00078 { m_iId = id; } 00079 00081 inline std::string const & GetName () const 00082 { return m_strName; } 00084 inline void SetName ( std::string const & name ) 00085 { m_strName = name; } 00086 00088 enum ModelType GetModelType () const 00089 { return m_eModelType; } 00090 00092 inline TransformationSupport<T> const & GetTransform () const { return m_Transform; } 00094 inline TransformationSupport<T> & GetTransform () { return m_Transform; } 00096 inline void SetTransform ( TransformationSupport<T> const & trx ) { m_Transform = trx; } 00097 00108 virtual void ApplyAndResetTransform (); 00109 00111 inline TAPs::DS::Flag< enum Operation, 8 > & GetOperationFlags () 00112 { return m_OperationFlags; } 00113 00115 void SetOperationFlag ( enum Operation flag ); 00116 00118 void ClearOperationFlag ( enum Operation flag ); 00119 00121 inline bool CheckOperationFlag ( enum Operation flag ) 00122 { return m_OperationFlags.CheckFlag( flag ); } 00123 00125 T GetKPointMass () const { return m_tPtMass; } 00126 00128 T GetKStiffness () const { return m_tKStiffness; } 00129 00131 T GetKDamper () const { return m_tKDamper; } 00132 00134 T GetHomeKStiffness () const { return m_tHomeKStiffness; } 00135 00137 T GetHomeKDamper () const { return m_tHomeKDamper; } 00138 00140 T GetPredefinedTimeStep () const { return m_tPredefinedTimeStep; } 00142 // NEED TO APPLY TO ALL PARTS 00143 void SetPredefinedTimeStep ( T ts ) { m_tPredefinedTimeStep = ts; } 00144 00146 int GetNumSimSubSteps () const { return m_iNumSimSubSteps; } 00148 // NEED TO APPLY TO ALL PARTS 00149 void SetNumSimSubSteps ( int i ) { m_iNumSimSubSteps = i; } 00150 00151 00152 // NEED TO APPLY TO ALL PARTS 00153 virtual void SetKPointMass ( T val ) { m_tPtMass = val; } 00154 virtual void SetKStiffness ( T val ) { m_tKStiffness = val; } 00155 virtual void SetKDamper ( T val ) { m_tKDamper = val; } 00156 virtual void SetHomeKStiffness ( T val ) { m_tKStiffness = val; } 00157 virtual void SetHomeKDamper ( T val ) { m_tKDamper = val; } 00158 00159 //=============================================================== 00160 // For simulation 00161 //--------------------------------------------------------------- 00163 virtual void AdvanceSimulation ( T tCurrent, T tNext ); 00165 virtual void AdvanceSimulation ( T tCurrent ); 00167 virtual void AdvanceSimulation ( Simulation::SimClock<T> & simClock ); 00168 //--------------------------------------------------------------- 00169 00170 //=============================================================== 00171 // For collision detection 00172 //--------------------------------------------------------------- 00173 00175 bool CDR ( 00176 TAPs::BoundingVolume<T> const * const pBVObj 00177 , TAPs::Vector3<T> * totalForce = NULL 00178 , T gain = 1.0 00179 ); 00180 00182 bool CDR ( 00183 TAPs::MultiBoundingVolume<T> const * const pMBVObj 00184 , TAPs::Vector3<T> * totalForce = NULL 00185 , T gain = 1.0 00186 ); 00187 00189 bool CDR ( 00190 ModelForSurgery<T> * const pModel, 00191 T deformRatio = 0.5 00192 ); 00193 00194 //--------------------------------------------------------------- 00195 00196 00197 #if defined(__gl_h_) || defined(__GL_H__) 00198 virtual void DisplayGL ( OpenGL::Enum::DrawMode DM = OpenGL::Enum::POLYGON ); 00199 00201 int GetNumberOfParts () 00202 { return static_cast<int>( m_Parts.size() ); } 00203 00205 std::vector< OpenGL::OpenGLHETriMeshOneModelMultiParts<T> * > & GetListOfParts () 00206 { return m_Parts; } 00207 00209 OpenGL::OpenGLHETriMeshOneModelMultiParts<T> * GetPtrToPartNo ( unsigned int i ) 00210 { 00211 if ( i < static_cast<unsigned int>( m_Parts.size() ) ) return m_Parts[i]; 00212 else return NULL; 00213 } 00214 #else 00215 #endif 00216 00217 // Data Members ----------------------------------------------------------- 00218 //============================================================================= 00219 protected: 00220 // Member Functions ------------------------------------------------------- 00221 00223 ModelForSurgery ( 00224 std::string data_location, 00225 enum ModelType = UNDEFINED, 00226 T Kpointmass = 1.0, 00227 T Kstiffness = 1.0, 00228 T Kdamper = 1.0, 00229 T HomeKstiffness = 1.0, 00230 T HomeKdamper = 1.0, 00231 T predefinedTimeStep = 0.01, 00232 int numSimSubSteps = 10 00233 ); 00234 00235 // Data Members ----------------------------------------------------------- 00236 00237 std::string m_strDataLocation; 00238 00239 //----------------------------------------------------- 00240 // Not Finish Yet!!! 00241 // These values have to be set into the springs 00242 // !!! 00243 T m_tPtMass; 00244 T m_tKStiffness; 00245 T m_tKDamper; 00246 T m_tHomeKStiffness; 00247 T m_tHomeKDamper; 00248 00249 // For advancing the simulation step 00250 T m_tPredefinedTimeStep; 00251 int m_iNumSimSubSteps; 00252 00253 //----------------------------------------------------- 00254 // Model Identification 00255 static int m_iTotal; 00256 int m_iId; 00257 std::string m_strName; 00258 enum ModelType m_eModelType; 00259 00260 TransformationSupport<T> m_Transform; 00261 TAPs::DS::Flag< enum Operation, 8 > m_OperationFlags; 00262 00263 #if defined(__gl_h_) || defined(__GL_H__) 00264 std::vector< OpenGL::OpenGLHETriMeshOneModelMultiParts<T> * > m_Parts; 00265 #else 00266 #endif 00267 //============================================================================= 00268 private: 00269 // Member Functions ------------------------------------------------------- 00270 // Data Members ----------------------------------------------------------- 00271 //============================================================================= 00272 00273 //============================================================================= 00274 }; // END CLASS ModelForSurgery 00275 //============================================================================= 00276 //----------------------------------------------------------------------------- 00278 typedef ModelForSurgery<int> ModelForSurgeryi; 00279 typedef ModelForSurgery<float> ModelForSurgeryf; 00280 typedef ModelForSurgery<double> ModelForSurgeryd; 00281 //============================================================================= 00282 END_NAMESPACE_TAPs 00283 00284 //----------------------------------------------------------------------------- 00285 // Include definition if TAPs_USE_EXPORT is not defined 00286 00287 // If the class is template, use this 00288 //#if !defined( TAPs_USE_EXPORT ) 00289 #include "TAPsModelForInstrument.cpp" 00290 //#endif 00291 00292 // If the class is NOT template, use this 00293 //#if !defined( TAPs_USE_EXPORT ) 00294 // #include "TAPsModelForInstrument.cpp" 00295 //#endif 00296 00297 //----------------------------------------------------------------------------- 00298 #endif 00299 //34567890123456789012345678901234567890123456789012345678901234567890123456789 00300 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----