libnoise logo

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


displace.h

00001 // displace.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_DISPLACE_H
00024 #define NOISE_MODULE_DISPLACE_H
00025 
00026 #include "modulebase.h"
00027 
00028 namespace noise
00029 {
00030 
00031   namespace module
00032   {
00033 
00036 
00039 
00043 
00069     class Displace: public Module
00070     {
00071 
00072       public:
00073 
00075       Displace ();
00076 
00077       virtual int GetSourceModuleCount () const
00078       {
00079         return 4;
00080       }
00081 
00082       virtual double GetValue (double x, double y, double z) const;
00083 
00098       const Module& GetXDisplaceModule () const
00099       {
00100         if (m_pSourceModule == NULL || m_pSourceModule[1] == NULL) {
00101           throw noise::ExceptionNoModule ();
00102         }
00103         return *(m_pSourceModule[1]);
00104       }
00105 
00120       const Module& GetYDisplaceModule () const
00121       {
00122         if (m_pSourceModule == NULL || m_pSourceModule[2] == NULL) {
00123           throw noise::ExceptionNoModule ();
00124         }
00125         return *(m_pSourceModule[2]);
00126       }
00127 
00142       const Module& GetZDisplaceModule () const
00143       {
00144         if (m_pSourceModule == NULL || m_pSourceModule[3] == NULL) {
00145           throw noise::ExceptionNoModule ();
00146         }
00147         return *(m_pSourceModule[3]);
00148       }
00149 
00170       void SetDisplaceModules (const Module& xDisplaceModule,
00171         const Module& yDisplaceModule, const Module& zDisplaceModule)
00172       {
00173         SetXDisplaceModule (xDisplaceModule);
00174         SetYDisplaceModule (yDisplaceModule);
00175         SetZDisplaceModule (zDisplaceModule);
00176       }
00177 
00195       void SetXDisplaceModule (const Module& xDisplaceModule)
00196       {
00197         assert (m_pSourceModule != NULL);
00198         m_pSourceModule[1] = &xDisplaceModule;
00199       }
00200 
00218       void SetYDisplaceModule (const Module& yDisplaceModule)
00219       {
00220         assert (m_pSourceModule != NULL);
00221         m_pSourceModule[2] = &yDisplaceModule;
00222       }
00223 
00241       void SetZDisplaceModule (const Module& zDisplaceModule)
00242       {
00243         assert (m_pSourceModule != NULL);
00244         m_pSourceModule[3] = &zDisplaceModule;
00245       }
00246 
00247     };
00248 
00250 
00252 
00254 
00255   }
00256 
00257 }
00258 
00259 #endif