libnoise logo

A portable, open-source, coherent noise-generating library for C++


terrace.h

00001 // terrace.h
00002 //
00003 // Copyright (C) 2003, 2004 Jason Bevins
00004 //
00005 // This library is free software; you can redistribute it and/or modify it
00006 // under the terms of the GNU Lesser General Public License as published by
00007 // the Free Software Foundation; either version 2.1 of the License, or (at
00008 // your option) any later version.
00009 //
00010 // This library is distributed in the hope that it will be useful, but WITHOUT
00011 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
00013 // License (COPYING.txt) for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public License
00016 // along with this library; if not, write to the Free Software Foundation,
00017 // Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 //
00019 // The developer's email is jlbezigvins@gmzigail.com (for great email, take
00020 // off every 'zig'.)
00021 //
00022 
00023 #ifndef NOISE_MODULE_TERRACE_H
00024 #define NOISE_MODULE_TERRACE_H
00025 
00026 #include "modulebase.h"
00027 
00028 namespace noise
00029 {
00030 
00031   namespace module
00032   {
00033 
00036 
00039 
00042 
00073     class Terrace: public Module
00074     {
00075 
00076       public:
00077 
00079         Terrace ();
00080 
00082         ~Terrace ();
00083 
00098         void AddControlPoint (double value);
00099 
00103         void ClearAllControlPoints ();
00104 
00121         const double* GetControlPointArray () const
00122         {
00123           return m_pControlPoints;
00124         }
00125 
00130         int GetControlPointCount () const
00131         {
00132           return m_controlPointCount;
00133         }
00134 
00135         virtual int GetSourceModuleCount () const
00136         {
00137           return 1;
00138         }
00139 
00145         void InvertTerraces (bool invert = true)
00146         {
00147           m_invertTerraces = invert;
00148         }
00149 
00157         bool IsTerracesInverted () const
00158         {
00159           return m_invertTerraces;
00160         }
00161 
00162         virtual double GetValue (double x, double y, double z) const;
00163 
00181         void MakeControlPoints (int controlPointCount);
00182 
00183       protected:
00184 
00201         int FindInsertionPos (double value);
00202 
00218         void InsertAtPos (int insertionPos, double value);
00219 
00221         int m_controlPointCount;
00222 
00225         bool m_invertTerraces;
00226 
00228         double* m_pControlPoints;
00229 
00230     };
00231 
00233 
00235 
00237 
00238   }
00239 
00240 }
00241 
00242 #endif