TAPs 0.7.7.3
TAPsAdvSimSupport_DS.hpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsAdvSimSupport_DS.hpp
00003 ******************************************************************************/
00109 /******************************************************************************
00110 SUKITTI PUNAK   (09/29/2008)
00111 UPDATE          (02/28/2011)
00112 ******************************************************************************/
00113 #ifndef TAPs_ADV_SIM_SUPPORT_DS_HPP
00114 #define TAPs_ADV_SIM_SUPPORT_DS_HPP
00115 
00116 #include <TAPs/Core/TAPsLib.hpp>
00117 
00118 BEGIN_NAMESPACE_TAPs
00119 //=============================================================================
00120 //typedef unsigned int t_TAPsAdvSimID;  //!< typedef for advanced simulation ID (currently used with CUDA only)
00121 //=============================================================================
00122 END_NAMESPACE_TAPs
00123 
00124 #include "TAPsAdvSimSupport_DATA.hpp"
00125 
00126 #ifdef  TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00127 #include "AdvSimConstraints/Specific/TAPsAdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle.hpp"
00128 #endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00129 
00130 BEGIN_NAMESPACE_TAPs
00131 //=============================================================================
00132 template <typename T, typename DATA = unsigned char>
00133 class AdvSimSupport_DS {
00134 //=============================================================================
00135 public:
00136     //=========================================================================
00137 #ifdef  TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00138     typedef std::vector< AdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle<T> * >   ListOfInteraction_SwHDModelVsHEModel;
00139     ListOfInteraction_SwHDModelVsHEModel    m_ListOfInteraction_SwHDModelVsHEModel;
00140 #endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00141     //=========================================================================
00142 
00143     // Member Functions -------------------------------------------------------
00145     friend std::ostream & operator<< ( std::ostream &output, AdvSimSupport_DS<T,DATA> const &obj )
00146     {
00147         output << obj.StrInfo();
00148         return output;
00149     }
00150     //-------------------------------------------------------------------------
00152     AdvSimSupport_DS ();
00154     ~AdvSimSupport_DS ();
00155     //-------------------------------------------------------------------------
00157     std::string StrInfo () const;
00158     //-------------------------------------------------------------------------
00159 
00160     //=========================================================================
00161     // Add models
00162     //-------------------------------------------------------------------------
00166     //static int AddModel ( OpenGL::ModelSuture<T> * pModel );
00167     
00171     int AddModel ( ModelElasticRod<T> * pModel );
00172 
00176     //static int AddModel ( ModelForSurgery<T> * pModel );
00177 
00181     int AddModel( ModelDefBasedOnFEM<T,DATA> * pModel );
00182 
00186     int AddModel( RigidBodyDynamics<T> * pModel );
00187 
00189     unsigned int GetNumberOfTotalModels () const    { return m_IDForModel.size(); }
00190 
00192     Enum::ModelType GetModelType ( int modelID ) const
00193     {
00194         assert( 0 <= modelID && static_cast<unsigned int>(modelID) < GetNumberOfTotalModels() );
00195         return m_IDForModel[modelID].Type;
00196     }
00197 
00199     unsigned int    GetModelSlot ( int modelID ) const
00200     {
00201         assert( 0 <= modelID && static_cast<unsigned int>(modelID) < GetNumberOfTotalModels() );
00202         return m_IDForModel[modelID].Slot;
00203     }
00204 
00205 #ifdef  TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00206     int AddModelSutureWithHeadNeedle ( ModelSurgicalSutureWithHeadNeedle<T> * pModel );
00207 #endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00208 
00209     //-------------------------------------------------------------------------
00210     // Add models
00211     //=========================================================================
00212 
00213 
00214     //=========================================================================
00215     // Add generic constraints
00216     //-------------------------------------------------------------------------
00217 
00219     typename AdvSimSupport_DATA<T,DATA>::Constraint_HEModelVsHEModel * AddVertexConnectionHEModelAndHEModel ( 
00220         unsigned int modelA,                        
00221         HEVertex<T> * pVertexA,                     
00222         enum Enum::AddOn::SimConstraints flagsA,    
00223         unsigned int modelB,                        
00224         HEVertex<T> * pVertexB,                     
00225         enum Enum::AddOn::SimConstraints flagsB,    
00226         T forceRatio,           
00227         T forceScaleForModelA,  
00228         T forceScaleForModelB,  
00229         T forceThresholdForModelA = 1.0,    
00230         T forceThresholdForModelB = 1.0,    
00231         bool bEnforceVertexOfModelA = true, 
00232         bool bEnforceVertexOfModelB = true  
00233     );
00234 
00236     void AddVertexConnectionERModelAndHEModel (
00237         unsigned int ERModelID,                         
00238         unsigned int ERModelVertexID,                   
00239         enum Enum::AddOn::SimConstraints flagsERModel,  
00240         unsigned int HEModelID,                         
00241         HEVertex<T> * pVertexHEModel,                   
00242         enum Enum::AddOn::SimConstraints flagsHEModel,  
00243         T forceRatio,           
00244         T forceScaleForERModel, 
00245         T forceScaleForHEModel, 
00246         T forceThresholdForERModel = 1.0,   
00247         T forceThresholdForHEModel = 1.0,   
00248         bool bEnforceERModelVertex = true,  
00249         bool bEnforceHEModelVertex = true   
00250     );
00251 
00253     void AddVertexConnectionIPGModelAndHEModel (
00254         unsigned int IPGModelID,                        
00255         unsigned int IPGModelVertexID,                  
00256         enum Enum::AddOn::SimConstraints flagsIPGModel, 
00257         unsigned int HEModelID,                         
00258         HEVertex<T> * pVertexHEModel,                   
00259         enum Enum::AddOn::SimConstraints flagsHEModel,  
00260         T forceRatio,               
00261         T forceScaleForIPGModel,    
00262         T forceScaleForHEModel,     
00263         T forceThresholdForIPGModel = 1.0,  
00264         T forceThresholdForHEModel = 1.0,   
00265         bool bEnforceIPGModelVertex = true, 
00266         bool bEnforceHEModelVertex = true   
00267     );
00268 
00269     //-------------------------------------------------------------------------
00270     // Add constraints
00271     //=========================================================================
00272 
00273 
00274 
00275 
00276     //=========================================================================
00277     // Process specific interactions
00278     //-------------------------------------------------------------------------
00279 
00291     void ProcessPuncturingOfCurveFormedByIPGToHEModel ( unsigned int IPGModel, unsigned int HEModel );
00292 
00293 #ifdef  TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00294 
00295 
00296 
00297 
00298 
00299 
00300 
00301 
00302 
00303 
00304 
00305 
00306 
00307 
00308 
00309 
00310 
00311 
00312 
00313 
00314 
00315 
00316     HEVertex<T> * ProcessPuncturingOfSwHDRepresentedByIPGToHEModel (
00317         unsigned int SwHDModel, 
00318         unsigned int HEModel,   
00319         bool & bPunctureIn,     
00320         bool & bPunctureOut,    
00321         bool & bAborted,        
00322         std::string * info = NULL   
00323     );
00324 
00343     HEVertex<T> * ProcessPuncturingOfSwHDUsingCirclePathToHEModel (
00344         typename ModelSurgicalSutureWithHeadNeedle<T>::CirclePath & CirclePathCtrl, 
00345         unsigned int SwHDModel, 
00346         unsigned int HEModel,   
00347         bool & bPunctureIn,     
00348         bool & bPunctureOut,    
00349         bool & bAborted,        
00350         bool & bSuccess         
00351     );
00352     HEVertex<T> * ProcessPuncturingOfSwHDUsingCirclePathToHEModel_MoreAccuButUnfinishYet (
00353         typename ModelSurgicalSutureWithHeadNeedle<T>::CirclePath & CirclePathCtrl, 
00354         unsigned int SwHDModel, 
00355         unsigned int HEModel,   
00356         bool & bPunctureIn,     
00357         bool & bPunctureOut,    
00358         bool & bAborted         
00359     );
00360 #endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00361 
00362     //-------------------------------------------------------------------------
00363     // Process specific interactions
00364     //=========================================================================
00365 
00366 
00367 
00368 
00369     //=========================================================================
00370     // Access the interaction between two objects
00371     //-------------------------------------------------------------------------
00372 
00374     typename AdvSimSupport_DATA<T,DATA>::Interaction_ERModelVsHEModel & RefToInteraction_ERModelVsHEModel (
00375         unsigned int ERModelLoc, unsigned int HEModelLoc )
00376     { return m_InteractionLists.ERModelVsHEModel[ERModelLoc][HEModelLoc]; }
00377 
00379     typename AdvSimSupport_DATA<T,DATA>::Interaction_ERModelVsIPGModel &    RefToInteraction_ERModelVsIPGModel (
00380         unsigned int ERModelLoc, unsigned int IPGModelLoc )
00381     { return m_InteractionLists.ERModelVsHEModel[ERModelLoc][IPGModelLoc]; }
00382 
00384     typename AdvSimSupport_DATA<T,DATA>::Interaction_IPGModelVsHEModel &    RefToInteraction_IPGModelVsHEModel (
00385         unsigned int IPGModelLoc, unsigned int HEModelLoc )
00386     { return m_InteractionLists.IPGModelVsHEModel[IPGModelLoc][HEModelLoc]; }
00387 
00389     typename AdvSimSupport_DATA<T,DATA>::Interaction_HEModelVsHEModel & RefToInteraction_HEModelVsHEModel (
00390         unsigned int HEModelALoc, unsigned int HEModelBLoc )
00391     { return m_InteractionLists.HEModelVsHEModel[HEModelALoc][HEModelBLoc]; }
00392 
00394     typename AdvSimSupport_DATA<T,DATA>::Interaction_ERModelVsERModel & RefToInteraction_ERModelVsERModel (
00395         unsigned int ERModelALoc, unsigned int ERModelBLoc )
00396     { return m_InteractionLists.ERModelVsERModel[ERModelALoc][ERModelBLoc]; }
00397 
00399     typename AdvSimSupport_DATA<T,DATA>::Interaction_IPGModelVsIPGModel &   RefToInteraction_IPGModelVsIPGModel (
00400         unsigned int IPGModelALoc, unsigned int IPGModelBLoc )
00401     { return m_InteractionLists.IPGModelVsIPGModel[IPGModelALoc][IPGModelBLoc]; }
00402 
00403     //-------------------------------------------------------------------------
00404     // Access the interaction between two objects
00405     //=========================================================================
00406 
00407 
00408 
00409 
00410     //=========================================================================
00411     // Access a set of interaction constants between two objects
00412     //-------------------------------------------------------------------------
00413 
00415     typename AdvSimSupport_DATA<T,DATA>::InteractionConstants_ERModelVsHEModel &    RefToInteractionConstants_ERModelVsHEModel (
00416         unsigned int ERModelLoc, unsigned int HEModelLoc )
00417     { return m_InteractionLists.ERModelVsHEModel[ERModelLoc][HEModelLoc].Constants; }
00418 
00420     typename AdvSimSupport_DATA<T,DATA>::InteractionConstants_ERModelVsIPGModel &   RefToInteractionConstants_ERModelVsIPGModel (
00421         unsigned int ERModelLoc, unsigned int IPGModelLoc )
00422     { return m_InteractionLists.ERModelVsHEModel[ERModelLoc][IPGModelLoc].Constants; }
00423 
00425     typename AdvSimSupport_DATA<T,DATA>::InteractionConstants_IPGModelVsHEModel &   RefToInteractionConstants_IPGModelVsHEModel (
00426         unsigned int IPGModelLoc, unsigned int HEModelLoc )
00427     { return m_InteractionLists.IPGModelVsHEModel[IPGModelLoc][HEModelLoc].Constants; }
00428 
00430     typename AdvSimSupport_DATA<T,DATA>::InteractionConstants_HEModelVsHEModel &    RefToInteractionConstants_HEModelVsHEModel (
00431         unsigned int HEModelALoc, unsigned int HEModelBLoc )
00432     { return m_InteractionLists.HEModelVsHEModel[HEModelALoc][HEModelBLoc].Constants; }
00433 
00435     typename AdvSimSupport_DATA<T,DATA>::InteractionConstants_ERModelVsERModel &    RefToInteractionConstants_ERModelVsERModel (
00436         unsigned int ERModelALoc, unsigned int ERModelBLoc )
00437     { return m_InteractionLists.ERModelVsERModel[ERModelALoc][ERModelBLoc].Constants; }
00438 
00440     typename AdvSimSupport_DATA<T,DATA>::InteractionConstants_IPGModelVsIPGModel &  RefToInteractionConstants_IPGModelVsIPGModel (
00441         unsigned int IPGModelALoc, unsigned int IPGModelBLoc )
00442     { return m_InteractionLists.IPGModelVsIPGModel[IPGModelALoc][IPGModelBLoc].Constants; }
00443 
00444     //-------------------------------------------------------------------------
00445     // Access a set of interaction constants between two objects
00446     //=========================================================================
00447 
00448 
00449 
00450 
00451     //=========================================================================
00452     // Access a set of interaction constraints between two objects
00453     //-------------------------------------------------------------------------
00454 
00456     typename AdvSimSupport_DATA<T,DATA>::InteractionConstraints_ERModelVsHEModel &  RefToInteractionConstraints_ERModelVsHEModel (
00457         unsigned int ERModelLoc, unsigned int HEModelLoc )
00458     { return m_InteractionLists.ERModelVsHEModel[ERModelLoc][HEModelLoc].Constraints; }
00459 
00461     typename AdvSimSupport_DATA<T,DATA>::InteractionConstraints_ERModelVsIPGModel & RefToInteractionConstraints_ERModelVsIPGModel (
00462         unsigned int ERModelLoc, unsigned int IPGModelLoc )
00463     { return m_InteractionLists.ERModelVsHEModel[ERModelLoc][IPGModelLoc].Constraints; }
00464 
00466     typename AdvSimSupport_DATA<T,DATA>::InteractionConstraints_IPGModelVsHEModel & RefToInteractionConstraints_IPGModelVsHEModel (
00467         unsigned int IPGModelLoc, unsigned int HEModelLoc )
00468     { return m_InteractionLists.IPGModelVsHEModel[IPGModelLoc][HEModelLoc].Constraints; }
00469 
00471     typename AdvSimSupport_DATA<T,DATA>::InteractionConstraints_HEModelVsHEModel &  RefToInteractionConstraints_HEModelVsHEModel (
00472         unsigned int HEModelALoc, unsigned int HEModelBLoc )
00473     { return m_InteractionLists.HEModelVsHEModel[HEModelALoc][HEModelBLoc].Constraints; }
00474 
00476     typename AdvSimSupport_DATA<T,DATA>::InteractionConstraints_ERModelVsERModel &  RefToInteractionConstraints_ERModelVsERModel (
00477         unsigned int ERModelALoc, unsigned int ERModelBLoc )
00478     { return m_InteractionLists.ERModelVsERModel[ERModelALoc][ERModelBLoc].Constraints; }
00479 
00481     typename AdvSimSupport_DATA<T,DATA>::InteractionConstraints_IPGModelVsIPGModel &    RefToInteractionConstraints_IPGModelVsIPGModel (
00482         unsigned int IPGModelALoc, unsigned int IPGModelBLoc )
00483     { return m_InteractionLists.IPGModelVsIPGModel[IPGModelALoc][IPGModelBLoc].Constraints; }
00484 
00485 #ifdef  TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00486 
00487     AdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle<T> &  RefToInteraction_SwHDVsHEModel (
00488         unsigned int sutureHeadNeedleID )
00489     { return *m_ListOfInteraction_SwHDModelVsHEModel[sutureHeadNeedleID]; }
00490 
00491 #endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00492 
00493     //-------------------------------------------------------------------------
00494     // Access a set of interaction constraints between two objects
00495     //=========================================================================
00496 
00497 
00498 
00499 
00500     //=========================================================================
00501     // Access an individual interaction constraint between two objects
00502     //-------------------------------------------------------------------------
00503 
00505     typename AdvSimSupport_DATA<T,DATA>::Constraint_ERModelVsHEModel & RefToInteractionConstraint_ERModelVsHEModel (
00506         unsigned int ERModelLoc,    
00507         unsigned int HEModelLoc,    
00508         unsigned int constraintLoc  
00509     )   { return *(RefToInteractionConstraints_ERModelVsHEModel( ERModelLoc, HEModelLoc )[ constraintLoc ]); }
00510 
00512     typename AdvSimSupport_DATA<T,DATA>::Constraint_ERModelVsIPGModel & RefToInteractionConstraint_ERModelVsIPGModel (
00513         unsigned int ERModelLoc,    
00514         unsigned int IPGModelLoc,   
00515         unsigned int constraintLoc  
00516     )   { return *(RefToInteractionConstraints_ERModelVsIPGModel( ERModelLoc, IPGModelLoc )[ constraintLoc ]); }
00517 
00519     typename AdvSimSupport_DATA<T,DATA>::Constraint_IPGModelVsHEModel & RefToInteractionConstraint_IPGModelVsHEModel (
00520         unsigned int IPGModelLoc,   
00521         unsigned int HEModelLoc,    
00522         unsigned int constraintLoc  
00523     )   { return *(RefToInteractionConstraints_IPGModelVsHEModel( IPGModelLoc, HEModelLoc )[ constraintLoc ]); }
00524 
00526     typename AdvSimSupport_DATA<T,DATA>::Constraint_HEModelVsHEModel & RefToInteractionConstraint_HEModelVsHEModel (
00527         unsigned int HEModelALoc,   
00528         unsigned int HEModelBLoc,   
00529         unsigned int constraintLoc  
00530     )   { return *(RefToInteractionConstraints_HEModelVsHEModel( HEModelALoc, HEModelBLoc )[ constraintLoc ]); }
00531 
00533     typename AdvSimSupport_DATA<T,DATA>::Constraint_ERModelVsERModel & RefToInteractionConstraint_ERModelVsERModel (
00534         unsigned int ERModelALoc,       
00535         unsigned int ERModelBLoc,       
00536         unsigned int constraintLoc  
00537     )   { return *(RefToInteractionConstraints_ERModelVsERModel( ERModelALoc, ERModelBLoc )[ constraintLoc ]); }
00538 
00540     typename AdvSimSupport_DATA<T,DATA>::Constraint_IPGModelVsIPGModel & RefToInteractionConstraint_IPGModelVsIPGModel (
00541         unsigned int IPGModelALoc,      
00542         unsigned int IPGModelBLoc,      
00543         unsigned int constraintLoc  
00544     )   { return *(RefToInteractionConstraints_IPGModelVsIPGModel( IPGModelALoc, IPGModelBLoc )[ constraintLoc ]); }
00545 
00546     //-------------------------------------------------------------------------
00547     // Access an individual interaction constraint between two objects
00548     //=========================================================================
00549 
00550 
00551 
00552 
00553     //=========================================================================
00554     // Enforce constraints and clear constraints
00555     //-------------------------------------------------------------------------
00556 
00558     inline void EnforceAllConstraints ();
00559 
00561     inline void EnforceAllConstraintsBetweenTwoModels ( unsigned int modelA, unsigned int modelB );
00562 
00564     void EnforceAllConsistentPositions ();
00565 
00567     inline void ClearAllConstraints ();
00568 
00570     inline void ClearAllConstraintsBetweenTwoModels ( unsigned int modelA, unsigned int modelB );
00571 
00573     inline void ClearAContraintBetweenTwoModels ( unsigned int modelA, unsigned int modelB, unsigned int constraintNumber );
00574 
00575 #ifdef  TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00576 
00577     inline void EnforceAllConstraintsOfSutureWithHeadNeedle ( unsigned int SwHDModel );
00579     inline void ClearAllConstraintsOfSutureWithHeadNeedle ( unsigned int SwHDModel );
00580 #endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00581 
00582     //-------------------------------------------------------------------------
00583     // Enforce constraints and clear constraints
00584     //=========================================================================
00585 
00586 
00587 
00588 
00589     //-------------------------------------------------------------------------
00590 
00592     typename AdvSimSupport_DATA<T,DATA>::ModelLists &   GetModelLists ()    { return m_ModelLists; }    
00593 
00595     //unsigned int GetNumOfSutureModelsBasedOnMSS ()    { return static_cast<unsigned int>( m_ListOfSutureModelsBasedOnMSS.size() ); }
00597     //unsigned int GetNumOfModelsForSurgeryBasedOnMSS ()    { return static_cast<unsigned int>( m_ListOfModelsForSurgeryBasedOnMSS.size() ); }
00599     //unsigned int GetNumOfSubModelsForSurgeryBasedOnMSS () { return static_cast<unsigned int>( m_ListOfHETriMeshOneModelMultiParts.size() ); }
00601     unsigned int GetNumOfModelsBasedOnER () { return static_cast<unsigned int>( m_ModelLists.BasedOnER.size() ); }
00603     unsigned int GetNumOfModelsBasedOnFEM ()    { return static_cast<unsigned int>( m_ModelLists.BasedOnFEM.size() ); }
00605     unsigned int GetNumOfModelsBasedOnRigidBodyDynamics ()  { return static_cast<unsigned int>( m_ModelLists.BasedOnRigidBodyDynamics.size() ); }
00606 
00608     //std::vector< OpenGL::ModelSuture<T> * > & GetListOfSutureModelsBasedOnMSS ()  { return m_ListOfSutureModelsBasedOnMSS; }
00610     //std::vector< ModelForSurgery<T> * > & GetListOfModelsForSurgeryBasedOnMSS ()  { return m_ListOfModelsForSurgeryBasedOnMSS; }
00612     std::vector< ModelElasticRod<T> * > &   GetListOfModelsBasedOnER () { return m_ModelLists.BasedOnER; }
00614     std::vector< ModelDefBasedOnFEM<T,DATA> * > &   GetListOfModelsBasedOnFEM ()    { return m_ModelLists.BasedOnFEM; }
00616     std::vector< RigidBodyDynamics<T> * > & GetListOfModelsBasedOnRigidBodyDynamics ()  { return m_ModelLists.BasedOnRigidBodyDynamics; }
00617 
00618 
00619     //=========================================================================
00620     // Specific for suture models
00621     //-------------------------------------------------------------------------
00623     unsigned int GetTheOffsetToSutureLastSlidablePoint () const;
00625     void SetTheOffsetToSutureLastSlidablePoint ( unsigned int i );
00626 
00628     bool GroupSetOfLinks (
00629         unsigned int ERModelID,     
00630         unsigned int startLink,     
00631         unsigned int numOfLinks     
00632     );
00633 
00634     //-------------------------------------------------------------------------
00635     // Specific for suture models
00636     //=========================================================================
00637 
00638 
00639     //-------------------------------------------------------------------------
00644     void AdvSimAllModels (
00645         T timestep,                                 
00646         bool bEnforceAllConstraints = true,         
00647         bool bEnforceAllConsistentPositions = true  
00648     );
00649 
00654     //inline void AdvSimSutureModelBasedOnMSS ( unsigned int sutureID, T timestep );
00659     inline void AdvSimModelBasedOnER ( unsigned int sutureID, T timestep );
00664     //inline void AdvSimModelBasedOnMSS ( unsigned int modelID, T timestep );
00669     inline void AdvSimModelBasedOnFEM ( unsigned int modelID, T timestep );
00670 
00671     // Data Members -----------------------------------------------------------
00672 //=============================================================================
00673 protected:
00674     // Member Functions -------------------------------------------------------
00675 
00677     inline void EnforceTheConstraintNumberOfFEMModelAndFEMModel (
00678         unsigned int locA,                  
00679         Matrix4x4<T> const & TrxModelA,     
00680         Matrix4x4<T> const & InvTrxModelA,  
00681         unsigned int locB,                  
00682         Matrix4x4<T> const & TrxModelB,     
00683         Matrix4x4<T> const & InvTrxModelB,  
00684         unsigned int constraintNumber       
00685     );
00686 
00688     inline void EnforceForwardAndBackwardMovementOfERModelAndFEMModel (
00689         unsigned int ERloc,                     
00690         unsigned int FEMloc,                    
00691         Matrix4x4<T> const & TrxFEMModel,       
00692         Matrix4x4<T> const & InvTrxFEMModel     
00693     );
00694 
00696     inline void EnforceTheConstraintNumberOfERModelAndFEMModel (
00697         unsigned int ERloc,                     
00698         unsigned int FEMloc,                    
00699         Matrix4x4<T> const & TrxFEMModel,       
00700         Matrix4x4<T> const & InvTrxFEMModel,    
00701         unsigned int constraintNumber           
00702     );
00704     inline void EnforceTheConstraintNumberOfRBDModelAndFEMModel (
00705         unsigned int RBDloc,                    
00706         Matrix4x4<T> const & TrxRBDModel,       
00707         Matrix4x4<T> const & InvTrxRBDModel,    
00708         unsigned int FEMloc,                    
00709         Matrix4x4<T> const & TrxFEMModel,       
00710         Matrix4x4<T> const & InvTrxFEMModel,    
00711         unsigned int constraintNumber           
00712     );
00713 
00715     inline void EnforceAllConsistentPositionsOfHEModelAndHEModel ( unsigned int locA, unsigned int locB );
00717     inline void EnforceAllConsistentPositionsOfERModelAndHEModel ( unsigned int ERloc, unsigned int HEloc );
00719     inline void EnforceAllConsistentPositionsOfIPGModelAndHEModel ( unsigned int IPGloc, unsigned int HEloc );
00720 
00722     inline void ClearAllConstraintsOfFEMModelAndFEMModel ( unsigned int locA, unsigned int locB );
00724     inline void ClearAllConstraintsOfERModelAndFEMModel ( unsigned int ERloc, unsigned int FEMloc );
00726     inline void ClearAllConstraintsOfRBDModelAndFEMModel ( unsigned int RBDloc, unsigned int FEMloc );
00727 
00729     inline void ClearTheConstraintNumberOfFEMModelAndFEMModel ( unsigned int locA, unsigned int locB, unsigned int constraintNumber );
00731     inline void ClearTheConstraintNumberOfERModelAndFEMModel ( unsigned int ERloc, unsigned int HEloc, unsigned int constraintNumber );
00733     inline void ClearTheConstraintNumberOfRBDModelAndFEMModel ( unsigned int IPGloc, unsigned int HEloc, unsigned int constraintNumber );
00734 
00736     void ProcessPuncturingOfCurveFormedByIPGonRBDModelToFEMModel ( unsigned int RBDModel, unsigned int FEMModel );
00738     void ProcessForwardPuncturingIPGonRBDModelToHexFEMModel_SectionCleared ( unsigned int RBDModel, unsigned int FEMModel, unsigned int RBDloc, unsigned int FEMloc, unsigned int start, unsigned int end, std::vector< Vector3<T> > const & IPs );
00740     void ProcessForwardPuncturingIPGonRBDModelToHexFEMModel_SectionPunctured ( unsigned int RBDModel, unsigned int FEMModel, unsigned int RBDloc, unsigned int FEMloc, unsigned int start, unsigned int end, std::vector< Vector3<T> > const & IPs, ModelDefBasedOnFEMHex<T,DATA> * pFEMHex );
00741 
00742     // Data Members -----------------------------------------------------------
00743 
00744     unsigned int    m_OffsetToSutureLastSlidablePoint;  
00745 
00746     typename AdvSimSupport_DATA<T,DATA>::ModelIDs           m_IDForModel;           
00747     typename AdvSimSupport_DATA<T,DATA>::ModelLists         m_ModelLists;           
00748     typename AdvSimSupport_DATA<T,DATA>::InteractionLists   m_InteractionLists;     
00749     typename AdvSimSupport_DATA<T,DATA>::ListOfPointForces  m_ListOfPointForces;    
00750 
00751 #ifdef  TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00752     std::vector<unsigned int>   m_IDForHeadNeedlesInTheMainModelList;   
00753 #endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00754 
00755     //=========================================================================
00756 
00757 //=============================================================================
00758 private:
00759     // Member Functions -------------------------------------------------------
00760 
00762     int AddERBasedModel ();
00763 
00765     int AddHEBasedModel ();
00766 
00768     int AddIPGBasedModel ();
00769 
00771     void SetERNodesForwardBackwardMovement_InteractHEModel ( unsigned int ERloc, unsigned int HEloc );
00772 
00773     // Data Members -----------------------------------------------------------
00774 //=============================================================================
00775 
00776 #if defined(__gl_h_) || defined(__GL_H__)
00777 public:
00779     void DrawAllModels ();
00781     void DrawAddedInteractions ();
00782 private:
00784     void DrawAddedInteractionsBetweenTwoModels ( unsigned int modelA, unsigned int modelB );
00786     void DrawAddedInteractionsBetweenFEMModelAndFEMModel ( unsigned int locA, unsigned int locB );
00788     void DrawAddedInteractionsBetweenERModelAndFEMModel ( unsigned int ERloc, unsigned int FEMloc );
00790     void DrawAddedInteractionsBetweenRBDModelAndFEMModel ( unsigned int RBDloc, unsigned int FEMloc );
00791 #endif
00792 
00793 //=============================================================================
00794 }; // END CLASS AdvSimSupport_DS
00795 //=============================================================================
00796 END_NAMESPACE_TAPs
00797 //-----------------------------------------------------------------------------
00798 // Include definition if TAPs_USE_EXPORT is not defined
00799 //#if !defined( TAPs_USE_EXPORT )
00800     #include "TAPsAdvSimSupport_DS.cpp"
00801 //#endif
00802 //-----------------------------------------------------------------------------
00803 #endif//TAPs_ADV_SIM_SUPPORT_HPP_DS
00804 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00805 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines