![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsAdvSimCtrl.hpp 00003 ******************************************************************************/ 00014 /****************************************************************************** 00015 SUKITTI PUNAK (10/06/2008) 00016 UPDATE (01/05/2011) 00017 ******************************************************************************/ 00018 #ifndef TAPs_ADV_SIM_CTRL_HPP 00019 #define TAPs_ADV_SIM_CTRL_HPP 00020 00021 #include <TAPs/Core/TAPsLib.hpp> 00022 #include <TAPs/DataStructure/TAPsSimulationFlags.hpp> 00023 00024 //#include <TAPs/OpenGLModel/TAPsModelStrand.hpp> 00025 //#include <TAPs/OpenGLModel/TAPsModelSuture.hpp> 00026 //#include <TAPs/OpenGLModel/TAPsDeformMesh.hpp> 00027 //#include <TAPs/Model/TAPsModelElasticRod.hpp> 00028 00029 #include "TAPsAdvSimSupport.hpp" 00030 00031 BEGIN_NAMESPACE_TAPs 00032 //============================================================================= 00033 template <typename T, typename DATA = unsigned char> 00034 class AdvSimCtrl { 00035 //============================================================================= 00036 public://* 00037 // Member Functions ------------------------------------------------------- 00039 //friend std::ostream & operator<< ( std::ostream &output, AdvSimCtrl<T> const &obj ) 00040 //{ 00041 // output << obj.StrInfo(); 00042 // return output; 00043 //} 00044 //------------------------------------------------------------------------- 00046 //virtual std::string StrInfo () const; 00047 //------------------------------------------------------------------------- 00049 AdvSimCtrl (); 00051 ~AdvSimCtrl (); 00052 //------------------------------------------------------------------------- 00054 AdvSimSupport_DS<T> & GetDefaultAdvSimData () { return *m_AdvSimSupport.GetDefaultAdvSimData(); } 00056 AdvSimSupport_DS<T> const & GetAdvSimData () const { return *m_AdvSimSupport.GetAdvSimData(); } 00058 AdvSimSupport_DS<T> & GetAdvSimData () { return *m_AdvSimSupport.GetAdvSimData(); } 00060 void SetAdvSimData ( AdvSimSupport_DS<T> * ptr ) { m_AdvSimSupport.SetAdvSimData( ptr ); } 00061 00063 void EnforceAllConstraints () { GetAdvSimData().EnforceAllConstraints(); } 00064 00066 void ClearAllConstraints () { GetAdvSimData().ClearAllConstraints(); } 00067 00068 //------------------------------------------------------------------------- 00069 00071 //unsigned int GetNumOfSutureModelsBasedOnMSS () { return GetAdvSimData().GetNumOfSutureModelsBasedOnMSS(); } 00073 unsigned int GetNumOfModelsBasedOnER () { return GetAdvSimData().GetNumOfModelsBasedOnER(); } 00075 //unsigned int GetNumOfModelsForSurgeryBasedOnMSS () { return GetAdvSimData().GetNumOfModelsForSurgeryBasedOnMSS(); } 00077 //unsigned int GetNumOfSubModelsForSurgeryBasedOnMSS () { return GetAdvSimData().GetNumOfSubModelsForSurgeryBasedOnMSS(); } 00079 unsigned int GetNumOfModelsBasedOnFEM () { return GetAdvSimData().GetNumOfModelsBasedOnFEM(); } 00080 00082 //std::vector< OpenGL::ModelSuture<T> * > & GetListOfSutureModelsBasedOnMSS () { return GetAdvSimData().GetListOfSutureModelsBasedOnMSS(); } 00084 std::vector< ModelElasticRod<T> * > & GetListOfModelsBasedOnER () { return GetAdvSimData().GetListOfModelsBasedOnER(); } 00086 //std::vector< ModelForSurgery<T> * > & GetListOfModelsForSurgeryBasedOnMSS () { return GetAdvSimData().GetListOfModelsForSurgeryBasedOnMSS(); } 00088 std::vector< ModelDefBasedOnFEM<T,DATA> * > & GetListOfModelsBasedOnFEM () { return GetAdvSimData().GetListOfModelsBasedOnFEM(); } 00089 00090 00091 //========================================================================= 00092 //------------------------------------------------------------------------- 00096 //static int AddModel ( OpenGL::ModelSuture<T> * pModel ) { return GetAdvSimData().AddModel( pModel ); } 00097 00101 int AddModel ( ModelElasticRod<T> * pModel ) { return GetAdvSimData().AddModel( pModel ); } 00102 00106 //static int AddModel ( ModelForSurgery<T> * pModel ) { return GetAdvSimData().AddModel( pModel ); } 00107 00111 int AddModel( ModelDefBasedOnFEM<T,DATA> * pModel ) { return GetAdvSimData().AddModel( pModel ); } 00112 00116 int AddModel( RigidBodyDynamics<T> * pModel ) { return GetAdvSimData().AddModel( pModel ); } 00117 //------------------------------------------------------------------------- 00118 //========================================================================= 00119 00120 00122 // static void RemoveSutureModel ( OpenGL::ModelSuture<T> * pModel ); 00124 // static void RemoveModelForSurgery ( ModelForSurgery<T> * pModel ); 00126 // static void RemoveSutureModel ( ModelElasticRod<T> * pModel ); 00128 // static void RemoveModelForSurgery ( ModelDefBasedOnFEM<T,DATA> * pModel ); 00129 00130 //------------------------------------------------------------------------- 00131 00133 typename AdvSimSupport_DATA<T,DATA>::Constraint_HEModelVsHEModel * AddVertexConnectionHEModelAndHEModel ( 00134 unsigned int modelA, 00135 HEVertex<T> * pVertexA, 00136 enum Enum::AddOn::SimConstraints flagsA, 00137 unsigned int modelB, 00138 HEVertex<T> * pVertexB, 00139 enum Enum::AddOn::SimConstraints flagsB, 00140 T forceRatio = 0.5, 00141 T forceScaleForModelA = 1.0, 00142 T forceScaleForModelB = 1.0, 00143 T forceThresholdForModelA = 1.0, 00144 T forceThresholdForModelB = 1.0, 00145 bool bEnforceVertexOfModelA = true, 00146 bool bEnforceVertexOfModelB = true 00147 ) { return GetAdvSimData().AddVertexConnectionHEModelAndHEModel( modelA, pVertexA, flagsA, modelB, pVertexB, flagsB, forceRatio, forceScaleForModelA, forceScaleForModelB, forceThresholdForModelA, forceThresholdForModelB, bEnforceVertexOfModelA, bEnforceVertexOfModelB ); } 00148 00150 void AddVertexConnectionERModelAndHEModel ( 00151 unsigned int ERModelID, 00152 unsigned int ERModelVertexID, 00153 enum Enum::AddOn::SimConstraints flagsERModel, 00154 unsigned int HEModelID, 00155 HEVertex<T> * pVertexHEModel, 00156 enum Enum::AddOn::SimConstraints flagsHEModel, 00157 T forceRatio = 0.5, 00158 T forceScaleForERModel = 1.0, 00159 T forceScaleForHEModel = 1.0, 00160 T forceThresholdForERModel = 1.0, 00161 T forceThresholdForHEModel = 1.0, 00162 bool bEnforceERModelVertex = true, 00163 bool bEnforceHEModelVertex = true 00164 ) { GetAdvSimData().AddVertexConnectionERModelAndHEModel( ERModelID, ERModelVertexID, flagsERModel, HEModelID, pVertexHEModel, flagsHEModel, forceRatio, forceScaleForERModel, forceScaleForHEModel, forceThresholdForERModel, forceThresholdForHEModel, bEnforceERModelVertex, bEnforceHEModelVertex ); } 00165 00167 void AddVertexConnectionIPGModelAndHEModel ( 00168 unsigned int IPGModelID, 00169 unsigned int IPGModelVertexID, 00170 enum Enum::AddOn::SimConstraints flagsIPGModel, 00171 unsigned int HEModelID, 00172 HEVertex<T> * pVertexHEModel, 00173 enum Enum::AddOn::SimConstraints flagsHEModel, 00174 T forceRatio = 0.5, 00175 T forceScaleForIPGModel = 1.0, 00176 T forceScaleForHEModel = 1.0, 00177 T forceThresholdForIPGModel = 1.0, 00178 T forceThresholdForHEModel = 1.0, 00179 bool bEnforceIPGModelVertex = true, 00180 bool bEnforceHEModelVertex = true 00181 ) { GetAdvSimData().AddVertexConnectionIPGModelAndHEModel( IPGModelID, IPGModelVertexID, flagsIPGModel, HEModelID, pVertexHEModel, flagsHEModel, forceRatio, forceScaleForIPGModel, forceScaleForHEModel, forceThresholdForIPGModel, forceThresholdForHEModel, bEnforceIPGModelVertex, bEnforceHEModelVertex ); } 00182 00183 00184 00185 00187 inline typename AdvSimSupport_DATA<T>::Interaction_ERModelVsHEModel * PtrToInteraction_ERModelVsHEModel ( 00188 unsigned int sutureID, 00189 unsigned int modelID 00190 ); 00192 inline typename AdvSimSupport_DATA<T>::Interaction_HEModelVsHEModel * PtrToInteraction_HEModelVsHEModel ( 00193 unsigned int modelA, 00194 unsigned int modelB 00195 ); 00196 00197 00199 inline typename AdvSimSupport_DATA<T>::InteractionConstants_ERModelVsHEModel * PtrToInteractionConstants_ERModelVsHEModel ( 00200 unsigned int sutureID, 00201 unsigned int modelID 00202 ); 00204 inline typename AdvSimSupport_DATA<T>::InteractionConstants_HEModelVsHEModel * PtrToInteractionConstants_HEModelVsHEModel ( 00205 unsigned int modelA, 00206 unsigned int modelB 00207 ); 00208 00209 00211 inline typename AdvSimSupport_DATA<T>::InteractionConstraints_ERModelVsHEModel * PtrToInteractionConstraints_ERModelVsHEModel ( 00212 unsigned int sutureID, 00213 unsigned int modelID 00214 ); 00216 inline typename AdvSimSupport_DATA<T>::InteractionConstraints_HEModelVsHEModel * PtrToInteractionConstraints_HEModelVsHEModel ( 00217 unsigned int modelA, 00218 unsigned int modelB 00219 ); 00220 00221 00223 inline int GetSizeOfInteractionConstraints_ERModelVsHEModel ( 00224 unsigned int sutureID, 00225 unsigned int modelID 00226 ); 00228 inline int GetSizeOfInteractionConstraints_HEModelVsHEModel ( 00229 unsigned int modelA, 00230 unsigned int modelB 00231 ); 00232 00233 00234 //------------------------------------------------------------------------- 00235 00240 void AdvSimAllModels ( 00241 T timestep, 00242 bool bEnforceAllConstraints = true, 00243 bool bEnforceAllConsistentPositions = true 00244 ) { GetAdvSimData().AdvSimAllModels( timestep, bEnforceAllConstraints, bEnforceAllConsistentPositions ); } 00245 00246 //------------------------------------------------------------------------- 00247 // Data Members ----------------------------------------------------------- 00248 //============================================================================= 00249 protected: 00250 // Member Functions ------------------------------------------------------- 00251 AdvSimSupport<T,DATA> m_AdvSimSupport; 00252 // Data Members ----------------------------------------------------------- 00253 //============================================================================= 00254 private: 00255 // Member Functions ------------------------------------------------------- 00256 // Data Members ----------------------------------------------------------- 00257 //============================================================================= 00258 00259 #if defined(__gl_h_) || defined(__GL_H__) 00260 public: 00262 inline void DrawAllModels () { GetAdvSimData().DrawAllModels(); } 00264 inline void DrawAddedInteractions () { GetAdvSimData().DrawAddedInteractions(); } 00265 #endif 00266 //*/ 00267 //============================================================================= 00268 }; // END CLASS AdvSimCtrl 00269 //============================================================================= 00270 END_NAMESPACE_TAPs 00271 //----------------------------------------------------------------------------- 00272 // Include definition if TAPs_USE_EXPORT is not defined 00273 //#if !defined( TAPs_USE_EXPORT ) 00274 #include "TAPsAdvSimCtrl.cpp" 00275 //#endif 00276 //----------------------------------------------------------------------------- 00277 #endif//TAPs_ADV_SIM_SUPPORT_HPP 00278 //34567890123456789012345678901234567890123456789012345678901234567890123456789 00279 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----