TAPs 0.7.7.3
TAPsAdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle.hpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsAdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle.hpp
00003 ******************************************************************************/
00007 /******************************************************************************
00008 SUKITTI PUNAK   (09/29/2010)
00009 UPDATE          (01/07/2011)
00010 ******************************************************************************/
00011 #ifndef TAPs_ADV_SIM_CONSTRAINT_FOR_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00012 #define TAPs_ADV_SIM_CONSTRAINT_FOR_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP
00013 
00014 //#include <TAPs/CD/TAPsBVHTree.hpp>
00015 #include <TAPs/Support/AdvSimCtrl/AdvSimConstraints/TAPsAdvSimConstraint_VertexIdVsHEVertex.hpp>
00016 
00017 BEGIN_NAMESPACE_TAPs
00018 //=============================================================================
00019 template <typename T, typename DATA = unsigned char>
00020 class AdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle {
00021 //=============================================================================
00022 public:
00023 
00024     typedef std::vector< AdvSimConstraint_VertexIdVsHEVertex<T> >   SetOfInteractions;
00025 
00026     /*
00027     class PunctureInOutList {
00028     public:
00029         std::vector< unsigned int > listOfPunctureInPtIDsOnCirclePath;
00030         std::vector< unsigned int > listOfPunctureOutPtIDsOnCirclePath;
00031         std::vector< HEVertex<T> * > listOfPunctureInHEVertices;
00032         std::vector< HEVertex<T> * > listOfPunctureOutHEVertices;
00033     };
00034     //*/
00035 
00036     // Member Functions -------------------------------------------------------
00038     friend std::ostream & operator<< ( std::ostream &output, AdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle<T,DATA> const &obj )
00039     {
00040         output << obj.StrInfo();
00041         return output;
00042     }
00043 
00044     //-------------------------------------------------------------------------
00046     AdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle (
00047         unsigned int size_IPs = 0,  // number of interactive points (IPs) on the head needle
00048         unsigned int size_Intp = 0, // number of interpolated points on the head needle's circle path
00049         unsigned int RBDlocAsSutureHeadNeedle = 0,
00050         unsigned int ERlocAsSutureThread = 0
00051     );
00052 
00054     virtual ~AdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle ();
00055     //-------------------------------------------------------------------------
00057     virtual std::string StrInfo () const;
00058     //-------------------------------------------------------------------------
00059 
00060     //-------------------------------------------------------------------------
00061     // Get/Set Functions
00062 
00064     unsigned int GetSutureHeadNeedleID () const { return m_RBDModelAsSutureHeadNeedle; }
00066     unsigned int GetSutureThreadID () const { return m_ERModelAsSutureThread; }
00067 
00069     void GetStartAndEndOfSection ( unsigned int i, unsigned int &start, unsigned int &end ) const
00070     {
00071         assert( 0 < i && i < 6 );
00072         start = m_Sections[i-1];
00073         end   = m_Sections[i];
00074     }
00075 
00077     SetOfInteractions const & RefToSetOfInteractions_ForIPG () const    { return m_SetOfInteractions_ForIPG; }
00079     SetOfInteractions & RefToSetOfInteractions_ForIPG () { return m_SetOfInteractions_ForIPG; }
00080 
00082     SetOfInteractions const & RefToSetOfInteractions_ForCirclePath () const { return m_SetOfInteractions_ForCirclePath; }
00084     SetOfInteractions & RefToSetOfInteractions_ForCirclePath () { return m_SetOfInteractions_ForCirclePath; }
00085 
00087     std::vector<bool> const & RefToSetOfInteractionAssociatedModelID () const   { return m_SetOfInteractionAssociatedModelID; }
00089     std::vector<bool> & RefToSetOfInteractionAssociatedModelID () { return m_SetOfInteractionAssociatedModelID; }
00090 
00091     //-------------------------------------------------------------------------
00092     // Functions for Advanced Simulation
00093 
00094     //=========================================================================
00095     // FOR BOTH IPG & CIRCLE PATH
00096     //-------------------------------------------------------------------------
00098     inline void ResetPunctureController ();
00099 
00101     inline std::string  GetPunctureControllerCurrentInfo ();
00102     //-------------------------------------------------------------------------
00103     // FOR BOTH IPG & CIRCLE PATH
00104     //=========================================================================
00105 
00106 
00107     //=========================================================================
00108     // FOR IPG
00109     //-------------------------------------------------------------------------
00111     inline void EnforceAllConstraints_ForIPG (
00112         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00113         std::vector< ModelElasticRod<T> * > &           ListOfModelsBasedOnER,  
00114         std::vector< ModelDefBasedOnFEM<T,DATA> * > &   ListOfModelsBasedOnFEM, 
00115         std::vector< RigidBodyDynamics<T> * > &         ListOfModelsBasedOnRBD, 
00116         typename AdvSimSupport_DATA<T,DATA>::ListOfPointForces & ListOfPointForces  
00117     );
00119     inline void ClearAllConstraints_ForIPG ();
00121     inline void EnforceAllConsistentPositions_ForIPG (
00122         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00123         std::vector< ModelElasticRod<T> * > &           ListOfModelsBasedOnER,  
00124         std::vector< ModelDefBasedOnFEM<T,DATA> * > &   ListOfModelsBasedOnFEM, 
00125         std::vector< RigidBodyDynamics<T> * > &         ListOfModelsBasedOnRBD  
00126     );
00127     //-------------------------------------------------------------------------
00128     // FOR IPG
00129     //=========================================================================
00130 
00131 
00132     //=========================================================================
00133     // FOR CIRCLE PATH
00134     //-------------------------------------------------------------------------
00136     inline void EnforceAllConstraints_ForCirclePath (
00137         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00138         std::vector< ModelElasticRod<T> * > &           ListOfModelsBasedOnER,  
00139         std::vector< ModelDefBasedOnFEM<T,DATA> * > &   ListOfModelsBasedOnFEM, 
00140         std::vector< RigidBodyDynamics<T> * > &         ListOfModelsBasedOnRBD, 
00141         typename AdvSimSupport_DATA<T,DATA>::ListOfPointForces & ListOfPointForces  
00142     );
00144     inline void ClearAllConstraints_ForCirclePath ();
00146     inline void EnforceAllConsistentPositions_ForCirclePath (
00147         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00148         std::vector< ModelElasticRod<T> * > &           ListOfModelsBasedOnER,  
00149         std::vector< ModelDefBasedOnFEM<T,DATA> * > &   ListOfModelsBasedOnFEM, 
00150         std::vector< RigidBodyDynamics<T> * > &         ListOfModelsBasedOnRBD  
00151     );
00152     //-------------------------------------------------------------------------
00153     // FOR CIRCLE PATH
00154     //=========================================================================
00155 
00156 
00157     //=========================================================================
00158     // Process specific interactions
00159     //-------------------------------------------------------------------------
00182     HEVertex<T> * ProcessPuncturingOfHeadNeedleRepresentedByIPGWithFEMModel (
00183         unsigned int FEMModel,  
00184         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00185         typename AdvSimSupport_DATA<T,DATA>::ModelLists &   ListOfModelObjects, 
00186         //std::vector< ModelElasticRod<T> * > &         ListOfModelsBasedOnER,  //!< list of suture models based on elastic rod (belongs to ER-based model group)
00187         //std::vector< ModelDefBasedOnFEM<T,DATA> * > & ListOfModelsBasedOnFEM, //!< list of deformable models based on FEM (belongs to FEM-based model group)
00188         //std::vector< RigidBodyDynamics<T> * > &           ListOfModelsBasedOnRBD, //!< list of models based on rigid body dynamics (belongs to IPG-based model group)
00189         typename AdvSimSupport_DATA<T,DATA>::ListOfInteractions_ERModelVsHEModel & ListOf_ERModelVsHEModelInteractions, 
00190         bool & bPunctureIn,     
00191         bool & bPunctureOut,    
00192         bool & bAborted         
00193     );
00194     //-------------------------------------------------------------------------
00195     // Process specific interactions
00196     //=========================================================================
00197 
00198     //=========================================================================
00199     // Process specific interactions
00200     //-------------------------------------------------------------------------
00214     HEVertex<T> * ProcessPuncturingOfHeadNeedleUsingCirclePathWithFEMModel (
00215         typename ModelSurgicalSutureWithHeadNeedle<T>::CirclePath & CirclePathCtrl, 
00216         unsigned int FEMModel,  
00217         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00218         typename AdvSimSupport_DATA<T,DATA>::ModelLists &   ListOfModelObjects, 
00219         typename AdvSimSupport_DATA<T,DATA>::ListOfInteractions_ERModelVsHEModel & ListOf_ERModelVsHEModelInteractions, 
00220         bool & bPunctureIn,     
00221         bool & bPunctureOut,    
00222         bool & bAborted,        
00223         bool & bSuccess         
00224     );
00225     HEVertex<T> * ProcessPuncturingOfHeadNeedleUsingCirclePathWithFEMModel_MoreAccuButUnfinishYet (
00226         typename ModelSurgicalSutureWithHeadNeedle<T>::CirclePath & CirclePathCtrl, 
00227         unsigned int FEMModel,  
00228         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00229         typename AdvSimSupport_DATA<T,DATA>::ModelLists &   ListOfModelObjects, 
00230         //std::vector< ModelElasticRod<T> * > &         ListOfModelsBasedOnER,  //!< list of suture models based on elastic rod (belongs to ER-based model group)
00231         //std::vector< ModelDefBasedOnFEM<T,DATA> * > & ListOfModelsBasedOnFEM, //!< list of deformable models based on FEM (belongs to FEM-based model group)
00232         //std::vector< RigidBodyDynamics<T> * > &           ListOfModelsBasedOnRBD, //!< list of models based on rigid body dynamics (belongs to IPG-based model group)
00233         typename AdvSimSupport_DATA<T,DATA>::ListOfInteractions_ERModelVsHEModel & ListOf_ERModelVsHEModelInteractions, 
00234         bool & bPunctureIn,     
00235         bool & bPunctureOut,    
00236         bool & bAborted         
00237     );
00238 
00239     // DEBUG
00241     unsigned int GetNumOfLockedCirclePath () const  { return m_uiNumOfLockedCirclePaths; }
00242 
00243     //-------------------------------------------------------------------------
00244     // Process specific interactions
00245     //=========================================================================
00246 
00247     // Data Members -----------------------------------------------------------
00248 //=============================================================================
00249 protected:
00250     // Data Members -----------------------------------------------------------
00251 
00252     //
00253     // For both the head needle's IPG and circle path
00254     //
00255     class PunctureController {
00256     public:
00257         PunctureController() { Reset(); }
00258         void Reset ()
00259         {
00260             PunctureInAngleThreshold        = 55 + 35;
00261             PunctureOutAngleThreshold       = 85 + 90;
00262             WaitForTransfer = true;
00263 
00264             NumOfPunctureInPointsAllowed    = 2;
00265             NumOfPunctureOutPointsAllowed   = 2;
00266             NumOfPunctureInPointsCreated    = 0;
00267             NumOfPunctureOutPointsCreated   = 0;
00268 
00269             StrInfo = "";
00270         }
00271 
00272         bool ReachNumOfPunctureInPointsLimit () const   { return NumOfPunctureInPointsCreated >= NumOfPunctureInPointsAllowed; }
00273         bool ReachNumOfPunctureOutPointsLimit () const  { return NumOfPunctureOutPointsCreated >= NumOfPunctureOutPointsAllowed; }
00274 
00275         void IncreaseNumOfPunctureInPointsCreated ()    { ++NumOfPunctureInPointsCreated; }
00276         void IncreaseNumOfPunctureOutPointsCreated ()   { ++NumOfPunctureOutPointsCreated; }
00277         void ReduceNumOfPunctureInPointsCreated ()      { --NumOfPunctureInPointsCreated; }
00278         void ReduceNumOfPunctureOutPointsCreated ()     { --NumOfPunctureOutPointsCreated; }
00279 
00280     public:
00281         T       PunctureInAngleThreshold;
00282         T       PunctureOutAngleThreshold;
00283         bool    WaitForTransfer;
00284     //private:
00285         int     NumOfPunctureInPointsAllowed;
00286         int     NumOfPunctureOutPointsAllowed;
00287         int     NumOfPunctureInPointsCreated;
00288         int     NumOfPunctureOutPointsCreated;
00289 
00290         std::string StrInfo;
00291     };
00292     PunctureController  m_PunctureController;   
00293 
00294 
00295     //
00296     // For the head needle's IPG
00297     //
00298     unsigned int        m_size_ForIPG;                              
00299     SetOfInteractions   m_SetOfInteractions_ForIPG;                 
00300     std::vector<int>    m_SetOfInteractionAssociatedModelID_ForIPG; 
00301     std::vector< Vector3<T> >   m_PuncturedLocations_ForIPG;    
00302     Vector3<T>          m_SharpPointPrevPos_ForIPG;     
00303 
00304     //
00305     // For the head needle's circle path
00306     //
00307     unsigned int        m_size_ForCirclePath;                               
00308     SetOfInteractions   m_SetOfInteractions_ForCirclePath;                  
00309     std::vector<int>    m_SetOfInteractionAssociatedModelID_ForCirclePath;  
00310     class IData {
00311     public:
00312         IData ( HEVertex<T> * pVertex = NULL ) 
00313             : pHEVertex( pVertex ), bProcessed( false )
00314         {}
00315         HEVertex<T> *   pHEVertex;
00316         bool            bProcessed;
00317 
00318     };
00319     class LockedCirclePath {
00320     public:
00321         LockedCirclePath () : IsLocked( false ), NumOfPointsToBeProcessed( 0 ) {}
00322 
00323         void Clear ()
00324         {
00325             IsLocked = false;
00326             NumOfPointsToBeProcessed = 0;
00327             ListOfFEMMeshPuncturedVerticesInside.clear();
00328             ListOfFEMMeshSurfaceVertexPuncturedIn.clear();
00329             ListOfFEMMeshSurfaceVertexPuncturedOut.clear();
00330             ListOfFEMModelBasedOnPuncturedPair.clear();
00331         }
00332 
00333         bool IsLocked;  
00334         unsigned int NumOfPointsToBeProcessed;  
00335         std::vector< IData >    ListOfFEMMeshPuncturedVerticesInside;   
00336         std::vector< IData >    ListOfFEMMeshSurfaceVertexPuncturedIn;  
00337         std::vector< IData >    ListOfFEMMeshSurfaceVertexPuncturedOut; 
00338         std::vector< unsigned int > ListOfFEMModelBasedOnPuncturedPair; 
00339     };
00340     LockedCirclePath    m_LockedCirclePath; 
00341     unsigned int        m_uiNumOfLockedCirclePaths; 
00342 
00343     typename ModelSurgicalSutureWithHeadNeedle<T>::CirclePath * m_pCirclePathCtrl;  
00344 
00345     //
00346     // Data
00347     //
00348     unsigned int        m_NumberOfSutureHeadNeedlePointsPuncturedIn;    
00349     unsigned int        m_NumberOfSutureThreadPointsPuncturedIn;    
00350     unsigned int        m_RBDModelAsSutureHeadNeedle;   
00351     unsigned int        m_ERModelAsSutureThread;        
00352 
00353     // For suture's thread connected with an FEM-based model
00354     template <typename T>
00355     class InteractionSutureThreadVsFEMModel {
00356     public:
00357         InteractionSutureThreadVsFEMModel (
00358             AdvSimConstraint_VertexIdVsHEVertex<T> *    _ptr = NULL,
00359             unsigned int                                _loc = 0
00360         ) 
00361         : pAdvSimConstraint_VertexIdVsHEVertex( _ptr ), FEMloc( _loc )
00362         {}
00363 
00364         AdvSimConstraint_VertexIdVsHEVertex<T> *    pAdvSimConstraint_VertexIdVsHEVertex;   
00365         unsigned int                                FEMloc; 
00366     };
00367     std::list< InteractionSutureThreadVsFEMModel<T> >   m_ListOfSutureThreadVsFEMModels_ForIPG;         
00368     std::list< InteractionSutureThreadVsFEMModel<T> >   m_ListOfSutureThreadVsFEMModels_ForCirclePath;  
00369 
00370 
00371     // Member Functions -------------------------------------------------------
00372 
00375     int CDCirclePathVsTriangle (
00376         std::vector< Vector3<T> > points,   
00377         unsigned int numOfSegments,         
00378         HEFace<T> const * const pHEFace,    
00379         Matrix4x4<T> const & TrxTriangle    
00380     );
00381 
00383     bool RecordAndLockThePuncturePath (
00384         typename ModelSurgicalSutureWithHeadNeedle<T>::CirclePath & CirclePathCtrl, 
00385         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00386         std::vector< ModelElasticRod<T> * > &           ListOfModelsBasedOnER,  
00387         std::vector< ModelDefBasedOnFEM<T,DATA> * > &   ListOfModelsBasedOnFEM, 
00388         std::vector< RigidBodyDynamics<T> * > &         ListOfModelsBasedOnRBD, 
00389         typename AdvSimSupport_DATA<T,DATA>::ListOfInteractions_ERModelVsHEModel & ListOf_ERModelVsHEModelInteractions, 
00390         bool & bPunctureIn,     
00391         bool & bPunctureOut,    
00392         std::vector< unsigned int > & interpolatedPointIDs,
00393         std::vector< HEFace<T> * >  & triangles,
00394         std::vector< unsigned int > & listOfFEMModelIDs
00395     );
00396 
00398     HEVertex<T> * ProcessLockedPuncturePath (
00399         LockedCirclePath &  TheLockedCirclePath,    
00400         typename ModelSurgicalSutureWithHeadNeedle<T>::CirclePath & CirclePathCtrl, 
00401         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00402         typename AdvSimSupport_DATA<T,DATA>::ModelLists &   ListOfModelObjects, 
00403         typename AdvSimSupport_DATA<T,DATA>::ListOfInteractions_ERModelVsHEModel & ListOf_ERModelVsHEModelInteractions, 
00404         bool & bPunctureIn,     
00405         bool & bPunctureOut,    
00406         bool & bAborted,        
00407         bool & bSuccess         
00408     );
00409 
00410 
00412     bool RecordAndLockThePuncturePath_MoreAccuButUnfinishYet (
00413         typename ModelSurgicalSutureWithHeadNeedle<T>::CirclePath & CirclePathCtrl, 
00414         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00415         std::vector< ModelElasticRod<T> * > &           ListOfModelsBasedOnER,  
00416         std::vector< ModelDefBasedOnFEM<T,DATA> * > &   ListOfModelsBasedOnFEM, 
00417         std::vector< RigidBodyDynamics<T> * > &         ListOfModelsBasedOnRBD, 
00418         typename AdvSimSupport_DATA<T,DATA>::ListOfInteractions_ERModelVsHEModel & ListOf_ERModelVsHEModelInteractions, 
00419         bool & bPunctureIn,     
00420         bool & bPunctureOut,    
00421         std::vector< unsigned int > & interpolatedPointIDs,
00422         std::vector< HEFace<T> * >  & triangles,
00423         std::vector< unsigned int > & listOfFEMModelIDs
00424     );
00425 
00427     HEVertex<T> * ProcessLockedPuncturePath_MoreAccuButUnfinishYet (
00428         LockedCirclePath &  TheLockedCirclePath,    
00429         typename ModelSurgicalSutureWithHeadNeedle<T>::CirclePath & CirclePathCtrl, 
00430         typename AdvSimSupport_DATA<T,DATA>::ModelIDs const &   ListOfModels,   
00431         typename AdvSimSupport_DATA<T,DATA>::ModelLists &   ListOfModelObjects, 
00432         //std::vector< ModelElasticRod<T> * > &         ListOfModelsBasedOnER,  //!< list of suture models based on elastic rod (belongs to ER-based model group)
00433         //std::vector< ModelDefBasedOnFEM<T,DATA> * > & ListOfModelsBasedOnFEM, //!< list of deformable models based on FEM (belongs to FEM-based model group)
00434         //std::vector< RigidBodyDynamics<T> * > &           ListOfModelsBasedOnRBD, //!< list of models based on rigid body dynamics (belongs to IPG-based model group)
00435         typename AdvSimSupport_DATA<T,DATA>::ListOfInteractions_ERModelVsHEModel & ListOf_ERModelVsHEModelInteractions, 
00436         bool & bPunctureIn,     
00437         bool & bPunctureOut,    
00438         bool & bAborted         
00439     );
00440 
00441     //=========================================================================
00442     // FOR IPG
00443     //-------------------------------------------------------------------------
00445     inline virtual void EnforceAConstraintOfSutureHeadNeedleTiedWithFEMModel_ForIPG (
00446         unsigned int constraintNumber,          
00447         Matrix4x4<T> const & HeadNeedleTrx,     
00448         Matrix4x4<T> const & HeadNeedleTrxInv,  
00449         RigidBodyDynamics<T> * pRBDModel,       
00450         ModelDefBasedOnFEM<T,DATA> * pFEMModel, 
00451         typename AdvSimSupport_DATA<T,DATA>::ListOfPointForces & ListOfPointForces  
00452     );
00454     inline virtual void EnforceAConstraintOfSutureThreadTiedWithFEMModel_ForIPG (
00455         AdvSimConstraint_VertexIdVsHEVertex<T> * pConstraint,   
00456         ModelElasticRod<T> * pERModel,          
00457         ModelDefBasedOnFEM<T,DATA> * pFEMModel, 
00458         typename AdvSimSupport_DATA<T,DATA>::ListOfPointForces & ListOfPointForces  
00459     );
00461     inline virtual void EnforceAConsistentPositionSutureThreadTiedWithFEMModel_ForIPG (
00462         AdvSimConstraint_VertexIdVsHEVertex<T> * pConstraint,   
00463         ModelElasticRod<T> * pERModel,          
00464         ModelDefBasedOnFEM<T,DATA> * pFEMModel  
00465     );
00466     //-------------------------------------------------------------------------
00467     // FOR IPG
00468     //=========================================================================
00469 
00470 
00471     //=========================================================================
00472     // FOR CIRCLE PATH
00473     //-------------------------------------------------------------------------
00475     inline virtual void EnforceAConstraintOfSutureHeadNeedleTiedWithFEMModel_ForCirclePath (
00476         unsigned int constraintNumber,          
00477         Matrix4x4<T> const & HeadNeedleTrx,     
00478         Matrix4x4<T> const & HeadNeedleTrxInv,  
00479         RigidBodyDynamics<T> * pRBDModel,       
00480         ModelDefBasedOnFEM<T,DATA> * pFEMModel, 
00481         typename AdvSimSupport_DATA<T,DATA>::ListOfPointForces & ListOfPointForces  
00482     );
00484     inline virtual void EnforceAConstraintOfSutureThreadTiedWithFEMModel_ForCirclePath (
00485         AdvSimConstraint_VertexIdVsHEVertex<T> * pConstraint,   
00486         ModelElasticRod<T> * pERModel,          
00487         ModelDefBasedOnFEM<T,DATA> * pFEMModel, 
00488         typename AdvSimSupport_DATA<T,DATA>::ListOfPointForces & ListOfPointForces  
00489     );
00491     inline virtual void EnforceAConsistentPositionSutureThreadTiedWithFEMModel_ForCirclePath (
00492         AdvSimConstraint_VertexIdVsHEVertex<T> * pConstraint,   
00493         ModelElasticRod<T> * pERModel,          
00494         ModelDefBasedOnFEM<T,DATA> * pFEMModel  
00495     );
00496     //-------------------------------------------------------------------------
00497     // FOR CIRCLE PATH
00498     //=========================================================================
00499 
00500 //=============================================================================
00501 private:
00502     // Member Functions -------------------------------------------------------
00503 
00505     void TransferConstraintsToMainConstraintDS (
00506         std::list< InteractionSutureThreadVsFEMModel<T> > & listOfConstraints,  
00507         typename AdvSimSupport_DATA<T,DATA>::ListOfInteractions_ERModelVsHEModel & ListOf_ERModelVsHEModelInteractions, 
00508         typename AdvSimSupport_DATA<T,DATA>::ModelLists &   ListOfModelObjects, 
00509         unsigned int ERloc  
00510     );
00511 
00512     // Data Members -----------------------------------------------------------
00513 //=============================================================================
00514 
00515 #if defined(__gl_h_) || defined(__GL_H__)
00516 public:
00518     virtual void Draw () const;
00519 #endif
00520 
00521 //=============================================================================
00522 }; // END CLASS AdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle
00523 //=============================================================================
00524 END_NAMESPACE_TAPs
00525 //-----------------------------------------------------------------------------
00527 #include "TAPsAdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle.cpp"
00528 
00530 // Include definition if TAPs_USE_EXPORT is not defined
00531 //#if !defined( TAPs_USE_EXPORT )
00532 //  #include "TAPsAdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle.cpp"
00533 //#endif
00534 //-----------------------------------------------------------------------------
00535 #endif
00536 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00537 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines