00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef NOISE_MODULE_TERRACE_H
00024 #define NOISE_MODULE_TERRACE_H
00025
00026 #include "modulebase.h"
00027
00028 namespace CS {
00029 namespace Math {
00030 namespace Noise {
00031 namespace Module {
00032
00035
00038
00041
00072 class CS_CRYSTALSPACE_EXPORT Terrace: public Module
00073 {
00074
00075 public:
00076
00078 Terrace ();
00079
00081 ~Terrace ();
00082
00097 void AddControlPoint (double value);
00098
00102 void ClearAllControlPoints ();
00103
00120 const double* GetControlPointArray () const
00121 {
00122 return m_pControlPoints;
00123 }
00124
00129 int GetControlPointCount () const
00130 {
00131 return m_controlPointCount;
00132 }
00133
00134 virtual int GetSourceModuleCount () const
00135 {
00136 return 1;
00137 }
00138
00144 void InvertTerraces (bool invert = true)
00145 {
00146 m_invertTerraces = invert;
00147 }
00148
00156 bool IsTerracesInverted () const
00157 {
00158 return m_invertTerraces;
00159 }
00160
00161 virtual double GetValue (double x, double y, double z) const;
00162
00180 void MakeControlPoints (int controlPointCount);
00181
00182 protected:
00183
00200 int FindInsertionPos (double value);
00201
00217 void InsertAtPos (int insertionPos, double value);
00218
00220 int m_controlPointCount;
00221
00224 bool m_invertTerraces;
00225
00227 double* m_pControlPoints;
00228
00229 };
00230
00232
00234
00236
00237 }
00238 }
00239 }
00240 }
00241
00242 #endif