00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __GAS_Wavelets__
00020 #define __GAS_Wavelets__
00021
00022 #include "GAS_API.h"
00023
00024 #include "GAS_SubSolver.h"
00025 #include "GAS_Utils.h"
00026
00027 #include <UT/UT_ThreadedAlgorithm.h>
00028 #include <UT/UT_Wavelet.h>
00029
00030 class SIM_RawField;
00031
00032 class GAS_API GAS_Wavelets : public GAS_SubSolver
00033 {
00034 public:
00035 GET_DATA_FUNC_S(GAS_NAME_FIELDSOURCE, FieldName);
00036 GET_DATA_FUNC_S(GAS_NAME_FIELDDEST, OutputName);
00037 GET_DATA_FUNC_I("mode", Mode);
00038 GET_DATA_FUNC_I("wavelet", WaveletRaw);
00039 GET_DATA_FUNC_I("level", Level);
00040 GET_DATA_FUNC_I("component", Component);
00041 GET_DATA_FUNC_B("limitpasses", LimitPasses);
00042 GET_DATA_FUNC_I("maxpasses", MaxPasses);
00043
00044 enum MODE_NAMES {
00045 MODE_TRANSFORM,
00046 MODE_INVERT,
00047 MODE_PSD,
00048 MODE_COMPONENT,
00049 NUM_MODES
00050 };
00051
00052 bool shouldMultiThread() { return true; }
00053
00054 protected:
00055 explicit GAS_Wavelets(const SIM_DataFactory *factory);
00056 virtual ~GAS_Wavelets();
00057
00058
00059
00060 virtual bool solveGasSubclass(SIM_Engine &engine,
00061 SIM_Object *obj,
00062 SIM_Time time,
00063 SIM_Time timestep);
00064 void applyWavelets(SIM_Object *obj,
00065 SIM_RawField *field,
00066 SIM_RawField *coeff);
00067
00068 UT_Wavelet::WAVELET_NAMES getWaveletType();
00069
00070 private:
00071 static const SIM_DopDescription *getDopDescription();
00072
00073 DECLARE_STANDARD_GETCASTTOTYPE();
00074 DECLARE_DATAFACTORY(GAS_Wavelets,
00075 GAS_SubSolver,
00076 "Gas Wavelets",
00077 getDopDescription());
00078 };
00079
00080 #endif
00081