You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegraphics/kpovmodeler/pmpattern.cpp

1127 lines
34 KiB

/*
**************************************************************************
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 <klocale.h>
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::tqmetaObject( ) const
{
if( !s_pMetaObject )
{
s_pMetaObject = new PMMetaObject( "Pattern", Base::tqmetaObject( ),
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 );
}