00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef __SIM_Noise_h__
00016 #define __SIM_Noise_h__
00017
00018 #include "SIM_API.h"
00019 #include "SIM_DataUtils.h"
00020 #include "SIM_OptionsUser.h"
00021 #include "SIM_PhysicalParms.h"
00022
00023 class SIM_NoiseResolver;
00024 class SIM_NoiseResolverGeneric;
00025
00026
00027 class SIM_API SIM_Noise : public SIM_Data,
00028 public SIM_OptionsUser
00029 {
00030 public:
00031 GETSET_DATA_FUNCS_V3(SIM_NAME_MINVALUE, MinValue);
00032 GETSET_DATA_FUNCS_V3(SIM_NAME_MAXVALUE, MaxValue);
00033 GETSET_DATA_FUNCS_B(SIM_NAME_SCALARNOISE, ScalarNoise);
00034
00035
00036
00037 fpreal getNoise(const UT_Vector3 &pos) const;
00038
00039
00040 void getNoise(const UT_Vector3 &pos,
00041 UT_Vector3 &noise) const;
00042
00043
00044
00045 SIM_PropertyResolver *getNoiseResolver() const;
00046
00047 protected:
00048 explicit SIM_Noise(const SIM_DataFactory *factory);
00049 virtual ~SIM_Noise();
00050
00051
00052
00053 void getNoiseLimits(fpreal &min, fpreal &max) const;
00054
00055
00056 virtual void getNoiseLimitsSubclass(fpreal &min,
00057 fpreal &max) const = 0;
00058
00059
00060
00061 virtual fpreal getNoiseSubclass(const UT_Vector3 &pos) const;
00062
00063
00064
00065
00066 virtual void getNoiseSubclass(const UT_Vector3 &pos,
00067 UT_Vector3 &noise) const;
00068
00069
00070 virtual SIM_PropertyResolver *getNoiseResolverSubclass() const;
00071
00072 private:
00073 DECLARE_STANDARD_GETCASTTOTYPE();
00074 DECLARE_CLASSNAME(SIM_Noise, SIM_Data);
00075
00076 friend class SIM_NoiseResolverGeneric;
00077 friend class SIM_NoiseResolver;
00078 };
00079
00080 class SIM_API SIM_NoiseResolver : public SIM_PropertyResolver
00081 {
00082 public:
00083 SIM_NoiseResolver(const SIM_Noise *noise);
00084
00085
00086
00087 virtual fpreal getF(const UT_Vector3 &pos);
00088 virtual UT_Vector3 getV3(const UT_Vector3 &pos);
00089
00090
00091
00092 virtual fpreal getNoiseF(const UT_Vector3 &pos) = 0;
00093 virtual UT_Vector3 getNoiseV3(const UT_Vector3 &pos) = 0;
00094
00095 protected:
00096 bool myIsScalar;
00097 UT_Vector3 myMaxValue, myMinValue;
00098 fpreal myNoiseLimitsMin, myNoiseLimitsMax;
00099 };
00100
00101 #endif