diff options
Diffstat (limited to 'kpovmodeler/pmrendermode.cpp')
-rw-r--r-- | kpovmodeler/pmrendermode.cpp | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/kpovmodeler/pmrendermode.cpp b/kpovmodeler/pmrendermode.cpp new file mode 100644 index 00000000..1dc32290 --- /dev/null +++ b/kpovmodeler/pmrendermode.cpp @@ -0,0 +1,220 @@ +/* +************************************************************************** + description + -------------------- + copyright : (C) 2001 by Andreas Zehender + email : [email protected] +************************************************************************** + +************************************************************************** +* * +* 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 "pmrendermode.h" +#include <klocale.h> + +#include "pmxmlhelper.h" + + +PMRenderMode::PMRenderMode( ) +{ + init( ); +} + +void PMRenderMode::init( ) +{ + m_width = 640; + m_height = 480; + + m_subSection = false; + m_startRow = 1; + m_endRow = m_height; + m_startColumn = 1; + m_endColumn = m_width; + + m_quality = 9; + + m_radiosity = false; + + m_antialiasing = false; + m_samplingMethod = AntialiasingNonRecursive; + m_antialiasThreshold = 0.3; + m_antialiasJitter = false; + m_antialiasJitterAmount = 1.0; + m_antialiasDepth = 2; + + m_description = i18n( "New mode" ); + + m_alpha = false; +} + +PMRenderMode::PMRenderMode( const QDomElement& e ) +{ + init( ); + + PMXMLHelper hlp( e, 0, 0, 0, 0 ); + m_description = hlp.stringAttribute( "description", m_description ); + m_height = hlp.intAttribute( "height", m_height ); + m_width = hlp.intAttribute( "width", m_width ); + m_subSection = hlp.boolAttribute( "subsection", m_subSection ); + m_startColumn = hlp.doubleAttribute( "start_column", m_startColumn ); + m_endColumn = hlp.doubleAttribute( "end_column", m_endColumn ); + m_startRow = hlp.doubleAttribute( "start_row", m_startRow ); + m_endRow = hlp.doubleAttribute( "end_row", m_endRow ); + m_quality = hlp.intAttribute( "quality", m_quality ); + m_radiosity = hlp.boolAttribute( "radiosity", m_radiosity ); + m_antialiasing = hlp.boolAttribute( "antialiasing", m_antialiasing ); + m_samplingMethod = hlp.intAttribute( "sampling_method", m_samplingMethod ); + m_antialiasThreshold = hlp.doubleAttribute( "aa_threshold", m_antialiasThreshold ); + m_antialiasJitter = hlp.boolAttribute( "aa_jitter", m_antialiasJitter ); + m_antialiasJitterAmount = hlp.doubleAttribute( "aa_jitter_amount", m_antialiasJitterAmount ); + m_antialiasDepth = hlp.intAttribute( "aa_depth", m_antialiasDepth ); + m_alpha = hlp.boolAttribute( "alpha", m_alpha ); +} + +void PMRenderMode::serialize( QDomElement& e ) const +{ + e.setAttribute( "description", m_description ); + e.setAttribute( "height", m_height ); + e.setAttribute( "width", m_width ); + e.setAttribute( "subsection", m_subSection ); + e.setAttribute( "start_row", m_startRow ); + e.setAttribute( "end_row", m_endRow ); + e.setAttribute( "start_column", m_startColumn ); + e.setAttribute( "end_column", m_endColumn ); + e.setAttribute( "quality", m_quality ); + e.setAttribute( "radiosity", m_radiosity ); + e.setAttribute( "antialiasing", m_antialiasing ); + e.setAttribute( "sampling_method", m_samplingMethod ); + e.setAttribute( "aa_threshold", m_antialiasThreshold ); + e.setAttribute( "aa_jitter", m_antialiasJitter ); + e.setAttribute( "aa_jitter_amount", m_antialiasJitterAmount ); + e.setAttribute( "aa_depth", m_antialiasDepth ); + e.setAttribute( "alpha", m_alpha ); +} + +void PMRenderMode::setHeight( int height ) +{ + if( height >= 1 ) + m_height = height; +} + +void PMRenderMode::setWidth( int width ) +{ + if( width >= 1 ) + m_width = width; +} + +void PMRenderMode::setStartRow( double startRow ) +{ + if( startRow >= 0 ) + m_startRow = startRow; +} + +void PMRenderMode::setEndRow( double endRow ) +{ + if( endRow >= 0 ) + m_endRow = endRow; +} + +void PMRenderMode::setStartColumn( double startColumn ) +{ + if( startColumn >= 0 ) + m_startColumn = startColumn; +} + +void PMRenderMode::setEndColumn( double endColumn ) +{ + if( endColumn >= 0 ) + m_endColumn = endColumn; +} + +void PMRenderMode::setQuality( int quality ) +{ + if( ( quality >= 0 ) && ( quality <= 11 ) ) + m_quality = quality; +} + +void PMRenderMode::setAntialiasingDepth( int depth ) +{ + if( ( depth >= 1 ) && ( depth <= 9 ) ) + m_antialiasDepth = depth; +} + +void PMRenderMode::setSamplingMethod( int method ) +{ + if( ( method == AntialiasingNonRecursive ) + || ( method == AntialiasingRecursive ) ) + m_samplingMethod = method; + else + m_samplingMethod = AntialiasingNonRecursive; +} + +QStringList PMRenderMode::commandLineSwitches( ) const +{ + QStringList cl; + QString tmp; + + cl.append( QString( "+W%1" ).arg( m_width ) ); + cl.append( QString( "+H%1" ).arg( m_height ) ); + if( m_subSection ) + { + if( m_startRow < 1.0 ) + tmp.sprintf( "+SR%4.2f", m_startRow ); + else + tmp = QString( "+SR%1" ).arg( ( int ) ( m_startRow + 0.5 ) ); + cl.append( tmp ); + if( m_endRow < 1.0 ) + tmp.sprintf( "+ER%4.2f", m_endRow ); + else + tmp = QString( "+ER%1" ).arg( ( int ) ( m_endRow + 0.5 ) ); + cl.append( tmp ); + + if( m_startColumn < 1.0 ) + tmp.sprintf( "+SC%4.2f", m_startColumn ); + else + tmp = QString( "+SC%1" ).arg( ( int ) ( m_startColumn + 0.5 ) ); + cl.append( tmp ); + if( m_endColumn < 1.0 ) + tmp.sprintf( "+EC%4.2f", m_endColumn ); + else + tmp = QString( "+EC%1" ).arg( ( int ) ( m_endColumn + 0.5 ) ); + cl.append( tmp ); + } + cl.append( QString( "+Q%1" ).arg( m_quality ) ); + if( m_radiosity ) + cl.append( QString( "+QR" ) ); + else + cl.append( QString( "-QR" ) ); + + if( m_antialiasing ) + { + cl.append( QString( "+A" ) ); + cl.append( QString( "+AM%1" ).arg( m_samplingMethod ) ); + tmp.sprintf( "+A%5.3f", m_antialiasThreshold ); + cl.append( tmp ); + if( m_antialiasJitter ) + { + tmp.sprintf( "+J%5.3f", m_antialiasJitterAmount ); + cl.append( tmp ); + } + else + cl.append( QString( "-J" ) ); + cl.append( QString( "+R%1" ).arg( m_antialiasDepth ) ); + } + else + cl.append( QString( "-A" ) ); + + if( m_alpha ) + cl.append( QString( "+UA" ) ); + else + cl.append( QString( "-UA" ) ); + + return cl; +} + |