![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsWXElasticRodParameters.hpp 00003 ******************************************************************************/ 00007 /****************************************************************************** 00008 SUKITTI PUNAK (08/18/2009) 00009 UPDATE (08/12/2010) 00010 ******************************************************************************/ 00011 #ifndef TAPs_WX_ELASTIC_ROD_PARAMETERS_HPP 00012 #define TAPs_WX_ELASTIC_ROD_PARAMETERS_HPP 00013 00014 #include "wx/wx.h" 00015 #include "wx/image.h" 00016 #include "wx/xrc/xmlres.h" 00017 #include "wx/msgdlg.h" 00018 00019 // the application icon 00020 #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) 00021 #include "rc/appicon.xpm" 00022 #endif 00023 00024 #include "../../IO/TAPsTextFile.hpp" 00025 00026 BEGIN_NAMESPACE_TAPs__WX 00027 //============================================================================= 00028 class WXElasticRodParameters : public wxDialog { 00029 //============================================================================= 00030 public: 00031 // Member Functions ------------------------------------------------------- 00032 //------------------------------------------------------------------------- 00033 00035 WXElasticRodParameters (); 00036 00038 ~WXElasticRodParameters (); 00039 00041 bool IsInitialized () const { return g_isInitialized; } 00042 00044 //bool IsLoaded () const { return m_isLoaded; } 00045 00047 template <typename T> 00048 void PropertyDialog ( 00049 wxWindow * parent, 00050 ElasticRodParameters<T> * parameters, 00051 std::vector< ElasticRodNode<T> > * nodeList 00052 #ifdef TAPs_USE_CUDA 00053 , bool bUseCUDA_PLHM 00054 #endif//TAPs_USE_CUDA 00055 ); 00056 00057 // Data Members ----------------------------------------------------------- 00058 //============================================================================= 00059 protected: 00060 // Member Functions ------------------------------------------------------- 00061 00063 void OnEnteringPhysicallyBasedParameters ( wxCommandEvent & event ); 00065 void OnChangingPhysicallyBasedParameters ( wxCommandEvent & event ); 00067 template <typename T> void WritePhysicallyBasedParameters ( wxCommandEvent & event ); 00068 00070 void OnEnteringSimulationParameters ( wxCommandEvent & event ); 00072 void OnChangingSimulationParameters ( wxCommandEvent & event ); 00074 template <typename T> void WriteSimulationParameters ( wxCommandEvent & event ); 00075 00077 void OnChangingRenderingParameters ( wxCommandEvent & event ); 00079 template <typename T> void WriteRenderingParameters ( wxCommandEvent & event ); 00080 00082 void OnLoadParameters ( wxCommandEvent & event ); 00083 00085 void OnSaveParameters ( wxCommandEvent & event ); 00086 00088 template <typename T> void ShowParametersValuesInGUI ( ElasticRodParameters<T> & par ); 00089 00091 void InitControlLooks (); 00092 00094 void InitListOfPresetAndUserset (); 00095 00097 template <typename T> void LoadListOfParameterSetsFromFile ( std::vector< ElasticRodParameters<T> > & par ); 00098 00100 template <typename T> void ApplyParameters ( ElasticRodParameters<T> & parSet ); 00101 00103 template <typename T> void SaveParameters ( std::vector< ElasticRodParameters<T> > & userSets ); 00104 00106 template <typename T> void SetParametersFromGUI ( ElasticRodParameters<T> & par ); 00107 00109 template <typename T> void SetAllRestLengths (); 00110 00112 template <typename T> void SetAllMassPoints (); 00113 00115 template <typename T> void DisplayERInfo ( ElasticRodParameters<T> & par ); 00116 00117 // Data Members ----------------------------------------------------------- 00118 00119 // Elastic Rod Parameters 00120 static type_info const * g_pDataTypeInfo; 00121 void * m_pERParameters; 00122 void * m_pERNodeList; 00123 00124 // For initialization 00125 bool m_isLoaded; 00126 static bool g_isInitialized; 00127 00128 // For load/save preset and user set parameters 00129 wxArrayString m_PresetsInComboBox; 00130 wxArrayString m_UsersetsInComboBox; 00131 static TextFile g_PresetFile; 00132 static TextFile g_UsersetFile; 00133 static std::vector< ElasticRodParameters<float> > g_vfPresets; 00134 static std::vector< ElasticRodParameters<float> > g_vfUsersets; 00135 static std::vector< ElasticRodParameters<double> > g_vdPresets; 00136 static std::vector< ElasticRodParameters<double> > g_vdUsersets; 00137 00138 // wxWidgets styles 00139 static wxColour color_textEdit; 00140 static wxColour color_textNormal; 00141 static wxColour color_textWarning; 00142 //============================================================================= 00143 private: 00144 // Member Functions ------------------------------------------------------- 00145 00148 void SetIDs (); 00149 00151 template <typename T> 00152 void ShowSuggestedMassAndMaterialDensity ( ElasticRodParameters<T> & par ); 00153 00154 // Data Members ----------------------------------------------------------- 00155 00156 bool m_bAllIDsWorking; 00157 00159 enum { 00160 BEGIN_NUMBER = 1000, 00161 00162 // For physically based parameters 00163 ID_WXElasticRod_Length, 00164 ID_WXElasticRod_Mass, 00165 ID_WXElasticRod_Radius, 00166 ID_WXElasticRod_NumOfLinks, 00167 ID_WXElasticRod_StretchModulus, 00168 ID_WXElasticRod_BendModulus, 00169 ID_WXElasticRod_ShearModulus, 00170 ID_WXElasticRod_MaterialDensity, 00171 ID_WXElasticRod_KineticTranslational, 00172 ID_WXElasticRod_KineticRotational_0, 00173 ID_WXElasticRod_KineticRotational_1, 00174 ID_WXElasticRod_KineticRotational_2, 00175 ID_WXElasticRod_DissipationTranslational, 00176 ID_WXElasticRod_DissipationRotational_0, 00177 ID_WXElasticRod_DissipationRotational_1, 00178 ID_WXElasticRod_DissipationRotational_2, 00179 ID_WXElasticRod_Constraint_3rdDirAlignCenterline, 00180 ID_WXElasticRod_Constraint_ScaleIntrinsicStrainRate, 00181 ID_WXElasticRod_GravitationalConstant_slider, 00182 ID_WXElasticRod_DampingVelocity, 00183 00184 // For simulation 00185 ID_WXElasticRod_EnableSelfCDR, 00186 ID_WXElasticRod_KselfCDR, 00187 ID_WXElasticRod_KselfCDR_Offset, 00188 #ifdef TAPs_ADD_KNOT_RECOGNITION 00189 ID_WXElasticRod_EnableKR, 00190 ID_WXElasticRod_EnableKR_LockKnots, 00191 #endif//TAPs_ADD_KNOT_RECOGNITION 00192 #ifdef TAPs_USE_CUDA 00193 ID_WXElasticRod_UseCUDA_PLHM, // CUDA's Page-Locked Host Memory 00194 ID_WXElasticRod_EnableCUDA, 00195 ID_WXElasticRod_EnableCUDA_GenDrawData, 00196 #endif//TAPs_USE_CUDA 00197 ID_WXElasticRod_Sim_TimeStep, 00198 ID_WXElasticRod_CDRwBV_Cylinder_K, 00199 ID_WXElasticRod_CDRwBV_Sphere_K, 00200 ID_WXElasticRod_CDRwTriangle_K, 00201 ID_WXElasticRod_CDRwBV_Cylinder_O, 00202 ID_WXElasticRod_CDRwBV_Sphere_O, 00203 ID_WXElasticRod_CDRwTriangle_O, 00204 00205 // For rendering 00206 ID_WXElasticRod_Render_NumOfVerticesPerCrossSection_slider, 00207 00208 // For load/save preset and user set 00209 //ID_WXElasticRod_CurrentlyLoad, 00210 ID_WXElasticRod_Load_Preset, 00211 ID_WXElasticRod_Load_Userset, 00212 ID_WXElasticRod_Save_Userset_Btn, 00213 ID_WXElasticRod_Save_Userset_Name, 00214 ID_WXElasticRod_Current_Load_Parameter_Set, 00215 ID_WXElasticRod_Display_Information, 00216 00217 // For CDR with implicit objects 00218 #ifdef TAPs_ADD_IMPLICIT_OBJECTS 00219 ID_WXElasticRod_CDRwImpObj_Sphere_K, 00220 ID_WXElasticRod_CDRwImpObj_Sphere_O, 00221 ID_WXElasticRod_CDRwImpObj_Torus_K, 00222 ID_WXElasticRod_CDRwImpObj_Torus_O, 00223 #endif//TAPs_ADD_IMPLICIT_OBJECTS 00224 00225 DUMMY 00226 }; 00227 00228 // Pointers to the controls 00229 //--------------------------------------------------------------- 00230 // For physically based parameters 00231 wxTextCtrl * m_pID_WXElasticRod_Length; 00232 wxTextCtrl * m_pID_WXElasticRod_Mass; 00233 wxTextCtrl * m_pID_WXElasticRod_Radius; 00234 wxTextCtrl * m_pID_WXElasticRod_NumOfLinks; 00235 wxTextCtrl * m_pID_WXElasticRod_StretchModulus; 00236 wxTextCtrl * m_pID_WXElasticRod_BendModulus; 00237 wxTextCtrl * m_pID_WXElasticRod_ShearModulus; 00238 wxTextCtrl * m_pID_WXElasticRod_MaterialDensity; 00239 wxTextCtrl * m_pID_WXElasticRod_KineticTranslational; 00240 wxTextCtrl * m_pID_WXElasticRod_KineticRotational_0; 00241 wxTextCtrl * m_pID_WXElasticRod_KineticRotational_1; 00242 wxTextCtrl * m_pID_WXElasticRod_KineticRotational_2; 00243 wxTextCtrl * m_pID_WXElasticRod_DissipationTranslational; 00244 wxTextCtrl * m_pID_WXElasticRod_DissipationRotational_0; 00245 wxTextCtrl * m_pID_WXElasticRod_DissipationRotational_1; 00246 wxTextCtrl * m_pID_WXElasticRod_DissipationRotational_2; 00247 wxTextCtrl * m_pID_WXElasticRod_Constraint_3rdDirAlignCenterline; 00248 wxTextCtrl * m_pID_WXElasticRod_Constraint_ScaleIntrinsicStrainRate; 00249 wxSlider * m_pID_WXElasticRod_GravitationalConstant_slider; 00250 wxTextCtrl * m_pID_WXElasticRod_DampingVelocity; 00251 00252 // For simulation 00253 wxCheckBox * m_pID_WXElasticRod_EnableSelfCDR; 00254 wxTextCtrl * m_pID_WXElasticRod_KselfCDR; 00255 wxTextCtrl * m_pID_WXElasticRod_KselfCDR_Offset; 00256 #ifdef TAPs_ADD_KNOT_RECOGNITION 00257 wxCheckBox * m_pID_WXElasticRod_EnableKR; 00258 wxCheckBox * m_pID_WXElasticRod_EnableKR_LockKnots; 00259 #endif//TAPs_ADD_KNOT_RECOGNITION 00260 #ifdef TAPs_USE_CUDA 00261 bool m_bUseCUDA_PLHM; 00262 wxCheckBox * m_pID_WXElasticRod_UseCUDA_PLHM; 00263 wxCheckBox * m_pID_WXElasticRod_EnableCUDA; 00264 wxCheckBox * m_pID_WXElasticRod_EnableCUDA_GenDrawData; 00265 #endif//TAPs_USE_CUDA 00266 wxTextCtrl * m_pID_WXElasticRod_Sim_TimeStep; 00267 wxTextCtrl * m_pID_WXElasticRod_CDRwBV_Cylinder_K; 00268 wxTextCtrl * m_pID_WXElasticRod_CDRwBV_Sphere_K; 00269 wxTextCtrl * m_pID_WXElasticRod_CDRwTriangle_K; 00270 wxTextCtrl * m_pID_WXElasticRod_CDRwBV_Cylinder_O; 00271 wxTextCtrl * m_pID_WXElasticRod_CDRwBV_Sphere_O; 00272 wxTextCtrl * m_pID_WXElasticRod_CDRwTriangle_O; 00273 00274 // For CDR with implicit objects 00275 #ifdef TAPs_ADD_IMPLICIT_OBJECTS 00276 wxTextCtrl * m_pID_WXElasticRod_CDRwImpObj_Sphere_K; 00277 wxTextCtrl * m_pID_WXElasticRod_CDRwImpObj_Sphere_O; 00278 wxTextCtrl * m_pID_WXElasticRod_CDRwImpObj_Torus_K; 00279 wxTextCtrl * m_pID_WXElasticRod_CDRwImpObj_Torus_O; 00280 #endif//TAPs_ADD_IMPLICIT_OBJECTS 00281 00282 // For rendering 00283 wxSlider * m_pID_WXElasticRod_Render_NumOfVerticesPerCrossSection_slider; 00284 00285 // For load/save preset and user set 00286 //ID_WXElasticRod_CurrentlyLoad, 00287 wxComboBox * m_pID_WXElasticRod_Load_Preset; 00288 wxComboBox * m_pID_WXElasticRod_Load_Userset; 00289 wxButton * m_pID_WXElasticRod_Save_Userset_Btn; 00290 wxTextCtrl * m_pID_WXElasticRod_Save_Userset_Name; 00291 wxTextCtrl * m_pID_WXElasticRod_Current_Load_Parameter_Set; 00292 wxTextCtrl * m_pID_WXElasticRod_Display_Information; 00293 //--------------------------------------------------------------- 00294 00295 DECLARE_CLASS ( WXElasticRodParameters ) 00296 DECLARE_EVENT_TABLE () 00297 00298 //============================================================================= 00299 }; // END CLASS WXElasticRodParameters 00300 //============================================================================= 00301 END_NAMESPACE_TAPs__WX 00302 //----------------------------------------------------------------------------- 00303 #include "TAPsWXElasticRodParameters.cpp" 00304 //----------------------------------------------------------------------------- 00305 #endif 00306 //34567890123456789012345678901234567890123456789012345678901234567890123456789 00307 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----