TAPs 0.7.7.3
TAPsWXElasticRodParameters.hpp
Go to the documentation of this file.
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----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines