TAPs 0.7.7.3
TAPsModelForInstrument.hpp
Go to the documentation of this file.
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----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines