X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpPlugins%2FInterface%2FParameters.hxx;h=0bb20c7e46ff65bbb9ff472f931822ebc364bc3c;hb=00b54bc0344d74f31df8b93f7c28a07cfc8d6873;hp=f0c3a27e8d99b0ab17e95af7a02f33fc35a946e6;hpb=d33ff8f25fd903eca28c2f088adc8f68e7738135;p=cpPlugins.git diff --git a/lib/cpPlugins/Interface/Parameters.hxx b/lib/cpPlugins/Interface/Parameters.hxx index f0c3a27..0bb20c7 100644 --- a/lib/cpPlugins/Interface/Parameters.hxx +++ b/lib/cpPlugins/Interface/Parameters.hxx @@ -1,115 +1,373 @@ #ifndef __CPPLUGINS__INTERFACE__PARAMETERS__HXX__ #define __CPPLUGINS__INTERFACE__PARAMETERS__HXX__ -#include -#include +// ------------------------------------------------------------------------- +template< class I > +void cpPlugins::Interface::Parameters:: +ConfigureAsIndex( const TString& name, const TUint& dim, const I& v ) +{ + std::stringstream str; + str << v[ 0 ]; + for( unsigned int d = 1; d < dim; ++d ) + str << ";" << v[ d ]; + std::string s = str.str( ); + this->m_Parameters[ name ] = + TParameter( Self::Index, TValues( s, s ) ); + this->Modified( ); +} + +// ------------------------------------------------------------------------- +template< class P > +void cpPlugins::Interface::Parameters:: +ConfigureAsPoint( const TString& name, const TUint& dim, const P& v ) +{ + std::stringstream str; + str << v[ 0 ]; + for( unsigned int d = 1; d < dim; ++d ) + str << ";" << v[ d ]; + std::string s = str.str( ); + this->m_Parameters[ name ] = + TParameter( Self::Point, TValues( s, s ) ); + this->Modified( ); +} // ------------------------------------------------------------------------- -#define cpPlugins_Interface_Parameters_SetListMacro( TYPE ) \ - template< class I > \ - void cpPlugins::Interface::Parameters:: \ - SetValueAs##TYPE##List( const TString& name, const I& b, const I& e ) \ - { \ - TParameters::iterator pIt = this->m_Parameters.find( name ); \ - if( pIt == this->m_Parameters.end( ) ) \ - return; \ - if( pIt->second.first != Self::TYPE##List ) \ - return; \ - std::stringstream ss; \ - for( I i = b; i != e; ++i ) \ - ss << *i << ":"; \ - pIt->second = ss.str( ); \ - } - -cpPlugins_Interface_Parameters_SetListMacro( String ); -cpPlugins_Interface_Parameters_SetListMacro( Int ); -cpPlugins_Interface_Parameters_SetListMacro( Uint ); -cpPlugins_Interface_Parameters_SetListMacro( Real ); -cpPlugins_Interface_Parameters_SetListMacro( Index ); -cpPlugins_Interface_Parameters_SetListMacro( Point ); +template< class V > +void cpPlugins::Interface::Parameters:: +ConfigureAsVector( const TString& name, const TUint& dim, const V& v ) +{ + std::stringstream str; + str << v[ 0 ]; + for( unsigned int d = 1; d < dim; ++d ) + str << ";" << v[ d ]; + std::string s = str.str( ); + this->m_Parameters[ name ] = + TParameter( Self::Vector, TValues( s, s ) ); + this->Modified( ); +} // ------------------------------------------------------------------------- template< class I > I cpPlugins::Interface::Parameters:: -GetValueAsIndex( const TString& name ) const +GetIndex( const TString& name, const TUint& dim ) const { - I idx; - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt != this->m_Parameters.end( ) ) + I v; + TParameters::const_iterator i = this->m_Parameters.find( name ); + if( i != this->m_Parameters.end( ) ) { - if( pIt->second.first == Self::Index ) + if( i->second.first == Self::Index ) { - std::istringstream ss( pIt->second.second ); + std::istringstream str( i->second.second.second ); std::string token; - unsigned int i = 0; - while( std::getline( ss, token, ',' ) ) + unsigned int d = 0; + while( std::getline( str, token, ';' ) && d < dim ) { - if( token != "" ) - idx[ i++ ] = std::atoi( token.c_str( ) ); + v[ d ] = std::atoi( token.c_str( ) ); + d++; } // elihw + return( v ); } // fi } // fi - return( idx ); + + // If parameter not found + for( unsigned int d = 0; d < dim; ++d ) + v[ d ] = 0; + return( v ); } // ------------------------------------------------------------------------- template< class P > P cpPlugins::Interface::Parameters:: -GetValueAsPoint( const TString& name ) const +GetPoint( const TString& name, const TUint& dim ) const +{ + P v; + TParameters::const_iterator i = this->m_Parameters.find( name ); + if( i != this->m_Parameters.end( ) ) + { + if( i->second.first == Self::Point ) + { + std::istringstream str( i->second.second.second ); + std::string token; + unsigned int d = 0; + while( std::getline( str, token, ';' ) && d < dim ) + { + v[ d ] = std::atof( token.c_str( ) ); + d++; + + } // elihw + return( v ); + + } // fi + + } // fi + + // If parameter not found + for( unsigned int d = 0; d < dim; ++d ) + v[ d ] = float( 0 ); + return( v ); +} + +// ------------------------------------------------------------------------- +template< class V > +V cpPlugins::Interface::Parameters:: +GetVector( const TString& name, const TUint& dim ) const { - P pnt; - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt != this->m_Parameters.end( ) ) + V v; + TParameters::const_iterator i = this->m_Parameters.find( name ); + if( i != this->m_Parameters.end( ) ) { - if( pIt->second.first == Self::Point ) + if( i->second.first == Self::Vector ) { - std::istringstream ss( pIt->second.second ); + std::istringstream str( i->second.second.second ); std::string token; - unsigned int i = 0; - while( std::getline( ss, token, ',' ) ) + unsigned int d = 0; + while( std::getline( str, token, ';' ) && d < dim ) { - if( token != "" ) - pnt[ i++ ] = std::atof( token.c_str( ) ); + v[ d ] = std::atof( token.c_str( ) ); + d++; } // elihw + return( v ); } // fi } // fi - return( pnt ); + + // If parameter not found + for( unsigned int d = 0; d < dim; ++d ) + v[ d ] = float( 0 ); + return( v ); } // ------------------------------------------------------------------------- template< class I > void cpPlugins::Interface::Parameters:: -GetValueAsIndexList( std::vector< I >& lst, const TString& name ) const +GetIndexList( + std::vector< I >& lst, const TString& name, const TUint& dim + ) const { lst.clear( ); - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt == this->m_Parameters.end( ) ) + + TParameters::const_iterator i = this->m_Parameters.find( name ); + if( i == this->m_Parameters.end( ) ) return; - if( pIt->second.first != Self::IndexList ) + if( i->second.first == Self::IndexList ) return; - // TODO: + std::istringstream str( i->second.second.second ); + std::string token; + unsigned int d = 0; + while( std::getline( str, token, '#' ) ) + { + std::istringstream str2( token ); + std::string token2; + unsigned int d = 0; + I v; + while( std::getline( str2, token2, ';' ) && d < dim ) + { + v[ d ] = std::atoi( token.c_str( ) ); + d++; + + } // elihw + lst.push_back( v ); + + } // elihw } // ------------------------------------------------------------------------- template< class P > void cpPlugins::Interface::Parameters:: -GetValueAsPointList( std::vector< P >& lst, const TString& name ) const +GetPointList( + std::vector< P >& lst, const TString& name, const TUint& dim + ) const { lst.clear( ); - TParameters::iterator pIt = this->m_Parameters.find( name ); - if( pIt == this->m_Parameters.end( ) ) + + TParameters::const_iterator i = this->m_Parameters.find( name ); + if( i == this->m_Parameters.end( ) ) + return; + if( i->second.first == Self::PointList ) + return; + + std::istringstream str( i->second.second.second ); + std::string token; + unsigned int d = 0; + while( std::getline( str, token, '#' ) ) + { + std::istringstream str2( token ); + std::string token2; + unsigned int d = 0; + P v; + while( std::getline( str2, token2, ';' ) && d < dim ) + { + v[ d ] = std::atof( token.c_str( ) ); + d++; + + } // elihw + lst.push_back( v ); + + } // elihw +} + +// ------------------------------------------------------------------------- +template< class V > +void cpPlugins::Interface::Parameters:: +GetVectorList( + std::vector< V >& lst, const TString& name, const TUint& dim + ) const +{ + lst.clear( ); + + TParameters::const_iterator i = this->m_Parameters.find( name ); + if( i == this->m_Parameters.end( ) ) + return; + if( i->second.first == Self::VectorList ) + return; + + std::istringstream str( i->second.second.second ); + std::string token; + unsigned int d = 0; + while( std::getline( str, token, '#' ) ) + { + std::istringstream str2( token ); + std::string token2; + unsigned int d = 0; + V v; + while( std::getline( str2, token2, ';' ) && d < dim ) + { + v[ d ] = std::atof( token.c_str( ) ); + d++; + + } // elihw + lst.push_back( v ); + + } // elihw +} + +// ------------------------------------------------------------------------- +template< class I > +void cpPlugins::Interface::Parameters:: +SetIndex( const TString& name, const TUint& dim, const I& v ) +{ + TParameters::iterator i = this->m_Parameters.find( name ); + if( i == this->m_Parameters.end( ) ) + return; + if( i->second.first != Self::Index ) + return; + + std::stringstream str; + str << v[ 0 ]; + for( unsigned int d = 1; d < dim; ++d ) + str << ";" << v[ d ]; + i->second.second.second = str.str( ); + this->Modified( ); +} + +// ------------------------------------------------------------------------- +template< class P > +void cpPlugins::Interface::Parameters:: +SetPoint( const TString& name, const TUint& dim, const P& v ) +{ + TParameters::iterator i = this->m_Parameters.find( name ); + if( i == this->m_Parameters.end( ) ) + return; + if( i->second.first != Self::Point ) + return; + + std::stringstream str; + str << v[ 0 ]; + for( unsigned int d = 1; d < dim; ++d ) + str << ";" << v[ d ]; + i->second.second.second = str.str( ); + this->Modified( ); +} + +// ------------------------------------------------------------------------- +template< class V > +void cpPlugins::Interface::Parameters:: +SetVector( const TString& name, const TUint& dim, const V& v ) +{ + TParameters::iterator i = this->m_Parameters.find( name ); + if( i == this->m_Parameters.end( ) ) + return; + if( i->second.first != Self::Vector ) + return; + + std::stringstream str; + str << v[ 0 ]; + for( unsigned int d = 1; d < dim; ++d ) + str << ";" << v[ d ]; + i->second.second.second = str.str( ); + this->Modified( ); +} + +// ------------------------------------------------------------------------- +template< class I > +void cpPlugins::Interface::Parameters:: +AddToIndexList( const TString& name, const TUint& dim, const I& v ) +{ + TParameters::iterator i = this->m_Parameters.find( name ); + if( i == this->m_Parameters.end( ) ) + return; + if( i->second.first != Self::IndexList ) + return; + + std::stringstream str; + if( i->second.second.second == "" ) + str << v[ 0 ]; + else + str << "#" << v[ 0 ]; + for( unsigned int d = 1; d < dim; ++d ) + str << ";" << v[ d ]; + i->second.second.second += str.str( ); + this->Modified( ); +} + +// ------------------------------------------------------------------------- +template< class P > +void cpPlugins::Interface::Parameters:: +AddToPointList( const TString& name, const TUint& dim, const P& v ) +{ + TParameters::iterator i = this->m_Parameters.find( name ); + if( i == this->m_Parameters.end( ) ) + return; + if( i->second.first != Self::PointList ) + return; + + std::stringstream str; + if( i->second.second.second == "" ) + str << v[ 0 ]; + else + str << "#" << v[ 0 ]; + for( unsigned int d = 1; d < dim; ++d ) + str << ";" << v[ d ]; + i->second.second.second += str.str( ); + this->Modified( ); +} + +// ------------------------------------------------------------------------- +template< class V > +void cpPlugins::Interface::Parameters:: +AddToVectorList( const TString& name, const TUint& dim, const V& v ) +{ + TParameters::iterator i = this->m_Parameters.find( name ); + if( i == this->m_Parameters.end( ) ) return; - if( pIt->second.first != Self::PointList ) + if( i->second.first != Self::VectorList ) return; - // TODO: + std::stringstream str; + if( i->second.second.second == "" ) + str << v[ 0 ]; + else + str << "#" << v[ 0 ]; + for( unsigned int d = 1; d < dim; ++d ) + str << ";" << v[ d ]; + i->second.second.second += str.str( ); + this->Modified( ); } #endif // __CPPLUGINS__INTERFACE__PARAMETERS__HXX__