diff options
Diffstat (limited to 'kpovmodeler/pmpattern.h')
-rw-r--r-- | kpovmodeler/pmpattern.h | 449 |
1 files changed, 449 insertions, 0 deletions
diff --git a/kpovmodeler/pmpattern.h b/kpovmodeler/pmpattern.h new file mode 100644 index 00000000..69001a41 --- /dev/null +++ b/kpovmodeler/pmpattern.h @@ -0,0 +1,449 @@ +//-*-C++-*- +/* +************************************************************************** + description + -------------------- + copyright : (C) 2001-2002 by Luis Carvalho + email : lpassos@mail.telepac.pt +************************************************************************** + +************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +**************************************************************************/ + + +#ifndef PMPATTERN_H +#define PMPATTERN_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "pmobject.h" +#include "pmvector.h" +#include "pmcolor.h" + +#include <qvaluelist.h> +#include <qvaluestack.h> + +/** + * Class for povray patterns. + */ +class PMPattern : public PMObject +{ + typedef PMObject Base; +public: + /** + * The type of the pattern + */ + enum PMPatternType { PatternAgate, PatternAverage, PatternBoxed, + PatternBozo, PatternBumps, PatternCells, + PatternCrackle, PatternCylindrical, PatternDensity, + PatternDents, PatternGradient, PatternGranite, + PatternJulia, PatternLeopard, PatternMandel, + PatternMarble, PatternOnion, PatternPlanar, + PatternQuilted, PatternRadial, PatternRipples, + PatternSlope, PatternSpherical, PatternSpiral1, + PatternSpiral2, PatternSpotted, PatternWaves, + PatternWood, PatternWrinkles }; + /** + * The noise generators + */ + enum PMNoiseType { GlobalSetting, Original, RangeCorrected, Perlin }; + /** + * Creates a PMPattern + */ + PMPattern( PMPart* part ); + /** + * Copy constructor + */ + PMPattern( const PMPattern& p ); + /** + * deletes the PMPattern + */ + virtual ~PMPattern( ); + + /** */ + virtual PMObject* copy( ) const { return new PMPattern( *this ); } + /** */ + virtual QString description( ) const; + /** */ + virtual QString pixmap( ) const { return QString( "pmpattern" ); } + + /** */ + virtual PMMetaObject* metaObject( ) const; + /** */ + virtual void cleanUp( ) const; + + /** */ + virtual void serialize( QDomElement& e, QDomDocument& doc ) const; + /** */ + virtual void readAttributes( const PMXMLHelper& h ); + + /** + * Returns a new @ref PMPatternEdit + */ + virtual PMDialogEditBase* editWidget( QWidget* parent ) const; + + /** + * Gets the pattern type + */ + PMPatternType patternType( ) const { return m_patternType; } + /** + * Gets the agate Turbulence*/ + double agateTurbulence( ) const { return m_agateTurbulence; } + /** + * Gets the crackle form + */ + PMVector crackleForm( ) const { return m_crackleForm; } + /** + * Gets the crackle metric + */ + int crackleMetric( ) const { return m_crackleMetric; } + /** + * Gets the crackle offset + */ + double crackleOffset( ) const { return m_crackleOffset; } + /** + * Gets the crackle solid flag + */ + bool crackleSolid( ) const { return m_crackleSolid; } + /** + * Gets the desity file name + */ + QString densityFile( ) const { return m_densityFile; } + /** + * Gets the density interpolation + */ + int densityInterpolate( ) const { return m_densityInterpolate; } + /** + * Gets the gradint vector + */ + PMVector gradient( ) const { return m_gradient; } + /** + * Returns the Complex number for Julia Fractals + */ + PMVector juliaComplex( ) const { return m_juliaComplex; } + /** + * Returns true if where using tha magnet types of fractals + */ + bool fractalMagnet( ) const { return m_fractalMagnet; } + /** + * Returns the magnet type of a fractal + */ + int fractalMagnetType( ) const { return m_fractalMagnetType; } + /** + * Gets the number of Iterations for fractals + */ + int maxIterations( ) const { return m_maxIterations; } + /** + * Returns the exponent of a fractal + */ + int fractalExponent( ) const { return m_fractalExponent; } + /** + * Returns the exterior type of a fractal + */ + int fractalExtType( ) const { return m_fractalExtType; } + /** + * Return the exterior factor of a fractal + */ + double fractalExtFactor( ) const { return m_fractalExtFactor; } + /** + * Returns the interior type of a fractal + */ + int fractalIntType( ) const { return m_fractalIntType; } + /** + * Returns the interior factor of a fractal + */ + double fractalIntFactor( ) const { return m_fractalIntFactor; } + /** + * Gets control0 for Quilt + */ + double quiltControl0( ) const { return m_quiltControl0; } + /** + * Gets control1 for Quilt + */ + double quiltControl1( ) const { return m_quiltControl1; } + /** + * Returns the slope direction + */ + PMVector slopeDirection( ) const { return m_slopeDirection; } + /** + * Returns the low slope value + */ + double slopeLoSlope( ) const { return m_slopeLoSlope; } + /** + * Returns the high slope value + */ + double slopeHiSlope( ) const { return m_slopeHiSlope; } + /** + * Returns the slopes altitude flag + */ + bool slopeAltFlag( ) const { return m_slopeAltFlag; } + /** + * Returns the altitude for the slope + */ + PMVector slopeAltitude( ) const { return m_slopeAltitude; } + /** + * Returns the low altitude for slope + */ + double slopeLoAltitude( ) const { return m_slopeLoAlt; } + /** + * Returns the high altitude for slope + */ + double slopeHiAltitude( ) const { return m_slopeHiAlt; } + /** + * Gets the number of arms in spiral types 1 and 2 + */ + int spiralNumberArms( ) const { return m_spiralNumberArms; } + /** + * Returns the noise generator + */ + PMNoiseType noiseGenerator( ) const { return m_noiseGenerator; }; + /** + * Returns whether turbulence is enabled + */ + bool isTurbulenceEnabled( ) const { return m_enableTurbulence; } + /** + * Gets the Turbulence vector + */ + PMVector valueVector( ) const { return m_valueVector; } + /** + * Gets the turbulence octaves + */ + int octaves( ) const { return m_octaves; } + /** + * Gets the turbulence omega + */ + double omega( ) const { return m_omega; } + /** + * Gets the turbulence lambda + */ + double lambda( ) const { return m_lambda; } + /** + * Returns depth (only has meaning inside a normal) + */ + double depth( ) const { return m_depth; } + + /** + * Sets the pattern type + */ + void setPatternType( PMPatternType l ); + /** + * Sets agate turbulence + */ + void setAgateTurbulence( double c ); + /** + * Sets the crackle form + */ + void setCrackleForm( const PMVector& v ); + /** + * Sets the crackle metric + */ + void setCrackleMetric( int c ); + /** + * Sets the crackle offset + */ + void setCrackleOffset( double c ); + /** + * Sets the crackle solid flag + */ + void setCrackleSolid( bool c ); + /** + * Sets the Density File Name + */ + void setDensityFile( const QString& v ); + /** + * Sets the density interpolation + */ + void setDensityInterpolate( int c ); + /** + * sets gradient vector + */ + void setGradient( const PMVector& v ); + /** + * Sets the complex number for Julia + */ + void setJuliaComplex( const PMVector& v ); + /** + * Sets if where using magnet types of fractals + */ + void setFractalMagnet( bool c ); + /** + * Sets the magnet type of a fractal + */ + void setFractalMagnetType( int c ); + /** + * Sets the maximum iterations for fractals + */ + void setMaxIterations( int c ); + /** + * Sets the exponent for fractals + */ + void setFractalExponent( int c ); + /** + * Sets the exterior type of fractals + */ + void setFractalExtType( int c ); + /** + * Sets the exterior factor of fractals + */ + void setFractalExtFactor( double c ); + /** + * Sets the interior type of fractals + */ + void setFractalIntType( int c ); + /** + * Sets the interior factor of fractals + */ + void setFractalIntFactor( double c ); + /** + * Sets quilt control 0 + */ + void setQuiltControl0( double c ); + /** + * Sets quite control 1 + */ + void setQuiltControl1( double c ); + /** + * Sets the slope direction + */ + void setSlopeDirection( const PMVector& v ); + /** + * Sets the low slope value + */ + void setSlopeLoSlope( double c ); + /** + * Sets the high slope value + */ + void setSlopeHiSlope( double c ); + /** + * Sets the slopes altitude flag + */ + void setSlopeAltFlag( bool c ); + /** + * Sets the slopes alititude direction + */ + void setSlopeAltitude( const PMVector& v ); + /** + * Sets the slopes low altitude + */ + void setSlopeLoAlt( double c ); + /** + * Sets the slopes high altitude + */ + void setSlopeHiAlt( double c ); + /** + * Sets the number of spiral arms + */ + void setSpiralNumberArms( int c ); + /** + * Sets noise generator + */ + void setNoiseGenerator( PMNoiseType c ); + /** + * Enables turbulence + */ + void enableTurbulence( bool c ); + /** + * sets the turbulence vector + */ + void setValueVector( const PMVector& v ); + /** + * Sets the turbulence octaves + */ + void setOctaves( int c ); + /** + * Sets the turblence omega + */ + void setOmega( double c ); + /** + * Sets the turbulence Lambda + */ + void setLambda( double c ); + /** + * Sets the depth value (only inside normals) + */ + void setDepth( double c ); + + /** */ + virtual void restoreMemento( PMMemento* s ); +private: + /** + * IDs for @ref PMMementoData + */ + enum PMPatternMementoID { PMPatternTypeID, PMAgateTurbulenceID, PMCrackleFormID, + PMCrackleMetricID, PMCrackleOffsetID, PMCrackleSolidID, + PMDensityFileID, PMDensityInterpolateID, PMGradientID, + PMJuliaComplexID, PMFractalMagnetID, PMFractalMagnetTypeID, + PMMaxIterationsID, PMFractalExponentID, PMFractalExtTypeID, + PMFractalExtFactorID, PMFractalIntTypeID, PMFractalIntFactorID, + PMQuiltControl0ID, PMQuiltControl1ID, PMSlopeDirectionID, + PMSlopeLoSlopeID, PMSlopeHiSlopeID, PMSlopeAltFlagID, + PMSlopeAltitudeID, PMSlopeLoAltID, PMSlopeHiAltID, + PMSpiralNumberArmsID, PMNoiseGeneratorID, PMEnableTurbulenceID, + PMValueVectorID, PMOctavesID, PMOmegaID, PMLambdaID, PMDepthID }; + /** + * Pattern type + */ + PMPatternType m_patternType; + + // Extra values for Individual Patterns + // Agate + double m_agateTurbulence; + // crackle + PMVector m_crackleForm; + int m_crackleMetric; + double m_crackleOffset; + bool m_crackleSolid; + // density + QString m_densityFile; + int m_densityInterpolate; + // gradient + PMVector m_gradient; + // Julia + PMVector m_juliaComplex; + // Fractal patterns Mandel and Julia + bool m_fractalMagnet; + int m_fractalMagnetType; + int m_maxIterations; + int m_fractalExponent; + int m_fractalExtType; + double m_fractalExtFactor; + int m_fractalIntType; + double m_fractalIntFactor; + // quilt + double m_quiltControl0; + double m_quiltControl1; + // slope + PMVector m_slopeDirection; + double m_slopeLoSlope; + double m_slopeHiSlope; + bool m_slopeAltFlag; + PMVector m_slopeAltitude; + double m_slopeLoAlt; + double m_slopeHiAlt; + // Spiral + int m_spiralNumberArms; + + // noise generator type for Bozo, Bumps, Granite and Wrinkles. + PMNoiseType m_noiseGenerator; + + // Turbulence available for all patterns + bool m_enableTurbulence; + PMVector m_valueVector; + int m_octaves; + double m_omega; + double m_lambda; + // depth when used with Normal + double m_depth; + + static PMMetaObject* s_pMetaObject; +}; + +#endif |