TAPs 0.7.7.3
TAPsAdvSimSupport_DATA.hpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsAdvSimSupport_DATA.hpp
00003 ******************************************************************************/
00007 /******************************************************************************
00008 SUKITTI PUNAK   (09/30/2010)
00009 UPDATE          (02/28/2011)
00010 ******************************************************************************/
00011 #ifndef TAPs_ADV_SIM_SUPPORT_DATA_HPP
00012 #define TAPs_ADV_SIM_SUPPORT_DATA_HPP
00013 
00014 #include <TAPs/Core/TAPsLib.hpp>
00015 
00016 #include "TAPsListOfAdvSimConsts.hpp"
00017 #include "TAPs/GeometricDataStructure/HalfEdge/TAPsHalfEdgeDataStructure.hpp"
00018 
00019 //#include "TAPs/Support/TAPsAdvSimConstraint.hpp"
00020 #include "AdvSimConstraints/TAPsAdvSimConstraint_HEVertexVsHEVertex.hpp"
00021 #include "AdvSimConstraints/TAPsAdvSimConstraint_VertexIdVsVertexId.hpp"
00022 #include "AdvSimConstraints/TAPsAdvSimConstraint_VertexIdVsHEVertex.hpp"
00023 
00024 //#include <TAPs/OpenGLModel/TAPsModelSuture.hpp>
00025 //#include <TAPs/ModelSpecific/TAPsModelForSurgery.hpp>
00026 #include <TAPs/Model/TAPsModelElasticRod.hpp>
00027 #include <TAPs/Model/TAPsModelDefBasedOnFEMTet.hpp>
00028 #include <TAPs/Model/TAPsModelDefBasedOnFEMHex.hpp>
00029 #include <TAPs/Model/RigidBodies/TAPsRigidBodyDynamics.hpp>
00030 
00031 
00032 BEGIN_NAMESPACE_TAPs
00033 //=============================================================================
00034 template <typename T, typename DATA = unsigned char>
00035 class AdvSimSupport_DATA {
00036 //=============================================================================
00037 public:
00038     //=========================================================================
00045     class IDForModel {
00046     public:
00047         IDForModel ( Enum::ModelType type, unsigned int slot ) : Type(type), Slot(slot) {}
00048         Enum::ModelType Type;   
00049         unsigned int    Slot;   
00050     };
00051 
00052     typedef std::vector< IDForModel >   ModelIDs;
00053 
00054     typedef std::list< PointForce<T> * >    ListOfPointForces;
00055 
00056     // Data for controlling forward and backward movements of an Elastic Rod
00057     class ERNodeProps {
00058     public:
00059         ERNodeProps () : DiffLength(0), IsConstrained(false), MoveStatus(0), GroupID(0) {}
00060         void Reset () { DiffLength=0; IsConstrained=false; MoveStatus=0; GroupID=0; }
00061         T               DiffLength;         
00062         bool            IsConstrained;      
00063         unsigned char   MoveStatus;         
00064 
00065         unsigned short  GroupID;    
00066     };
00067 
00068     typedef std::vector< ERNodeProps >  ERNodePropsList;
00069 
00070     class ModelLists {
00071     public:
00072         //std::vector< OpenGL::ModelSuture<T> * >   m_ListOfSutureModelsBasedOnMSS;     //!< list of suture models based on mass-spring system (currently is not added to this simulation)
00073         //std::vector< ModelForSurgery<T> * >       m_ListOfModelsForSurgeryBasedOnMSS; //!< list of models for surgery based on mass-spring system  (currently is not added to this simulation)
00074         //std::vector< OpenGL::HETriMeshOneModelMultiParts<T> * >   m_ListOfHETriMeshOneModelMultiParts;    //!< list of sub models for surgery based on mass-spring system  (currently is not added to this simulation)
00075 
00077         void ResetAllERNodePropsList ()
00078         {
00079             for ( unsigned int i = 0; i < AllERNodePropsList.size(); ++i ) {
00080                 for ( unsigned int j = 0; j < AllERNodePropsList[i].size(); ++j ) {
00081                     AllERNodePropsList[i][j].Reset();
00082                 }
00083             }
00084         }
00085 
00086         void ResetERNodePropsListOfERModel ( unsigned int ERloc )
00087         {
00088             if ( ERloc < AllERNodePropsList.size() ) {
00089                 for ( unsigned int j = 0; j < AllERNodePropsList[ERloc].size(); ++j ) {
00090                     AllERNodePropsList[ERloc][j].Reset();
00091                 }
00092             }
00093         }
00094 
00095         std::vector< ERNodePropsList >  AllERNodePropsList; 
00096 
00097 
00098 
00099         std::vector< ModelElasticRod<T> * >         BasedOnER;  
00100         std::vector< ModelDefBasedOnFEM<T,DATA> * > BasedOnFEM; 
00101         std::vector< RigidBodyDynamics<T> * >       BasedOnRBD; 
00102     };
00103 
00104     //-------------------------------------------------------------------------
00105     // (3D-array) list of model-model interaction data
00106     // SEMI-EXCLUSIVE DATA ARRAYS FOR INTERACTION
00107 
00108     // 1) ERModel vs HEModel
00109     //===============================================================
00110     typedef AdvSimConstraint_VertexIdVsHEVertex<T>          Constraint_ERModelVsHEModel;
00111     typedef std::vector< Constraint_ERModelVsHEModel * >    InteractionConstraints_ERModelVsHEModel;
00112     //---------------------------------------------------------------
00113     class InteractionConstants_ERModelVsHEModel {
00114     public:
00115         InteractionConstants_ERModelVsHEModel ()
00116             : DiffLengthForTriggeringForwardMove( 0.05 )
00117             , DiffLengthForTriggeringBackwardMove( 0.05 )
00118         {}
00119 
00120         T   DiffLengthForTriggeringForwardMove;     
00121         T   DiffLengthForTriggeringBackwardMove;    
00122     };
00123     class Interaction_ERModelVsHEModel {
00124     public:
00125         Interaction_ERModelVsHEModel (
00126             InteractionConstants_ERModelVsHEModel &     _Constants  = InteractionConstants_ERModelVsHEModel(),
00127             InteractionConstraints_ERModelVsHEModel &   _Constraints= InteractionConstraints_ERModelVsHEModel()
00128         ) : Constants( _Constants ), Constraints( _Constraints )
00129         {}
00130 
00131         InteractionConstants_ERModelVsHEModel   Constants;
00132         InteractionConstraints_ERModelVsHEModel Constraints;
00133     };
00134     typedef std::vector< std::vector< Interaction_ERModelVsHEModel > >  ListOfInteractions_ERModelVsHEModel;
00135     //---------------------------------------------------------------
00136 
00137     // 2) ERModel vs IPGModel
00138     //===============================================================
00139     typedef AdvSimConstraint_VertexIdVsVertexId<T>          Constraint_ERModelVsIPGModel;
00140     typedef std::vector< Constraint_ERModelVsIPGModel * >   InteractionConstraints_ERModelVsIPGModel;
00141     //---------------------------------------------------------------
00142     class InteractionConstants_ERModelVsIPGModel {
00143     public:
00144         InteractionConstants_ERModelVsIPGModel ()   {}
00145     };
00146     class Interaction_ERModelVsIPGModel {
00147     public:
00148         Interaction_ERModelVsIPGModel (
00149             InteractionConstants_ERModelVsIPGModel &    _Constants  = InteractionConstants_ERModelVsIPGModel(),
00150             InteractionConstraints_ERModelVsIPGModel &  _Constraints= InteractionConstraints_ERModelVsIPGModel()
00151         ) : Constants( _Constants ), Constraints( _Constraints )
00152         {}
00153 
00154         InteractionConstants_ERModelVsIPGModel      Constants;
00155         InteractionConstraints_ERModelVsIPGModel    Constraints;
00156     };
00157     typedef std::vector< std::vector< Interaction_ERModelVsIPGModel > > ListOfInteractions_ERModelVsIPGModel;
00158     //---------------------------------------------------------------
00159 
00160     // 3) IPGModel vs HEModel
00161     //===============================================================
00162     typedef AdvSimConstraint_VertexIdVsHEVertex<T>          Constraint_IPGModelVsHEModel;
00163     typedef std::vector< Constraint_IPGModelVsHEModel * >   InteractionConstraints_IPGModelVsHEModel;
00164     //---------------------------------------------------------------
00165     class InteractionConstants_IPGModelVsHEModel {
00166     public:
00167         InteractionConstants_IPGModelVsHEModel ()   {}
00168     };
00169     class Interaction_IPGModelVsHEModel {
00170     public:
00171         Interaction_IPGModelVsHEModel (
00172             InteractionConstants_IPGModelVsHEModel &    _Constants  = InteractionConstants_IPGModelVsHEModel(),
00173             InteractionConstraints_IPGModelVsHEModel &  _Constraints= InteractionConstraints_IPGModelVsHEModel()
00174         ) : Constants( _Constants ), Constraints( _Constraints )
00175         {}
00176 
00177         InteractionConstants_IPGModelVsHEModel      Constants;
00178         InteractionConstraints_IPGModelVsHEModel    Constraints;
00179     };
00180     typedef std::vector< std::vector< Interaction_IPGModelVsHEModel > > ListOfInteractions_IPGModelVsHEModel;
00181     //---------------------------------------------------------------
00182 
00183     // 4) ERModel vs ERModel
00184     //===============================================================
00185     typedef AdvSimConstraint_VertexIdVsVertexId<T>          Constraint_ERModelVsERModel;
00186     typedef std::vector< Constraint_ERModelVsERModel * >    InteractionConstraints_ERModelVsERModel;
00187     //---------------------------------------------------------------
00188     class InteractionConstants_ERModelVsERModel {
00189     public:
00190         InteractionConstants_ERModelVsERModel ()    {}
00191     };
00192     class Interaction_ERModelVsERModel {
00193     public:
00194         Interaction_ERModelVsERModel (
00195             InteractionConstants_ERModelVsERModel &     _Constants  = InteractionConstants_ERModelVsERModel(),
00196             InteractionConstraints_ERModelVsERModel &   _Constraints= InteractionConstraints_ERModelVsERModel()
00197         ) : Constants( _Constants ), Constraints( _Constraints )
00198         {}
00199 
00200         InteractionConstants_ERModelVsERModel   Constants;
00201         InteractionConstraints_ERModelVsERModel Constraints;
00202     };
00203     typedef std::vector< std::vector< Interaction_ERModelVsERModel > >  ListOfInteractions_ERModelVsERModel;
00204     //---------------------------------------------------------------
00205 
00206     // 5) HEModel vs HEModel
00207     //===============================================================
00208     typedef AdvSimConstraint_HEVertexVsHEVertex<T>          Constraint_HEModelVsHEModel;
00209     typedef std::vector< Constraint_HEModelVsHEModel * >    InteractionConstraints_HEModelVsHEModel;
00210     //---------------------------------------------------------------
00211     class InteractionConstants_HEModelVsHEModel {
00212     public:
00213         InteractionConstants_HEModelVsHEModel ()    {}
00214     };
00215     class Interaction_HEModelVsHEModel {
00216     public:
00217         Interaction_HEModelVsHEModel (
00218             InteractionConstants_HEModelVsHEModel &     _Constants  = InteractionConstants_HEModelVsHEModel(),
00219             InteractionConstraints_HEModelVsHEModel &   _Constraints= InteractionConstraints_HEModelVsHEModel()
00220         ) : Constants( _Constants ), Constraints( _Constraints )
00221         {}
00222 
00223         InteractionConstants_HEModelVsHEModel   Constants;
00224         InteractionConstraints_HEModelVsHEModel Constraints;
00225     };
00226     typedef std::vector< std::vector< Interaction_HEModelVsHEModel > >  ListOfInteractions_HEModelVsHEModel;
00227     //---------------------------------------------------------------
00228 
00229     // 6) IPGModel vs IPGModel
00230     //===============================================================
00231     typedef AdvSimConstraint_VertexIdVsVertexId<T>          Constraint_IPGModelVsIPGModel;
00232     typedef std::vector< Constraint_IPGModelVsIPGModel * >  InteractionConstraints_IPGModelVsIPGModel;
00233     //---------------------------------------------------------------
00234     class InteractionConstants_IPGModelVsIPGModel {
00235     public:
00236         InteractionConstants_IPGModelVsIPGModel ()  {}
00237     };
00238     class Interaction_IPGModelVsIPGModel {
00239     public:
00240         Interaction_IPGModelVsIPGModel (
00241             InteractionConstants_IPGModelVsIPGModel &   _Constants  = InteractionConstants_IPGModelVsIPGModel(),
00242             InteractionConstraints_IPGModelVsIPGModel & _Constraints= InteractionConstraints_IPGModelVsIPGModel();
00243         ) : Constants( _Constants ), Constraints( _Constraints )
00244         {}
00245 
00246         InteractionConstants_IPGModelVsIPGModel Constants;
00247         InteractionConstraints_IPGModelVsIPGModel   Constraints;
00248     };
00249     typedef std::vector< std::vector< Interaction_IPGModelVsIPGModel > >    ListOfInteractions_IPGModelVsIPGModel;
00250     //---------------------------------------------------------------
00251 
00252 //#ifdef    TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00253 //  typedef std::vector< AdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle<T> * >   ListOfInteraction_SwHDModelVsHEModel;
00254 //#endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00255 
00256     class InteractionLists {
00257     public:
00258         ListOfInteractions_ERModelVsHEModel     ERModelVsHEModel;
00259         ListOfInteractions_ERModelVsIPGModel    ERModelVsIPGModel;
00260         ListOfInteractions_IPGModelVsHEModel    IPGModelVsHEModel;
00261         ListOfInteractions_ERModelVsERModel     ERModelVsERModel;
00262         ListOfInteractions_HEModelVsHEModel     HEModelVsHEModel;
00263         ListOfInteractions_IPGModelVsIPGModel   IPGModelVsIPGModel;
00264 
00265     //#ifdef    TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00266     //  ListOfInteraction_SwHDModelVsHEModel    SwHDModelVsHEModel;
00267     //#endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00268     };
00269     //=========================================================================
00270 
00271     //=========================================================================
00272     // State variables
00273     //-------------------------------------------------------------------------
00274 
00275     // Used for interaction control of the suture's head needle for class ModelSurgicalSutureWithHeadNeedle<T>
00276     static bool STATE_EnforcePositionA; 
00277     static bool STATE_EnforcePositionB; 
00278     static T    STATE_ForceRatio;       
00279     static T    STATE_ForceScaleA;      
00280     static T    STATE_ForceScaleB;      
00281     static T    STATE_ForceThresholdA;  
00282     static T    STATE_ForceThresholdB;  
00283 
00284     // Used for interaction control of the suture's thread for class ModelSurgicalSutureWithHeadNeedle<T>
00285     static bool STATE_EnforcePositionA_2;   
00286     static bool STATE_EnforcePositionB_2;   
00287     static T    STATE_ForceRatio_2;         
00288     static T    STATE_ForceScaleA_2;        
00289     static T    STATE_ForceScaleB_2;        
00290     static T    STATE_ForceThresholdA_2;    
00291     static T    STATE_ForceThresholdB_2;    
00292 
00293     //-------------------------------------------------------------------------
00294     // State variables
00295     //=========================================================================
00296 
00297 
00298     //=========================================================================
00299     // Temporary data for helping processing interactions
00300     //-------------------------------------------------------------------------
00301     static std::vector< Vector3<T> >    TEMP_ListOfPoints;              
00302     static std::vector< HEFace<T>* >    TEMP_ListOfHEFaces;             
00303     static std::vector< HEVertex<T>* >  TEMP_ListOfHEVertices;          
00304     static std::vector< T >             TEMP_ListOfRatios;              
00305     static std::vector< T >             TEMP_ListOfIntersectionAngles;  
00306     //-------------------------------------------------------------------------
00307     // Temporary data for helping processing interactions
00308     //=========================================================================
00309 
00310 
00311 //=============================================================================
00312 }; // END CLASS AdvSimSupport_DATA
00313 //=============================================================================
00314 
00315 
00316 //=========================================================================
00317 // State variables
00318 //-------------------------------------------------------------------------
00319 template <typename T, typename DATA> bool   AdvSimSupport_DATA<T,DATA>::STATE_EnforcePositionA = false;
00320 template <typename T, typename DATA> bool   AdvSimSupport_DATA<T,DATA>::STATE_EnforcePositionB = false;
00321 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceRatio = 0.5;
00322 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceScaleA = 1;
00323 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceScaleB = 1;
00324 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceThresholdA = 1;
00325 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceThresholdB = 1;
00326 
00327 template <typename T, typename DATA> bool   AdvSimSupport_DATA<T,DATA>::STATE_EnforcePositionA_2 = false;
00328 template <typename T, typename DATA> bool   AdvSimSupport_DATA<T,DATA>::STATE_EnforcePositionB_2 = false;
00329 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceRatio_2 = 0.5;
00330 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceScaleA_2 = 1;
00331 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceScaleB_2 = 1;
00332 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceThresholdA_2 = 1;
00333 template <typename T, typename DATA> T      AdvSimSupport_DATA<T,DATA>::STATE_ForceThresholdB_2 = 1;
00334 //-------------------------------------------------------------------------
00335 // State variables
00336 //=========================================================================
00337 
00338 
00339 //=========================================================================
00340 // Static temporary data for helping processing interactions
00341 //-------------------------------------------------------------------------
00342 template <typename T, typename DATA> std::vector< Vector3<T> >      AdvSimSupport_DATA<T,DATA>::TEMP_ListOfPoints;
00343 template <typename T, typename DATA> std::vector< HEFace<T>* >      AdvSimSupport_DATA<T,DATA>::TEMP_ListOfHEFaces;
00344 template <typename T, typename DATA> std::vector< HEVertex<T>* >    AdvSimSupport_DATA<T,DATA>::TEMP_ListOfHEVertices;
00345 template <typename T, typename DATA> std::vector< T >               AdvSimSupport_DATA<T,DATA>::TEMP_ListOfRatios;
00346 template <typename T, typename DATA> std::vector< T >               AdvSimSupport_DATA<T,DATA>::TEMP_ListOfIntersectionAngles;
00347 //-------------------------------------------------------------------------
00348 // Static temporary data for helping processing interactions
00349 //=========================================================================
00350 
00351 
00352 END_NAMESPACE_TAPs
00353 //-----------------------------------------------------------------------------
00354 // Include definition if TAPs_USE_EXPORT is not defined
00355 //#if !defined( TAPs_USE_EXPORT )
00356 //  #include "TAPsAdvSimSupport_DATA.cpp"
00357 //#endif
00358 //-----------------------------------------------------------------------------
00359 #endif//TAPs_ADV_SIM_SUPPORT_HPP_DS
00360 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00361 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines