![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsAdvSimSupport_DATA.hpp 00003 ******************************************************************************/ 00007 /****************************************************************************** 00008 SUKITTI PUNAK (09/30/2010) 00009 UPDATE (02/28/2011) 00010 ******************************************************************************/ 00011 #ifndef TAPs_ADV_SIM_SUPPORT_DATA_HPP 00012 #define TAPs_ADV_SIM_SUPPORT_DATA_HPP 00013 00014 #include <TAPs/Core/TAPsLib.hpp> 00015 00016 #include "TAPsListOfAdvSimConsts.hpp" 00017 #include "TAPs/GeometricDataStructure/HalfEdge/TAPsHalfEdgeDataStructure.hpp" 00018 00019 //#include "TAPs/Support/TAPsAdvSimConstraint.hpp" 00020 #include "AdvSimConstraints/TAPsAdvSimConstraint_HEVertexVsHEVertex.hpp" 00021 #include "AdvSimConstraints/TAPsAdvSimConstraint_VertexIdVsVertexId.hpp" 00022 #include "AdvSimConstraints/TAPsAdvSimConstraint_VertexIdVsHEVertex.hpp" 00023 00024 //#include <TAPs/OpenGLModel/TAPsModelSuture.hpp> 00025 //#include <TAPs/ModelSpecific/TAPsModelForSurgery.hpp> 00026 #include <TAPs/Model/TAPsModelElasticRod.hpp> 00027 #include <TAPs/Model/TAPsModelDefBasedOnFEMTet.hpp> 00028 #include <TAPs/Model/TAPsModelDefBasedOnFEMHex.hpp> 00029 #include <TAPs/Model/RigidBodies/TAPsRigidBodyDynamics.hpp> 00030 00031 00032 BEGIN_NAMESPACE_TAPs 00033 //============================================================================= 00034 template <typename T, typename DATA = unsigned char> 00035 class AdvSimSupport_DATA { 00036 //============================================================================= 00037 public: 00038 //========================================================================= 00045 class IDForModel { 00046 public: 00047 IDForModel ( Enum::ModelType type, unsigned int slot ) : Type(type), Slot(slot) {} 00048 Enum::ModelType Type; 00049 unsigned int Slot; 00050 }; 00051 00052 typedef std::vector< IDForModel > ModelIDs; 00053 00054 typedef std::list< PointForce<T> * > ListOfPointForces; 00055 00056 // Data for controlling forward and backward movements of an Elastic Rod 00057 class ERNodeProps { 00058 public: 00059 ERNodeProps () : DiffLength(0), IsConstrained(false), MoveStatus(0), GroupID(0) {} 00060 void Reset () { DiffLength=0; IsConstrained=false; MoveStatus=0; GroupID=0; } 00061 T DiffLength; 00062 bool IsConstrained; 00063 unsigned char MoveStatus; 00064 00065 unsigned short GroupID; 00066 }; 00067 00068 typedef std::vector< ERNodeProps > ERNodePropsList; 00069 00070 class ModelLists { 00071 public: 00072 //std::vector< OpenGL::ModelSuture<T> * > m_ListOfSutureModelsBasedOnMSS; //!< list of suture models based on mass-spring system (currently is not added to this simulation) 00073 //std::vector< ModelForSurgery<T> * > m_ListOfModelsForSurgeryBasedOnMSS; //!< list of models for surgery based on mass-spring system (currently is not added to this simulation) 00074 //std::vector< OpenGL::HETriMeshOneModelMultiParts<T> * > m_ListOfHETriMeshOneModelMultiParts; //!< list of sub models for surgery based on mass-spring system (currently is not added to this simulation) 00075 00077 void ResetAllERNodePropsList () 00078 { 00079 for ( unsigned int i = 0; i < AllERNodePropsList.size(); ++i ) { 00080 for ( unsigned int j = 0; j < AllERNodePropsList[i].size(); ++j ) { 00081 AllERNodePropsList[i][j].Reset(); 00082 } 00083 } 00084 } 00085 00086 void ResetERNodePropsListOfERModel ( unsigned int ERloc ) 00087 { 00088 if ( ERloc < AllERNodePropsList.size() ) { 00089 for ( unsigned int j = 0; j < AllERNodePropsList[ERloc].size(); ++j ) { 00090 AllERNodePropsList[ERloc][j].Reset(); 00091 } 00092 } 00093 } 00094 00095 std::vector< ERNodePropsList > AllERNodePropsList; 00096 00097 00098 00099 std::vector< ModelElasticRod<T> * > BasedOnER; 00100 std::vector< ModelDefBasedOnFEM<T,DATA> * > BasedOnFEM; 00101 std::vector< RigidBodyDynamics<T> * > BasedOnRBD; 00102 }; 00103 00104 //------------------------------------------------------------------------- 00105 // (3D-array) list of model-model interaction data 00106 // SEMI-EXCLUSIVE DATA ARRAYS FOR INTERACTION 00107 00108 // 1) ERModel vs HEModel 00109 //=============================================================== 00110 typedef AdvSimConstraint_VertexIdVsHEVertex<T> Constraint_ERModelVsHEModel; 00111 typedef std::vector< Constraint_ERModelVsHEModel * > InteractionConstraints_ERModelVsHEModel; 00112 //--------------------------------------------------------------- 00113 class InteractionConstants_ERModelVsHEModel { 00114 public: 00115 InteractionConstants_ERModelVsHEModel () 00116 : DiffLengthForTriggeringForwardMove( 0.05 ) 00117 , DiffLengthForTriggeringBackwardMove( 0.05 ) 00118 {} 00119 00120 T DiffLengthForTriggeringForwardMove; 00121 T DiffLengthForTriggeringBackwardMove; 00122 }; 00123 class Interaction_ERModelVsHEModel { 00124 public: 00125 Interaction_ERModelVsHEModel ( 00126 InteractionConstants_ERModelVsHEModel & _Constants = InteractionConstants_ERModelVsHEModel(), 00127 InteractionConstraints_ERModelVsHEModel & _Constraints= InteractionConstraints_ERModelVsHEModel() 00128 ) : Constants( _Constants ), Constraints( _Constraints ) 00129 {} 00130 00131 InteractionConstants_ERModelVsHEModel Constants; 00132 InteractionConstraints_ERModelVsHEModel Constraints; 00133 }; 00134 typedef std::vector< std::vector< Interaction_ERModelVsHEModel > > ListOfInteractions_ERModelVsHEModel; 00135 //--------------------------------------------------------------- 00136 00137 // 2) ERModel vs IPGModel 00138 //=============================================================== 00139 typedef AdvSimConstraint_VertexIdVsVertexId<T> Constraint_ERModelVsIPGModel; 00140 typedef std::vector< Constraint_ERModelVsIPGModel * > InteractionConstraints_ERModelVsIPGModel; 00141 //--------------------------------------------------------------- 00142 class InteractionConstants_ERModelVsIPGModel { 00143 public: 00144 InteractionConstants_ERModelVsIPGModel () {} 00145 }; 00146 class Interaction_ERModelVsIPGModel { 00147 public: 00148 Interaction_ERModelVsIPGModel ( 00149 InteractionConstants_ERModelVsIPGModel & _Constants = InteractionConstants_ERModelVsIPGModel(), 00150 InteractionConstraints_ERModelVsIPGModel & _Constraints= InteractionConstraints_ERModelVsIPGModel() 00151 ) : Constants( _Constants ), Constraints( _Constraints ) 00152 {} 00153 00154 InteractionConstants_ERModelVsIPGModel Constants; 00155 InteractionConstraints_ERModelVsIPGModel Constraints; 00156 }; 00157 typedef std::vector< std::vector< Interaction_ERModelVsIPGModel > > ListOfInteractions_ERModelVsIPGModel; 00158 //--------------------------------------------------------------- 00159 00160 // 3) IPGModel vs HEModel 00161 //=============================================================== 00162 typedef AdvSimConstraint_VertexIdVsHEVertex<T> Constraint_IPGModelVsHEModel; 00163 typedef std::vector< Constraint_IPGModelVsHEModel * > InteractionConstraints_IPGModelVsHEModel; 00164 //--------------------------------------------------------------- 00165 class InteractionConstants_IPGModelVsHEModel { 00166 public: 00167 InteractionConstants_IPGModelVsHEModel () {} 00168 }; 00169 class Interaction_IPGModelVsHEModel { 00170 public: 00171 Interaction_IPGModelVsHEModel ( 00172 InteractionConstants_IPGModelVsHEModel & _Constants = InteractionConstants_IPGModelVsHEModel(), 00173 InteractionConstraints_IPGModelVsHEModel & _Constraints= InteractionConstraints_IPGModelVsHEModel() 00174 ) : Constants( _Constants ), Constraints( _Constraints ) 00175 {} 00176 00177 InteractionConstants_IPGModelVsHEModel Constants; 00178 InteractionConstraints_IPGModelVsHEModel Constraints; 00179 }; 00180 typedef std::vector< std::vector< Interaction_IPGModelVsHEModel > > ListOfInteractions_IPGModelVsHEModel; 00181 //--------------------------------------------------------------- 00182 00183 // 4) ERModel vs ERModel 00184 //=============================================================== 00185 typedef AdvSimConstraint_VertexIdVsVertexId<T> Constraint_ERModelVsERModel; 00186 typedef std::vector< Constraint_ERModelVsERModel * > InteractionConstraints_ERModelVsERModel; 00187 //--------------------------------------------------------------- 00188 class InteractionConstants_ERModelVsERModel { 00189 public: 00190 InteractionConstants_ERModelVsERModel () {} 00191 }; 00192 class Interaction_ERModelVsERModel { 00193 public: 00194 Interaction_ERModelVsERModel ( 00195 InteractionConstants_ERModelVsERModel & _Constants = InteractionConstants_ERModelVsERModel(), 00196 InteractionConstraints_ERModelVsERModel & _Constraints= InteractionConstraints_ERModelVsERModel() 00197 ) : Constants( _Constants ), Constraints( _Constraints ) 00198 {} 00199 00200 InteractionConstants_ERModelVsERModel Constants; 00201 InteractionConstraints_ERModelVsERModel Constraints; 00202 }; 00203 typedef std::vector< std::vector< Interaction_ERModelVsERModel > > ListOfInteractions_ERModelVsERModel; 00204 //--------------------------------------------------------------- 00205 00206 // 5) HEModel vs HEModel 00207 //=============================================================== 00208 typedef AdvSimConstraint_HEVertexVsHEVertex<T> Constraint_HEModelVsHEModel; 00209 typedef std::vector< Constraint_HEModelVsHEModel * > InteractionConstraints_HEModelVsHEModel; 00210 //--------------------------------------------------------------- 00211 class InteractionConstants_HEModelVsHEModel { 00212 public: 00213 InteractionConstants_HEModelVsHEModel () {} 00214 }; 00215 class Interaction_HEModelVsHEModel { 00216 public: 00217 Interaction_HEModelVsHEModel ( 00218 InteractionConstants_HEModelVsHEModel & _Constants = InteractionConstants_HEModelVsHEModel(), 00219 InteractionConstraints_HEModelVsHEModel & _Constraints= InteractionConstraints_HEModelVsHEModel() 00220 ) : Constants( _Constants ), Constraints( _Constraints ) 00221 {} 00222 00223 InteractionConstants_HEModelVsHEModel Constants; 00224 InteractionConstraints_HEModelVsHEModel Constraints; 00225 }; 00226 typedef std::vector< std::vector< Interaction_HEModelVsHEModel > > ListOfInteractions_HEModelVsHEModel; 00227 //--------------------------------------------------------------- 00228 00229 // 6) IPGModel vs IPGModel 00230 //=============================================================== 00231 typedef AdvSimConstraint_VertexIdVsVertexId<T> Constraint_IPGModelVsIPGModel; 00232 typedef std::vector< Constraint_IPGModelVsIPGModel * > InteractionConstraints_IPGModelVsIPGModel; 00233 //--------------------------------------------------------------- 00234 class InteractionConstants_IPGModelVsIPGModel { 00235 public: 00236 InteractionConstants_IPGModelVsIPGModel () {} 00237 }; 00238 class Interaction_IPGModelVsIPGModel { 00239 public: 00240 Interaction_IPGModelVsIPGModel ( 00241 InteractionConstants_IPGModelVsIPGModel & _Constants = InteractionConstants_IPGModelVsIPGModel(), 00242 InteractionConstraints_IPGModelVsIPGModel & _Constraints= InteractionConstraints_IPGModelVsIPGModel(); 00243 ) : Constants( _Constants ), Constraints( _Constraints ) 00244 {} 00245 00246 InteractionConstants_IPGModelVsIPGModel Constants; 00247 InteractionConstraints_IPGModelVsIPGModel Constraints; 00248 }; 00249 typedef std::vector< std::vector< Interaction_IPGModelVsIPGModel > > ListOfInteractions_IPGModelVsIPGModel; 00250 //--------------------------------------------------------------- 00251 00252 //#ifdef TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP 00253 // typedef std::vector< AdvSimConstraint_ForModelSurgicalSutureWithHeadNeedle<T> * > ListOfInteraction_SwHDModelVsHEModel; 00254 //#endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP 00255 00256 class InteractionLists { 00257 public: 00258 ListOfInteractions_ERModelVsHEModel ERModelVsHEModel; 00259 ListOfInteractions_ERModelVsIPGModel ERModelVsIPGModel; 00260 ListOfInteractions_IPGModelVsHEModel IPGModelVsHEModel; 00261 ListOfInteractions_ERModelVsERModel ERModelVsERModel; 00262 ListOfInteractions_HEModelVsHEModel HEModelVsHEModel; 00263 ListOfInteractions_IPGModelVsIPGModel IPGModelVsIPGModel; 00264 00265 //#ifdef TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP 00266 // ListOfInteraction_SwHDModelVsHEModel SwHDModelVsHEModel; 00267 //#endif//TAPs_MODEL_SURGICAL_SUTURE_WITH_HEAD_NEEDLE_HPP 00268 }; 00269 //========================================================================= 00270 00271 //========================================================================= 00272 // State variables 00273 //------------------------------------------------------------------------- 00274 00275 // Used for interaction control of the suture's head needle for class ModelSurgicalSutureWithHeadNeedle<T> 00276 static bool STATE_EnforcePositionA; 00277 static bool STATE_EnforcePositionB; 00278 static T STATE_ForceRatio; 00279 static T STATE_ForceScaleA; 00280 static T STATE_ForceScaleB; 00281 static T STATE_ForceThresholdA; 00282 static T STATE_ForceThresholdB; 00283 00284 // Used for interaction control of the suture's thread for class ModelSurgicalSutureWithHeadNeedle<T> 00285 static bool STATE_EnforcePositionA_2; 00286 static bool STATE_EnforcePositionB_2; 00287 static T STATE_ForceRatio_2; 00288 static T STATE_ForceScaleA_2; 00289 static T STATE_ForceScaleB_2; 00290 static T STATE_ForceThresholdA_2; 00291 static T STATE_ForceThresholdB_2; 00292 00293 //------------------------------------------------------------------------- 00294 // State variables 00295 //========================================================================= 00296 00297 00298 //========================================================================= 00299 // Temporary data for helping processing interactions 00300 //------------------------------------------------------------------------- 00301 static std::vector< Vector3<T> > TEMP_ListOfPoints; 00302 static std::vector< HEFace<T>* > TEMP_ListOfHEFaces; 00303 static std::vector< HEVertex<T>* > TEMP_ListOfHEVertices; 00304 static std::vector< T > TEMP_ListOfRatios; 00305 static std::vector< T > TEMP_ListOfIntersectionAngles; 00306 //------------------------------------------------------------------------- 00307 // Temporary data for helping processing interactions 00308 //========================================================================= 00309 00310 00311 //============================================================================= 00312 }; // END CLASS AdvSimSupport_DATA 00313 //============================================================================= 00314 00315 00316 //========================================================================= 00317 // State variables 00318 //------------------------------------------------------------------------- 00319 template <typename T, typename DATA> bool AdvSimSupport_DATA<T,DATA>::STATE_EnforcePositionA = false; 00320 template <typename T, typename DATA> bool AdvSimSupport_DATA<T,DATA>::STATE_EnforcePositionB = false; 00321 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceRatio = 0.5; 00322 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceScaleA = 1; 00323 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceScaleB = 1; 00324 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceThresholdA = 1; 00325 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceThresholdB = 1; 00326 00327 template <typename T, typename DATA> bool AdvSimSupport_DATA<T,DATA>::STATE_EnforcePositionA_2 = false; 00328 template <typename T, typename DATA> bool AdvSimSupport_DATA<T,DATA>::STATE_EnforcePositionB_2 = false; 00329 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceRatio_2 = 0.5; 00330 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceScaleA_2 = 1; 00331 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceScaleB_2 = 1; 00332 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceThresholdA_2 = 1; 00333 template <typename T, typename DATA> T AdvSimSupport_DATA<T,DATA>::STATE_ForceThresholdB_2 = 1; 00334 //------------------------------------------------------------------------- 00335 // State variables 00336 //========================================================================= 00337 00338 00339 //========================================================================= 00340 // Static temporary data for helping processing interactions 00341 //------------------------------------------------------------------------- 00342 template <typename T, typename DATA> std::vector< Vector3<T> > AdvSimSupport_DATA<T,DATA>::TEMP_ListOfPoints; 00343 template <typename T, typename DATA> std::vector< HEFace<T>* > AdvSimSupport_DATA<T,DATA>::TEMP_ListOfHEFaces; 00344 template <typename T, typename DATA> std::vector< HEVertex<T>* > AdvSimSupport_DATA<T,DATA>::TEMP_ListOfHEVertices; 00345 template <typename T, typename DATA> std::vector< T > AdvSimSupport_DATA<T,DATA>::TEMP_ListOfRatios; 00346 template <typename T, typename DATA> std::vector< T > AdvSimSupport_DATA<T,DATA>::TEMP_ListOfIntersectionAngles; 00347 //------------------------------------------------------------------------- 00348 // Static temporary data for helping processing interactions 00349 //========================================================================= 00350 00351 00352 END_NAMESPACE_TAPs 00353 //----------------------------------------------------------------------------- 00354 // Include definition if TAPs_USE_EXPORT is not defined 00355 //#if !defined( TAPs_USE_EXPORT ) 00356 // #include "TAPsAdvSimSupport_DATA.cpp" 00357 //#endif 00358 //----------------------------------------------------------------------------- 00359 #endif//TAPs_ADV_SIM_SUPPORT_HPP_DS 00360 //34567890123456789012345678901234567890123456789012345678901234567890123456789 00361 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----