]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Interface/Parameters.hxx
...
[cpPlugins.git] / lib / cpPlugins / Interface / Parameters.hxx
index 0a73b373b2ca558f7a3ed21a81a2eb8cf51f455a..eecb2b6b08ebb74d201324a7cd79ec6039e685a1 100644 (file)
 #ifndef __CPPLUGINS__INTERFACE__PARAMETERS__HXX__
 #define __CPPLUGINS__INTERFACE__PARAMETERS__HXX__
 
-#include <cstdlib>
-#include <iostream>
-#include <sstream>
+// -------------------------------------------------------------------------
+template< class I >
+I cpPlugins::Interface::Parameters::
+GetIndex( const std::string& name, const unsigned int& dim ) const
+{
+  I v;
+  auto i = this->m_Parameters.find( name );
+  if( i != this->m_Parameters.end( ) )
+  {
+    if( i->second.first == Self::Index )
+    {
+      std::istringstream str( i->second.second );
+      std::string token;
+      unsigned int d = 0;
+      while( std::getline( str, token, ';' ) && d < dim )
+      {
+        v[ d ] = std::atoi( token.c_str( ) );
+        d++;
+
+      } // elihw
+      return( v );
+
+    } // fi
+
+  } // fi
+
+  // If parameter not found
+  for( unsigned int d = 0; d < dim; ++d )
+    v[ d ] = 0;
+  return( v );
+}
 
 // -------------------------------------------------------------------------
