diff options
Diffstat (limited to 'kpovmodeler/pmmedia.cpp')
-rw-r--r-- | kpovmodeler/pmmedia.cpp | 480 |
1 files changed, 480 insertions, 0 deletions
diff --git a/kpovmodeler/pmmedia.cpp b/kpovmodeler/pmmedia.cpp new file mode 100644 index 00000000..e5229d47 --- /dev/null +++ b/kpovmodeler/pmmedia.cpp @@ -0,0 +1,480 @@ +/* +************************************************************************** + description + -------------------- + copyright : (C) 2001 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 "pmmedia.h" +#include "pmxmlhelper.h" +#include "pmmemento.h" +#include "pmmediaedit.h" +#include "pmcolor.h" + +#include <klocale.h> + +const int methodDefault = 1; +const int intervalsDefault = 10; +const int samplesMinDefault = 1; +const int samplesMaxDefault = 1; +const double confidenceDefault = 0.9; +const double varianceDefault = 0.0078125; +const double ratioDefault = 0.9; +const int aaLevelDefault = 4; +const double aaThresholdDefault = 0.1; +const PMColor absorptionDefault = PMColor( 0.0, 0.0, 0.0 ); +const PMColor emissionDefault = PMColor( 0.0, 0.0, 0.0 ); +const int scatteringTypeDefault = 0; +const PMColor scatteringColorDefault = PMColor( 0.0, 0.0, 0.0 ); +const double scatteringEccentricityDefault = 0; +const double scatteringExtinctionDefault = 1.0; + +PMDefinePropertyClass( PMMedia, PMMediaProperty ); +PMMetaObject* PMMedia::s_pMetaObject = 0; +PMObject* createNewMedia( PMPart* part ) +{ + return new PMMedia( part ); +} + +PMMedia::PMMedia( PMPart* part ) + : Base( part ) +{ + m_method = methodDefault; + m_intervals = intervalsDefault; + m_samplesMin = samplesMinDefault; + m_samplesMax = samplesMaxDefault; + m_confidence = confidenceDefault; + m_variance = varianceDefault; + m_ratio = ratioDefault; + m_aaLevel = aaLevelDefault; + m_aaThreshold = aaThresholdDefault; + m_absorption = absorptionDefault; + m_emission = emissionDefault; + m_scatteringType = scatteringTypeDefault; + m_scatteringColor = scatteringColorDefault; + m_scatteringEccentricity = scatteringEccentricityDefault; + m_scatteringExtinction = scatteringExtinctionDefault; + m_enableAbsorption = false; + m_enableEmission = false; + m_enableScattering = false; +} + +PMMedia::PMMedia( const PMMedia& m ) + : Base( m ) +{ + m_method = m.m_method; + m_intervals = m.m_intervals; + m_samplesMin = m.m_samplesMin; + m_samplesMax = m.m_samplesMax; + m_aaLevel = m.m_aaLevel; + m_confidence = m.m_confidence; + m_variance = m.m_variance; + m_ratio = m.m_ratio; + m_aaThreshold = m.m_aaThreshold; + m_absorption = m.m_absorption; + m_emission = m.m_emission; + m_scatteringType = m.m_scatteringType; + m_scatteringColor = m.m_scatteringColor; + m_scatteringEccentricity = m.m_scatteringEccentricity; + m_scatteringExtinction = m.m_scatteringExtinction; + m_enableAbsorption = m.m_enableAbsorption; + m_enableEmission = m.m_enableEmission; + m_enableScattering = m.m_enableScattering; +} + +PMMedia::~PMMedia( ) +{ +} + +PMMetaObject* PMMedia::metaObject( ) const +{ + if( !s_pMetaObject ) + { + s_pMetaObject = new PMMetaObject( "Media", Base::metaObject( ), + createNewMedia ); + s_pMetaObject->addProperty( + new PMMediaProperty( "method", &PMMedia::setMethod, &PMMedia::method ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "intervals", &PMMedia::setIntervals, &PMMedia::intervals ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "samplesMin", &PMMedia::setSamplesMin, &PMMedia::samplesMin ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "samplesMax", &PMMedia::setSamplesMax, &PMMedia::samplesMax ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "aaLevel", &PMMedia::setAALevel, &PMMedia::aaLevel ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "confidence", &PMMedia::setConfidence, &PMMedia::confidence ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "variance", &PMMedia::setVariance, &PMMedia::variance ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "ratio", &PMMedia::setRatio, &PMMedia::ratio ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "aaThreshold", &PMMedia::setAAThreshold, &PMMedia::aaThreshold ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "absorption", &PMMedia::setAbsorption, &PMMedia::absorption ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "emission", &PMMedia::setEmission, &PMMedia::emission ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "scatteringType", &PMMedia::setScatteringType, &PMMedia::scatteringType ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "scatteringColor", &PMMedia::setScatteringColor, &PMMedia::scatteringColor ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "scatteringExtinction", &PMMedia::setScatteringExtinction, &PMMedia::scatteringExtinction ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "scatteringEccentricity", &PMMedia::setScatteringEccentricity, &PMMedia::scatteringEccentricity ) ); + + s_pMetaObject->addProperty( + new PMMediaProperty( "absorptionEnabled", &PMMedia::enableAbsorption, &PMMedia::isAbsorptionEnabled ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "emissionEnabled", &PMMedia::enableEmission, &PMMedia::isEmissionEnabled ) ); + s_pMetaObject->addProperty( + new PMMediaProperty( "scatteringEnabled", &PMMedia::enableScattering, &PMMedia::isScatteringEnabled ) ); + } + return s_pMetaObject; +} + +void PMMedia::cleanUp( ) const +{ + if( s_pMetaObject ) + { + delete s_pMetaObject; + s_pMetaObject = 0; + } + Base::cleanUp( ); +} + +QString PMMedia::description( ) const +{ + return i18n( "media" ); +} + +void PMMedia::serialize( QDomElement& e, QDomDocument& doc ) const +{ + Base::serialize( e, doc ); + e.setAttribute( "enable_absorption", m_enableAbsorption ); + e.setAttribute( "enable_emission", m_enableEmission ); + e.setAttribute( "enable_scattering", m_enableScattering ); + e.setAttribute( "method", m_method ); + e.setAttribute( "intervals", m_intervals ); + e.setAttribute( "samples_min", m_samplesMin ); + e.setAttribute( "samples_max", m_samplesMax ); + e.setAttribute( "aa_level", m_aaLevel ); + e.setAttribute( "confidence", m_confidence ); + e.setAttribute( "variance", m_variance ); + e.setAttribute( "ratio", m_ratio ); + e.setAttribute( "aa_threshold", m_aaThreshold ); + e.setAttribute( "absorption", m_absorption.serializeXML( ) ); + e.setAttribute( "emission", m_emission.serializeXML( ) ); + e.setAttribute( "scattering_type", m_scatteringType ); + e.setAttribute( "scattering_color", m_scatteringColor.serializeXML( ) ); + e.setAttribute( "scattering_eccentricity", m_scatteringEccentricity ); + e.setAttribute( "scattering_extinction", m_scatteringExtinction ); +} + +void PMMedia::readAttributes( const PMXMLHelper& h ) +{ + Base::readAttributes( h ); + m_enableAbsorption = h.boolAttribute( "enable_absorption", false ); + m_enableEmission = h.boolAttribute( "enable_emission", false ); + m_enableScattering = h.boolAttribute( "enable_scattering", false ); + m_method = h.intAttribute( "method", methodDefault ); + m_intervals = h.intAttribute( "intervals", intervalsDefault ); + m_samplesMin = h.intAttribute( "samples_min", samplesMinDefault ); + m_samplesMax = h.intAttribute( "samples_max", samplesMaxDefault ); + m_aaLevel = h.intAttribute( "aa_level", aaLevelDefault ); + m_confidence = h.doubleAttribute( "confidence", confidenceDefault ); + m_variance = h.doubleAttribute( "variance", varianceDefault ); + m_ratio = h.doubleAttribute( "ratio", ratioDefault ); + m_aaThreshold = h.doubleAttribute( "aa_threshold", aaThresholdDefault ); + m_absorption = h.colorAttribute( "absorption", absorptionDefault ); + m_emission = h.colorAttribute( "emission", emissionDefault ); + m_scatteringType = h.intAttribute( "scattering_type", scatteringTypeDefault ); + m_scatteringColor = h.colorAttribute( "scattering_color", scatteringColorDefault ); + m_scatteringEccentricity = h.doubleAttribute( "scattering_eccentricity", + scatteringEccentricityDefault ); + m_scatteringExtinction = h.doubleAttribute( "scattering_extinction", + scatteringExtinctionDefault ); +} + +void PMMedia::setMethod( int c ) +{ + if ( c < 1 ) + { + kdError( PMArea ) << "method is < 1 in PMMedia::setMethod\n"; + c = 1; + } + + if ( c > 3 ) + { + kdError( PMArea ) << "method is > 3 in PMMedia::setMethod\n"; + c = 3; + } + + if ( c != m_method ) + { + if ( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMMethodID, m_method ); + m_method = c; + } +} + +void PMMedia::setIntervals( int c ) +{ + if( c != m_intervals ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMIntervalsID, m_intervals ); + m_intervals = c; + } +} + +void PMMedia::setSamplesMin( int c ) +{ + if( c != m_samplesMin ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMSamplesMinID, m_samplesMin ); + m_samplesMin = c; + } +} + +void PMMedia::setSamplesMax( int c ) +{ + if( c != m_samplesMax ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMSamplesMaxID, m_samplesMax ); + m_samplesMax = c; + } +} + +void PMMedia::setAALevel( int c ) +{ + if ( c != m_aaLevel ) + { + if ( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMAALevelID, m_aaLevel ); + m_aaLevel = c; + } +} + +void PMMedia::setConfidence( double c ) +{ + if( c != m_confidence ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMConfidenceID, m_confidence ); + m_confidence = c; + } +} + +void PMMedia::setVariance( double c ) +{ + if( c != m_variance ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMVarianceID, m_variance ); + m_variance = c; + } +} + +void PMMedia::setRatio( double c ) +{ + if( c != m_ratio ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMRatioID, m_ratio ); + m_ratio = c; + } +} + +void PMMedia::setAAThreshold( double c ) +{ + if ( c != m_aaThreshold ) + { + if ( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMAAThresholdID, m_aaThreshold ); + m_aaThreshold = c; + } +} + +void PMMedia::setAbsorption( const PMColor& c ) +{ + if( c != m_absorption ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMAbsorptionID, m_absorption ); + m_absorption = c; + } +} + +void PMMedia::setEmission( const PMColor& c ) +{ + if( c != m_emission ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMEmissionID, m_emission ); + m_emission = c; + } +} + +void PMMedia::setScatteringType( int c ) +{ + if( c != m_scatteringType ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMScatteringTypeID, m_scatteringType ); + m_scatteringType = c; + } +} + +void PMMedia::setScatteringColor( const PMColor& c ) +{ + if( c != m_scatteringColor ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMScatteringColorID, m_scatteringColor ); + m_scatteringColor = c; + } +} + +void PMMedia::setScatteringEccentricity( double c ) +{ + if( c != m_scatteringEccentricity ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMScatteringEccentricityID, m_scatteringEccentricity ); + m_scatteringEccentricity = c; + } +} + +void PMMedia::setScatteringExtinction( double c ) +{ + if( c != m_scatteringExtinction ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMScatteringExtinctionID, m_scatteringExtinction ); + m_scatteringExtinction = c; + } +} + +void PMMedia::enableAbsorption( bool c ) +{ + if( c != m_enableAbsorption ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMEnableAbsorptionID, m_enableAbsorption ); + m_enableAbsorption = c; + } +} + +void PMMedia::enableEmission( bool c ) +{ + if( c != m_enableEmission ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMEnableEmissionID, m_enableEmission ); + m_enableEmission = c; + } +} + +void PMMedia::enableScattering( bool c ) +{ + if( c != m_enableScattering ) + { + if( m_pMemento ) + m_pMemento->addData( s_pMetaObject, PMEnableScatteringID, m_enableScattering ); + m_enableScattering = c; + } +} + +PMDialogEditBase* PMMedia::editWidget( QWidget* parent ) const +{ + return new PMMediaEdit( parent ); +} + +void PMMedia::restoreMemento( PMMemento* s ) +{ + PMMementoDataIterator it( s ); + PMMementoData* data; + + for( ; it.current( ); ++it ) + { + data = it.current( ); + if( data->objectType( ) == s_pMetaObject ) + { + switch( data->valueID( ) ) + { + case PMEnableAbsorptionID: + enableAbsorption( data->boolData( ) ); + break; + case PMEnableEmissionID: + enableEmission( data->boolData( ) ); + break; + case PMEnableScatteringID: + enableScattering( data->boolData( ) ); + break; + case PMMethodID: + setMethod( data->intData( ) ); + break; + case PMIntervalsID: + setIntervals( data->intData( ) ); + break; + case PMSamplesMinID: + setSamplesMin( data->intData( ) ); + break; + case PMSamplesMaxID: + setSamplesMax( data->intData( ) ); + break; + case PMAALevelID: + setAALevel( data->intData( ) ); + break; + case PMConfidenceID: + setConfidence( data->doubleData( ) ); + break; + case PMVarianceID: + setVariance( data->doubleData( ) ); + break; + case PMRatioID: + setRatio( data->doubleData( ) ); + break; + case PMAAThresholdID: + setAAThreshold( data->doubleData( ) ); + break; + case PMAbsorptionID: + setAbsorption( data->colorData( ) ); + break; + case PMEmissionID: + setEmission( data->colorData( ) ); + break; + case PMScatteringTypeID: + setScatteringType( data->intData( ) ); + break; + case PMScatteringColorID: + setScatteringColor( data->colorData( ) ); + break; + case PMScatteringEccentricityID: + setScatteringEccentricity( data->doubleData( ) ); + break; + case PMScatteringExtinctionID: + setScatteringExtinction( data->doubleData( ) ); + break; + default: + kdError( PMArea ) << "Wrong ID in PMMedia::restoreMemento\n"; + break; + } + } + } + Base::restoreMemento( s ); +} |