![]() |
TAPs 0.7.7.3
|
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----+----