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