/* ************************************************************************** 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. * * * **************************************************************************/ #include "pmpatternedit.h" #include "pmpattern.h" #include "pmxmlhelper.h" #include "pmlistpatternedit.h" #include "pmcompositeobject.h" #include "pmmemento.h" #include "pmenumproperty.h" #include const PMPattern::PMPatternType patternTypeDefault = PMPattern::PatternAgate; const double agateTurbulenceDefault = 0.5; const PMVector crackleFormDefault = PMVector( -1.0, 1.0, 0.0 ); const int crackleMetricDefault = 2; const double crackleOffsetDefault = 0.0; const bool crackleSolidDefault = false; const TQString densityFileDefault = TQString( "" ); const int densityInterpolateDefault = 0; const PMVector gradientDefault = PMVector( 1.0, 1.0, 1.0 ); const PMVector juliaComplexDefault = PMVector( 0.353, 0.288 ); const bool fractalMagnetDefault = false; const int fractalMagnetTypeDefault = 1; const int maxIterationsDefault = 10; const int fractalExponentDefault = 2; const int fractalExtTypeDefault = 1; const double fractalExtFactorDefault = 1.0; const int fractalIntTypeDefault = 0; const double fractalIntFactorDefault = 1.0; const double quiltControl0Default = 1.0; const double quiltControl1Default = 1.0; const PMVector slopeDirectionDefault = PMVector( 0.0, -1.0, 0.0 ); const double slopeLoSlopeDefault = 0.0; const double slopeHiSlopeDefault = 1.0; const bool slopeAltFlagDefault = false; const PMVector slopeAltitudeDefault = PMVector( 0.0, 1.0, 0.0 ); const double slopeLoAltDefault = 0.0; const double slopeHiAltDefault = 1.0; const int spiralNumberArmsDefault = 0; const PMPattern::PMNoiseType noiseGeneratorDefault = PMPattern::GlobalSetting; const TQString noiseGeneratorDefaultText = TQString( "global_setting" ); const bool turbulenceDefault = false; const PMVector valueVectorDefault = PMVector( 0.0, 0.0, 0.0 ); const int octavesDefault = 6; const double omegaDefault = 0.5; const double lambdaDefault = 2.0; const double depthDefault = 0.0; PMDefinePropertyClass( PMPattern, PMPatternProperty ); PMDefineEnumPropertyClass( PMPattern, PMPattern::PMPatternType, PMPatternTypeProperty ); PMDefineEnumPropertyClass( PMPattern, PMPattern::PMNoiseType, PMNoiseProperty ); PMMetaObject* PMPattern::s_pMetaObject = 0; PMObject* createNewPattern( PMPart* part ) { return new PMPattern( part ); } PMPattern::PMPattern( PMPart* part ) : Base( part ) { m_patternType = patternTypeDefault; m_agateTurbulence = agateTurbulenceDefault; m_crackleForm = crackleFormDefault; m_crackleMetric = crackleMetricDefault; m_crackleOffset = crackleOffsetDefault; m_crackleSolid = crackleSolidDefault; m_densityFile = densityFileDefault; m_densityInterpolate = densityInterpolateDefault; m_gradient = gradientDefault; m_juliaComplex = juliaComplexDefault; m_fractalMagnet = fractalMagnetDefault; m_fractalMagnetType = fractalMagnetTypeDefault; m_maxIterations = maxIterationsDefault; m_fractalExponent = fractalExponentDefault; m_fractalExtType = fractalExtTypeDefault; m_fractalExtFactor = fractalExtFactorDefault; m_fractalIntType = fractalIntTypeDefault; m_fractalIntFactor = fractalIntFactorDefault; m_quiltControl0 = quiltControl0Default; m_quiltControl1 = quiltControl1Default; m_slopeDirection = slopeDirectionDefault; m_slopeLoSlope = slopeLoSlopeDefault; m_slopeHiSlope = slopeHiSlopeDefault; m_slopeAltFlag = slopeAltFlagDefault; m_slopeAltitude = slopeAltitudeDefault; m_slopeLoAlt = slopeLoAltDefault; m_slopeHiAlt = slopeHiAltDefault; m_spiralNumberArms = spiralNumberArmsDefault; m_noiseGenerator = noiseGeneratorDefault; m_enableTurbulence = turbulenceDefault; m_valueVector = valueVectorDefault; m_octaves = octavesDefault; m_omega = omegaDefault; m_lambda = lambdaDefault; m_depth = depthDefault; } PMPattern::PMPattern( const PMPattern& p ) : Base( p ) { m_patternType = p.m_patternType; m_agateTurbulence = p.m_agateTurbulence; m_crackleForm = p.m_crackleForm; m_crackleMetric = p.m_crackleMetric; m_crackleOffset = p.m_crackleOffset; m_crackleSolid = p.m_crackleSolid; m_densityFile = p.m_densityFile; m_densityInterpolate = p.m_densityInterpolate; m_gradient = p.m_gradient; m_juliaComplex = p.m_juliaComplex; m_fractalMagnet = p.m_fractalMagnet; m_fractalMagnetType = p.m_fractalMagnetType; m_maxIterations = p.m_maxIterations; m_fractalExponent = p.m_fractalExponent; m_fractalExtType = p.m_fractalExtType; m_fractalExtFactor = p.m_fractalExtFactor; m_fractalIntType = p.m_fractalIntType; m_fractalIntFactor = p.m_fractalIntFactor; m_quiltControl0 = p.m_quiltControl0; m_quiltControl1 = p.m_quiltControl1; m_slopeDirection = p.m_slopeDirection; m_slopeLoSlope = p.m_slopeLoSlope; m_slopeHiSlope = p.m_slopeHiSlope; m_slopeAltFlag = p.m_slopeAltFlag; m_slopeAltitude = p.m_slopeAltitude; m_slopeLoAlt = p.m_slopeLoAlt; m_slopeHiAlt = p.m_slopeHiAlt; m_spiralNumberArms = p.m_spiralNumberArms; m_noiseGenerator = p.m_noiseGenerator; m_enableTurbulence = p.m_enableTurbulence; m_valueVector = p.m_valueVector; m_octaves = p.m_octaves; m_omega = p.m_omega; m_lambda = p.m_lambda; m_depth = p.m_depth; } PMPattern::~PMPattern( ) { } void PMPattern::serialize( TQDomElement& e, TQDomDocument& ) const { switch( m_patternType ) { case PatternAgate: e.setAttribute( "patterntype", "agate" ); break; case PatternAverage: e.setAttribute( "patterntype", "average" ); break; case PatternBoxed: e.setAttribute( "patterntype", "boxed" ); break; case PatternBozo: e.setAttribute( "patterntype", "bozo" ); break; case PatternBumps: e.setAttribute( "patterntype", "bumps" ); break; case PatternCells: e.setAttribute( "patterntype", "cells" ); break; case PatternCrackle: e.setAttribute( "patterntype", "crackle" ); break; case PatternCylindrical: e.setAttribute( "patterntype", "cylindrical" ); break; case PatternDensity: e.setAttribute( "patterntype", "density" ); break; case PatternDents: e.setAttribute( "patterntype", "dents" ); break; case PatternGradient: e.setAttribute( "patterntype", "gradient" ); break; case PatternGranite: e.setAttribute( "patterntype", "granite" ); break; case PatternJulia: e.setAttribute( "patterntype", "julia" ); break; case PatternLeopard: e.setAttribute( "patterntype", "leopard" ); break; case PatternMandel: e.setAttribute( "patterntype", "mandel" ); break; case PatternMarble: e.setAttribute( "patterntype", "marble" ); break; case PatternOnion: e.setAttribute( "patterntype", "onion" ); break; case PatternPlanar: e.setAttribute( "patterntype", "planar" ); break; case PatternQuilted: e.setAttribute( "patterntype", "quilted" ); break; case PatternRadial: e.setAttribute( "patterntype", "radial" ); break; case PatternRipples: e.setAttribute( "patterntype", "ripples" ); break; case PatternSlope: e.setAttribute( "patterntype", "slope" ); break; case PatternSpherical: e.setAttribute( "patterntype", "spherical" ); break; case PatternSpiral1: e.setAttribute( "patterntype", "spiral1" ); break; case PatternSpiral2: e.setAttribute( "patterntype", "spiral2" ); break; case PatternSpotted: e.setAttribute( "patterntype", "spotted" ); break; case PatternWaves: e.setAttribute( "patterntype", "waves" ); break; case PatternWood: e.setAttribute( "patterntype", "wood" ); break; case PatternWrinkles: e.setAttribute( "patterntype", "wrinkles" ); break; } e.setAttribute( "agateturbulence", m_agateTurbulence ); e.setAttribute( "crackleform", m_crackleForm.serializeXML( ) ); e.setAttribute( "cracklemetric", m_crackleMetric ); e.setAttribute( "crackleoffset", m_crackleOffset ); e.setAttribute( "cracklesolid", m_crackleSolid ); e.setAttribute( "densityinterpolate", m_densityInterpolate ); e.setAttribute( "densityfile", m_densityFile ); e.setAttribute( "gradient", m_gradient.serializeXML( ) ); e.setAttribute( "juliacomplex", m_juliaComplex.serializeXML( ) ); e.setAttribute( "fractalmagnet", m_fractalMagnet ); e.setAttribute( "fractalmagnettype", m_fractalMagnetType ); e.setAttribute( "maxiterations", m_maxIterations ); e.setAttribute( "fractalexponent", m_fractalExponent ); e.setAttribute( "fractalexttype", m_fractalExtType ); e.setAttribute( "fractalextfactor", m_fractalExtFactor ); e.setAttribute( "fractalinttype", m_fractalIntType ); e.setAttribute( "fractalintfactor", m_fractalIntFactor ); e.setAttribute( "quiltcontrol0", m_quiltControl0 ); e.setAttribute( "quiltcontrol1", m_quiltControl1 ); e.setAttribute( "slopedirection", m_slopeDirection.serializeXML( ) ); e.setAttribute( "slopeloslope", m_slopeLoSlope ); e.setAttribute( "slopehislope", m_slopeHiSlope ); e.setAttribute( "slopealtflag", m_slopeAltFlag ); e.setAttribute( "slopealtitude", m_slopeAltitude.serializeXML( ) ); e.setAttribute( "slopeloalt", m_slopeLoAlt ); e.setAttribute( "slopehialt", m_slopeHiAlt ); e.setAttribute( "spiralnumberarms", m_spiralNumberArms ); switch ( m_noiseGenerator ) { case GlobalSetting: e.setAttribute( "noise_generator", "global_setting" ); break; case Original: e.setAttribute( "noise_generator", "original" ); break; case RangeCorrected: e.setAttribute( "noise_generator", "range_corrected" ); break; case Perlin: e.setAttribute( "noise_generator", "perlin" ); break; } e.setAttribute( "enable_turbulence", m_enableTurbulence ); e.setAttribute( "turbulence", m_valueVector.serializeXML( ) ); e.setAttribute( "octaves", m_octaves ); e.setAttribute( "omega", m_omega ); e.setAttribute( "lambda", m_lambda ); e.setAttribute( "depth", m_depth ); } void PMPattern::readAttributes( const PMXMLHelper& h ) { TQString str = h.stringAttribute( "patterntype", "agate" ); if( str == "agate" ) m_patternType = PatternAgate; else if( str == "average" ) m_patternType = PatternAverage; else if( str == "boxed" ) m_patternType = PatternBoxed; else if( str == "bozo" ) m_patternType = PatternBozo; else if( str == "bumps" ) m_patternType = PatternBumps; else if( str == "cells" ) m_patternType = PatternCells; else if( str == "crackle" ) m_patternType = PatternCrackle; else if( str == "cylindrical" ) m_patternType = PatternCylindrical; else if( str == "density" ) m_patternType = PatternDensity; else if( str == "dents" ) m_patternType = PatternDents; else if( str == "gradient" ) m_patternType = PatternGradient; else if( str == "granite" ) m_patternType = PatternGranite; else if( str == "julia" ) m_patternType = PatternJulia; else if( str == "leopard" ) m_patternType = PatternLeopard; else if( str == "mandel" ) m_patternType = PatternMandel; else if( str == "marble" ) m_patternType = PatternMarble; else if( str == "onion" ) m_patternType = PatternOnion; else if( str == "planar" ) m_patternType = PatternPlanar; else if( str == "quilted" ) m_patternType = PatternQuilted; else if( str == "radial" ) m_patternType = PatternRadial; else if( str == "ripples" ) m_patternType = PatternRipples; else if( str == "slope" ) m_patternType = PatternSlope; else if( str == "spherical" ) m_patternType = PatternSpherical; else if( str == "spiral1" ) m_patternType = PatternSpiral1; else if( str == "spiral2" ) m_patternType = PatternSpiral2; else if( str == "spotted" ) m_patternType = PatternSpotted; else if( str == "waves" ) m_patternType = PatternWaves; else if( str == "wood" ) m_patternType = PatternWood; else if( str == "wrinkles" ) m_patternType = PatternWrinkles; m_agateTurbulence = h.doubleAttribute( "agateturbulence", agateTurbulenceDefault ); m_crackleForm = h.vectorAttribute( "crackleform", crackleFormDefault ); m_crackleMetric = h.intAttribute( "cracklemetric", crackleMetricDefault ); m_crackleOffset = h.doubleAttribute( "crackleoffset", crackleOffsetDefault ); m_crackleSolid = h.boolAttribute( "cracklesolid", crackleSolidDefault ); m_densityInterpolate = h.intAttribute( "densityinterpolate", densityInterpolateDefault ); m_densityFile = h.stringAttribute( "densityfile", densityFileDefault ); m_gradient = h.vectorAttribute( "gradient", gradientDefault ); m_juliaComplex = h.vectorAttribute( "juliacomplex", juliaComplexDefault ); m_fractalMagnet = h.boolAttribute( "fractalmagnet", fractalMagnetDefault ); m_fractalMagnetType = h.intAttribute( "fractalmagnettype", fractalMagnetTypeDefault ); m_maxIterations = h.intAttribute( "maxiterations", maxIterationsDefault ); m_fractalExponent = h.intAttribute( "fractalexponent", fractalExponentDefault ); m_fractalExtType = h.intAttribute( "fractalexttype", fractalExtTypeDefault ); m_fractalExtFactor = h.doubleAttribute( "fractalextfactor", fractalExtFactorDefault ); m_fractalIntType = h.intAttribute( "fractalinttype", fractalIntTypeDefault ); m_fractalIntFactor = h.doubleAttribute( "fractalintfactor", fractalIntFactorDefault ); m_quiltControl0 = h.doubleAttribute( "quiltcontrol0", quiltControl0Default ); m_quiltControl1 = h.doubleAttribute( "quiltcontrol1", quiltControl1Default ); m_slopeDirection = h.vectorAttribute( "slopedirection", slopeDirectionDefault ); m_slopeLoSlope = h.doubleAttribute( "slopeloslope", slopeLoSlopeDefault ); m_slopeHiSlope = h.doubleAttribute( "slopehislope", slopeHiSlopeDefault ); m_slopeAltFlag = h.boolAttribute( "slopealtflag", slopeAltFlagDefault ); m_slopeAltitude = h.vectorAttribute( "slopealtitude", slopeAltitudeDefault ); m_slopeLoAlt = h.doubleAttribute( "slopeloalt", slopeLoAltDefault ); m_slopeHiAlt = h.doubleAttribute( "slopehialt", slopeHiAltDefault ); m_spiralNumberArms = h.intAttribute( "spiralnumberarms", spiralNumberArmsDefault ); str = h.stringAttribute( "noise_generator", noiseGeneratorDefaultText ); if ( str == "original" ) m_noiseGenerator = Original; else if ( str == "range_corrected" ) m_noiseGenerator = RangeCorrected; else if ( str == "perlin" ) m_noiseGenerator = Perlin; else m_noiseGenerator = GlobalSetting; m_enableTurbulence = h.boolAttribute( "enable_turbulence" , false ); m_valueVector = h.vectorAttribute( "turbulence", valueVectorDefault ); m_octaves = h.intAttribute( "octaves", octavesDefault ); m_omega = h.doubleAttribute( "omega", omegaDefault ); m_lambda = h.doubleAttribute( "lambda", lambdaDefault ); m_depth = h.doubleAttribute( "depth", depthDefault ); Base::readAttributes( h ); } PMMetaObject* PMPattern::metaObject( ) const { if( !s_pMetaObject ) { s_pMetaObject = new PMMetaObject( "Pattern", Base::metaObject( ), createNewPattern ); s_pMetaObject->addProperty( new PMPatternProperty( "agateTurbulence", &PMPattern::setAgateTurbulence, &PMPattern::agateTurbulence ) ); s_pMetaObject->addProperty( new PMPatternProperty( "densityFile", &PMPattern::setDensityFile, &PMPattern::densityFile ) ); s_pMetaObject->addProperty( new PMPatternProperty( "densityInterpolate", &PMPattern::setDensityInterpolate, &PMPattern::densityInterpolate ) ); s_pMetaObject->addProperty( new PMPatternProperty( "gradient", &PMPattern::setGradient, &PMPattern::gradient ) ); s_pMetaObject->addProperty( new PMPatternProperty( "maxIterations", &PMPattern::setMaxIterations, &PMPattern::maxIterations ) ); s_pMetaObject->addProperty( new PMPatternProperty( "quiltControl0", &PMPattern::setQuiltControl0, &PMPattern::quiltControl0 ) ); s_pMetaObject->addProperty( new PMPatternProperty( "quiltControl1", &PMPattern::setQuiltControl1, &PMPattern::quiltControl1 ) ); s_pMetaObject->addProperty( new PMPatternProperty( "spiralNumberArms", &PMPattern::setSpiralNumberArms, &PMPattern::spiralNumberArms ) ); s_pMetaObject->addProperty( new PMPatternProperty( "turbulence", &PMPattern::enableTurbulence, &PMPattern::isTurbulenceEnabled ) ); s_pMetaObject->addProperty( new PMPatternProperty( "valueVector", &PMPattern::setValueVector, &PMPattern::valueVector ) ); s_pMetaObject->addProperty( new PMPatternProperty( "octaves", &PMPattern::setOctaves, &PMPattern::octaves ) ); s_pMetaObject->addProperty( new PMPatternProperty( "omega", &PMPattern::setOmega, &PMPattern::omega ) ); s_pMetaObject->addProperty( new PMPatternProperty( "lambda", &PMPattern::setLambda, &PMPattern::lambda ) ); s_pMetaObject->addProperty( new PMPatternProperty( "depth", &PMPattern::setDepth, &PMPattern::depth ) ); PMPatternTypeProperty* p = new PMPatternTypeProperty( "patternType", &PMPattern::setPatternType, &PMPattern::patternType ); p->addEnumValue( "Agate", PatternAgate ); p->addEnumValue( "Average", PatternAverage ); p->addEnumValue( "Boxed", PatternBoxed ); p->addEnumValue( "Bozo", PatternBozo ); p->addEnumValue( "Bumps", PatternBumps ); p->addEnumValue( "Cells", PatternCells ); p->addEnumValue( "Crackle", PatternCrackle ); p->addEnumValue( "Cylindrical", PatternCylindrical ); p->addEnumValue( "Density", PatternDensity ); p->addEnumValue( "Dents", PatternDents ); p->addEnumValue( "Gradient", PatternGradient ); p->addEnumValue( "Granite", PatternGranite ); p->addEnumValue( "Julia", PatternJulia ); p->addEnumValue( "Leopard", PatternLeopard ); p->addEnumValue( "Mandel", PatternMandel ); p->addEnumValue( "Marble", PatternMarble ); p->addEnumValue( "Onion", PatternOnion ); p->addEnumValue( "Planar", PatternPlanar ); p->addEnumValue( "Quilted", PatternQuilted ); p->addEnumValue( "Radial", PatternRadial ); p->addEnumValue( "Ripples", PatternRipples ); p->addEnumValue( "Slope", PatternSlope ); p->addEnumValue( "Spherical", PatternSpherical ); p->addEnumValue( "Spiral1", PatternSpiral1 ); p->addEnumValue( "Spiral2", PatternSpiral2 ); p->addEnumValue( "Spotted", PatternSpotted ); p->addEnumValue( "Waves", PatternWaves ); p->addEnumValue( "Wood", PatternWood ); p->addEnumValue( "Wrinkles", PatternWrinkles ); s_pMetaObject->addProperty( p ); PMNoiseProperty* p2 = new PMNoiseProperty( "noiseGenerator", &PMPattern::setNoiseGenerator, &PMPattern::noiseGenerator ); p2->addEnumValue( "GlobalSetting", GlobalSetting ); p2->addEnumValue( "Original", Original ); p2->addEnumValue( "RangeCorrected", RangeCorrected ); p2->addEnumValue( "Perlin", Perlin ); s_pMetaObject->addProperty( p2 ); } return s_pMetaObject; } void PMPattern::cleanUp( ) const { if( s_pMetaObject ) { delete s_pMetaObject; s_pMetaObject = 0; } Base::cleanUp( ); } TQString PMPattern::description( ) const { return i18n( "pattern" ); } void PMPattern::setPatternType( PMPatternType c ) { if( c != m_patternType ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMPatternTypeID, m_patternType ); m_patternType = c; } } void PMPattern::setAgateTurbulence( double c ) { if( c != m_agateTurbulence ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMAgateTurbulenceID, m_agateTurbulence ); m_agateTurbulence = c; } } void PMPattern::setCrackleForm( const PMVector& v ) { if ( v != m_crackleForm ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMCrackleFormID, m_crackleForm ); m_crackleForm = v; } } void PMPattern::setCrackleMetric( int c ) { if ( c < 1 ) { kdError( PMArea ) << "new metric is < 1 in PMPattern::setCrackleMetric\n"; c = 1; } if ( c != m_crackleMetric ) { if ( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMCrackleMetricID, m_crackleMetric ); m_crackleMetric = c; } } void PMPattern::setCrackleOffset( double c ) { if ( c != m_crackleOffset ) { if ( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMCrackleOffsetID, m_crackleOffset ); m_crackleOffset = c; } } void PMPattern::setCrackleSolid( bool c ) { if ( c != m_crackleSolid ) { if ( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMCrackleSolidID, m_crackleSolid ); m_crackleSolid = c; } } void PMPattern::setDensityInterpolate( int c ) { if( c != m_densityInterpolate ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMDensityInterpolateID, m_densityInterpolate ); m_densityInterpolate = c; } } void PMPattern::setDensityFile( const TQString& s ) { if( s != m_densityFile ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMDensityFileID, m_densityFile ); m_densityFile = s; } } void PMPattern::setGradient( const PMVector& v ) { if( v != m_gradient ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMGradientID, m_gradient ); m_gradient = v; } } void PMPattern::setJuliaComplex( const PMVector& v ) { if ( v != m_juliaComplex ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMJuliaComplexID, m_juliaComplex ); m_juliaComplex = v; } } void PMPattern::setFractalMagnet( bool c ) { if ( c != m_fractalMagnet ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMFractalMagnetID, m_fractalMagnet ); m_fractalMagnet = c; } } void PMPattern::setFractalMagnetType( int c ) { if ( c < 1 ) { kdError( PMArea ) << "Magnet type < 1 in PMPattern::setFractalMagnetType\n"; c = 1; } if ( c > 2 ) { kdError( PMArea ) << "Magnet type > 2 in PMPattern::setFractalMagnetType\n"; c = 2; } if ( c != m_fractalMagnetType ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMFractalMagnetTypeID, m_fractalMagnetType ); m_fractalMagnetType = c; } } void PMPattern::setMaxIterations( int c ) { if( c != m_maxIterations ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMMaxIterationsID, m_maxIterations ); m_maxIterations = c; } } void PMPattern::setFractalExponent( int c ) { if ( c < 2 ) { kdError( PMArea ) << "Exponent < 2 in PMPattern::setFractalExponent\n"; c = 2; } if ( c > 33 ) { kdError( PMArea ) << "Exponent > 33 in PMPattern::setFractalExponent\n"; c = 33; } if ( c != m_fractalExponent ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMFractalExponentID, m_fractalExponent ); m_fractalExponent = c; } } void PMPattern::setFractalExtType( int c ) { if ( c < 0 ) { kdError( PMArea ) << "Exterior Type < 0 in PMPattern::setFractalExtType\n"; c = 0; } if ( c > 6 ) { kdError( PMArea ) << "Exterior Type > 6 in PMPattern::setFractalExtType\n"; c = 6; } if ( c != m_fractalExtType ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMFractalExtTypeID, m_fractalExtType ); m_fractalExtType = c; } } void PMPattern::setFractalExtFactor( double c ) { if ( c != m_fractalExtFactor ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMFractalExtFactorID, m_fractalExtFactor ); m_fractalExtFactor = c; } } void PMPattern::setFractalIntType( int c ) { if ( c < 0 ) { kdError( PMArea ) << "Interior Type < 0 in PMPattern::setFractalIntType\n"; c = 0; } if ( c > 6 ) { kdError( PMArea ) << "Interior Type > 6 in PMPattern::setFractalIntType\n"; c = 6; } if ( c != m_fractalIntType ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMFractalIntTypeID, m_fractalIntType ); m_fractalIntType = c; } } void PMPattern::setFractalIntFactor( double c ) { if ( c != m_fractalIntFactor ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMFractalIntFactorID, m_fractalIntFactor ); m_fractalIntFactor = c; } } void PMPattern::setQuiltControl0( double c ) { if( c != m_quiltControl0 ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMQuiltControl0ID, m_quiltControl0 ); m_quiltControl0 = c; } } void PMPattern::setQuiltControl1( double c ) { if( c != m_quiltControl1 ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMQuiltControl1ID, m_quiltControl1 ); m_quiltControl1 = c; } } void PMPattern::setSlopeDirection( const PMVector& v ) { if ( v != m_slopeDirection ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMSlopeDirectionID, m_slopeDirection ); m_slopeDirection = v; } } void PMPattern::setSlopeLoSlope( double c ) { if ( c < 0.0 ) { kdError( PMArea ) << "Low slope < 0.0 in PMPattern::setSlopeLoSlope\n"; c = 0.0; } if ( c > 1.0 ) { kdError( PMArea ) << "Low slope > 1.0 in PMPattern::setSlopeLoSlope\n"; c = 1.0; } if ( c != m_slopeLoSlope ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMSlopeLoSlopeID, m_slopeLoSlope ); m_slopeLoSlope = c; } } void PMPattern::setSlopeHiSlope( double c ) { if ( c < 0.0 ) { kdError( PMArea ) << "High slope < 0.0 in PMPattern::setSlopeHiSlope\n"; c = 0.0; } if ( c > 1.0 ) { kdError( PMArea ) << "High slope > 1.0 in PMPattern::setSlopeHiSlope\n"; c = 1.0; } if ( c != m_slopeHiSlope ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMSlopeHiSlopeID, m_slopeHiSlope ); m_slopeHiSlope = c; } } void PMPattern::setSlopeAltFlag( bool c ) { if ( c != m_slopeAltFlag ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMSlopeAltFlagID, m_slopeAltFlag ); m_slopeAltFlag = c; } } void PMPattern::setSlopeAltitude( const PMVector& v ) { if ( v != m_slopeAltitude ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMSlopeAltitudeID, m_slopeAltitude ); m_slopeAltitude = v; } } void PMPattern::setSlopeLoAlt( double c ) { if ( c != m_slopeLoAlt ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMSlopeLoAltID, m_slopeLoAlt ); m_slopeLoAlt = c; } } void PMPattern::setSlopeHiAlt( double c ) { if ( c != m_slopeHiAlt ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMSlopeHiAltID, m_slopeHiAlt ); m_slopeHiAlt = c; } } void PMPattern::setSpiralNumberArms( int c ) { if( c != m_spiralNumberArms ) { if(m_pMemento ) m_pMemento->addData( s_pMetaObject, PMSpiralNumberArmsID, m_spiralNumberArms ); m_spiralNumberArms = c; } } void PMPattern::setNoiseGenerator( PMNoiseType c ) { if( c != m_noiseGenerator ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMNoiseGeneratorID, m_noiseGenerator ); m_noiseGenerator = c; } } void PMPattern::enableTurbulence( bool c ) { if( c != m_enableTurbulence ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMEnableTurbulenceID, m_enableTurbulence ); m_enableTurbulence = c; } } void PMPattern::setValueVector( const PMVector& c ) { if( c != m_valueVector ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMValueVectorID, m_valueVector ); m_valueVector = c; } } void PMPattern::setOctaves( const int c ) { if( c != m_octaves ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMOctavesID, m_octaves ); m_octaves = c; } } void PMPattern::setOmega( const double c ) { if( c != m_omega ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMOmegaID, m_omega ); m_omega = c; } } void PMPattern::setLambda( const double c ) { if( c != m_lambda ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMLambdaID, m_lambda ); m_lambda = c; } } void PMPattern::setDepth( const double c ) { if( c != m_depth ) { if( m_pMemento ) m_pMemento->addData( s_pMetaObject, PMDepthID, m_depth ); m_depth = c; } } PMDialogEditBase* PMPattern::editWidget( TQWidget* parent ) const { return new PMPatternEdit( parent ); } void PMPattern::restoreMemento( PMMemento* s ) { PMMementoDataIterator it( s ); PMMementoData* data; for( ; it.current( ); ++it ) { data = it.current( ); if( data->objectType( ) == s_pMetaObject ) { switch( data->valueID( ) ) { case PMPatternTypeID: setPatternType( ( PMPatternType )data->intData( ) ); break; case PMAgateTurbulenceID: setAgateTurbulence( data->doubleData( ) ); break; case PMCrackleFormID: setCrackleForm( data->vectorData( ) ); break; case PMCrackleMetricID: setCrackleMetric( data->intData( ) ); break; case PMCrackleOffsetID: setCrackleOffset( data->doubleData( ) ); break; case PMCrackleSolidID: setCrackleSolid( data->boolData( ) ); break; case PMDensityInterpolateID: setDensityInterpolate( data->intData( ) ); break; case PMDensityFileID: setDensityFile( data->stringData( ) ); break; case PMGradientID: setGradient( data->vectorData( ) ); break; case PMJuliaComplexID: setJuliaComplex( data->vectorData( ) ); break; case PMFractalMagnetID: setFractalMagnet( data->boolData( ) ); break; case PMFractalMagnetTypeID: setFractalMagnetType( data->intData( ) ); break; case PMMaxIterationsID: setMaxIterations( data->intData( ) ); break; case PMFractalExponentID: setFractalExponent( data->intData( ) ); break; case PMFractalExtTypeID: setFractalExtType( data->intData( ) ); break; case PMFractalExtFactorID: setFractalExtFactor( data->doubleData( ) ); break; case PMFractalIntTypeID: setFractalIntType( data->intData( ) ); break; case PMFractalIntFactorID: setFractalIntFactor( data->doubleData( ) ); break; case PMQuiltControl0ID: setQuiltControl0( data->doubleData( ) ); break; case PMQuiltControl1ID: setQuiltControl1( data->doubleData( ) ); break; case PMSlopeDirectionID: setSlopeDirection( data->vectorData( ) ); break; case PMSlopeLoSlopeID: setSlopeLoSlope( data->doubleData( ) ); break; case PMSlopeHiSlopeID: setSlopeHiSlope( data->doubleData( ) ); break; case PMSlopeAltFlagID: setSlopeAltFlag( data->boolData( ) ); break; case PMSlopeAltitudeID: setSlopeAltitude( data->boolData( ) ); break; case PMSlopeLoAltID: setSlopeLoAlt( data->intData( ) ); break; case PMSlopeHiAltID: setSlopeHiAlt( data->intData( ) ); break; case PMSpiralNumberArmsID: setSpiralNumberArms( data->intData( ) ); break; case PMNoiseGeneratorID: setNoiseGenerator( ( PMNoiseType ) ( data->intData( ) ) ); break; case PMEnableTurbulenceID: enableTurbulence( data->boolData( ) ); break; case PMValueVectorID: setValueVector( data->vectorData( ) ); break; case PMOctavesID: setOctaves( data->intData( ) ); break; case PMOmegaID: setOmega( data->doubleData( ) ); break; case PMLambdaID: setLambda( data->doubleData( ) ); break; case PMDepthID: setDepth( data->doubleData( ) ); break; default: kdError( PMArea ) << "Wrong ID in PMPattern::restoreMemento\n"; break; } } } Base::restoreMemento( s ); }