-#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.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 P >
+P cpPlugins::Interface::Parameters::
+GetPoint( const std::string& name, const unsigned int& dim ) const
+{
+  P v;
+  auto i = this->m_Parameters.find( name );
+  if( i != this->m_Parameters.end( ) )
+  {
+    if( i->second.first == Self::Point )
+    {
+      std::istringstream str( i->second.second );
+      std::string token;
+      unsigned int d = 0;
+      while( std::getline( str, token, ';' ) && d < dim )
+      {
+        std::istringstream tok_str( token );
+        tok_str >> v[ d ];
+        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 std::string& name, const unsigned int& dim ) const
+{
+  V v;
+  auto i = this->m_Parameters.find( name );
+  if( i != this->m_Parameters.end( ) )
+  {
+    if( i->second.first == Self::Vector )
+    {
+      std::istringstream str( i->second.second );
+      std::string token;
+      unsigned int d = 0;
+      while( std::getline( str, token, ';' ) && d < dim )
+      {
+        std::istringstream tok_str( token );
+        tok_str >> v[ d ];
+        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 I >
-I cpPlugins::Interface::Parameters::
-GetValueAsIndex( const TString& name ) const
+void cpPlugins::Interface::Parameters::
+SetIndex( const std::string& name, const unsigned int& dim, const I& v )
 {
-  I idx;
-  TParameters::iterator pIt = this->m_Parameters.find( name );
-  if( pIt != this->m_Parameters.end( ) )
+  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 = str.str( );
+  this->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class P >
+void cpPlugins::Interface::Parameters::
+SetPoint( const std::string& name, const unsigned int& 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 = str.str( );
+  this->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class V >
+void cpPlugins::Interface::Parameters::
+SetVector( const std::string& name, const unsigned int& 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 = str.str( );
+  this->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class I >
+std::vector< I > cpPlugins::Interface::Parameters::
+GetIndexList( const std::string& name, const unsigned int& dim ) const
+{
+  std::vector< I > lst;
+  auto i = this->m_Parameters.find( name );
+  if( i != this->m_Parameters.end( ) )
   {
-    if( pIt->second.first == Self::Index )
+    if( i->second.first == Self::IndexList )
     {
-      std::istringstream ss( pIt->second.second );
+      std::istringstream str( i->second.second );
       std::string token;
-      unsigned int i = 0;
-      while( std::getline( ss, token, ',' ) )
+      unsigned int d = 0;
+      while( std::getline( str, token, '#' ) )
       {
-        if( token != "" )
-          idx[ i++ ] = std::atoi( token.c_str( ) );
+        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
 
     } // fi
 
   } // fi
-  return( idx );
+  return( lst );
 }
 
 // -------------------------------------------------------------------------
 template< class P >
-P cpPlugins::Interface::Parameters::
-GetValueAsPoint( const TString& name ) const
+std::vector< P > cpPlugins::Interface::Parameters::
+GetPointList( const std::string& name, const unsigned int& dim ) const
+{
+  std::vector< P > lst;
+
+  auto i = this->m_Parameters.find( name );
+  if( i != this->m_Parameters.end( ) )
+  {
+    if( i->second.first == Self::PointList )
+    {
+      std::istringstream str( i->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 )
+        {
+          std::istringstream tok_str( token );
+          tok_str >> v[ d ];
+          d++;
+
+        } // elihw
+        lst.push_back( v );
+
+      } // elihw
+
+    } // fi
+
+  } // fi
+  return( lst );
+}
+
+// -------------------------------------------------------------------------
+template< class V >
+std::vector< V > cpPlugins::Interface::Parameters::
+GetVectorList( const std::string& name, const unsigned int& dim ) const
 {
-  P pnt;
-  TParameters::iterator pIt = this->m_Parameters.find( name );
-  if( pIt != this->m_Parameters.end( ) )
+  std::vector< V > lst;
+
+  auto i = this->m_Parameters.find( name );
+  if( i != this->m_Parameters.end( ) )
   {
-    if( pIt->second.first == Self::Point )
+    if( i->second.first == Self::VectorList )
     {
-      std::istringstream ss( pIt->second.second );
+      std::istringstream str( i->second.second );
       std::string token;
-      unsigned int i = 0;
-      while( std::getline( ss, token, ',' ) )
+      unsigned int d = 0;
+      while( std::getline( str, token, '#' ) )
       {
-        if( token != "" )
-          pnt[ i++ ] = std::atof( token.c_str( ) );
+        std::istringstream str2( token );
+        std::string token2;
+        unsigned int d = 0;
+        V v;
+        while( std::getline( str2, token2, ';' ) && d < dim )
+        {
+          std::istringstream tok_str( token );
+          tok_str >> v[ d ];
+          d++;
+
+        } // elihw
+        lst.push_back( v );
 
       } // elihw
 
     } // fi
 
   } // fi
-  return( pnt );
+  return( lst );
 }
 
 // -------------------------------------------------------------------------
 template< class I >
 void cpPlugins::Interface::Parameters::
-GetValueAsIndexList( std::vector< I >& lst, const TString& name ) const
+AddToIndexList( const std::string& name, const unsigned int& dim, const I& v )
 {
-  lst.clear( );
-  TParameters::iterator pIt = this->m_Parameters.find( name );
-  if( pIt == this->m_Parameters.end( ) )
+  TParameters::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::cerr << "TODO GetValueAsIndexList" << std::endl;
+  std::stringstream str;
+  if( i->second.second == "" )
+    str << v[ 0 ];
+  else
+    str << "#" << v[ 0 ];
+  for( unsigned int d = 1; d < dim; ++d )
+    str << ";" << v[ d ];
+  i->second.second += str.str( );
+  this->Modified( );
 }
 
 // -------------------------------------------------------------------------
 template< class P >
 void cpPlugins::Interface::Parameters::
-GetValueAsPointList( std::vector< P >& lst, const TString& name ) const
+AddToPointList( const std::string& name, const unsigned int& 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 == "" )
+    str << v[ 0 ];
+  else
+    str << "#" << v[ 0 ];
+  for( unsigned int d = 1; d < dim; ++d )
+    str << ";" << v[ d ];
+  i->second.second += str.str( );
+  this->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class V >
+void cpPlugins::Interface::Parameters::
+AddToVectorList( const std::string& name, const unsigned int& dim, const V& v )
 {
-  lst.clear( );
-  TParameters::iterator pIt = this->m_Parameters.find( name );
-  if( pIt == this->m_Parameters.end( ) )
+  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::cerr << "TODO GetValueAsPointList" << std::endl;
+  std::stringstream str;
+  if( i->second.second == "" )
+    str << v[ 0 ];
+  else
+    str << "#" << v[ 0 ];
+  for( unsigned int d = 1; d < dim; ++d )
+    str << ";" << v[ d ];
+  i->second.second += str.str( );
+  this->Modified( );
 }
 
 #endif // __CPPLUGINS__INTERFACE__PARAMETERS__HXX__