{
// Force upstream updates
bool update = ( this->m_LastExecutionTime < this->GetMTime( ) );
- for( auto input : this->m_Inputs )
+ try
{
- for( unsigned int i = 0; i < input.second->Size( ); ++i )
+ for( auto input : this->m_Inputs )
{
- auto obj = input.second->Get( i );
- if( obj != NULL )
+ for( unsigned int i = 0; i < input.second->Size( ); ++i )
{
- auto src = obj->GetSource( );
- if( src != NULL )
+ auto obj = input.second->Get( i );
+ if( obj != NULL )
{
- src->Update( );
- update |= ( this->m_LastExecutionTime < src->GetMTime( ) );
+ auto src = obj->GetSource( );
+ if( src != NULL )
+ {
+ src->Update( );
+ update |= ( this->m_LastExecutionTime < src->GetMTime( ) );
+
+ } // fi
+ }
+ else
+ {
+ if( input.second->IsRequired( ) )
+ this->_Error(
+ std::string( "Required input \"" ) + input.first +
+ std::string( "\" in filter \"" ) +
+ this->m_Name +
+ std::string( "\" is not valid." )
+ );
} // fi
- }
- else
- {
- if( input.second->IsRequired( ) )
- this->_Error(
- std::string( "Required input \"" ) + input.first +
- std::string( "\" in filter \"" ) +
- this->m_Name +
- std::string( "\" is not valid." )
- );
- } // fi
+ } // rof
} // rof
+ }
+ catch( std::exception& err )
+ {
+ this->_Error( err.what( ) );
- } // rof
+ } // yrt
if( update || this->m_ExplicitExecution )
{
} // fi
// Execute filter's algorithm and keep information about time
- auto t_start = cpPlugins_CHRONO;
- this->_GenerateData( );
- auto t_end = cpPlugins_CHRONO;
- this->Modified( );
- this->m_LastExecutionSpan = long( t_end - t_start );
- this->m_LastExecutionTime = this->GetMTime( );
-
- // End the message, if needed...
- if( this->m_PrintExecution && this->m_PrintExecutionStream != NULL )
+ try
{
- *( this->m_PrintExecutionStream )
- << "done in "
- << double( this->m_LastExecutionSpan ) / double( 1000 )
- << " s." << std::endl;
+ auto t_start = cpPlugins_CHRONO;
+ this->_GenerateData( );
+ auto t_end = cpPlugins_CHRONO;
+ this->Modified( );
+ this->m_LastExecutionSpan = long( t_end - t_start );
+ this->m_LastExecutionTime = this->GetMTime( );
+
+ // End the message, if needed...
+ if( this->m_PrintExecution && this->m_PrintExecutionStream != NULL )
+ {
+ *( this->m_PrintExecutionStream )
+ << "done in "
+ << double( this->m_LastExecutionSpan ) / double( 1000 )
+ << " s." << std::endl;
- } // fi
+ } // fi
+ }
+ catch( std::exception& err )
+ {
+ this->_Error( err.what( ) );
+
+ } // yrt
} // fi
}
_Error( const std::string& error )
{
if( error != "" )
- {
itkExceptionMacro(
- "Error: \"" << this->GetClassCategory( ) << "::" <<
- this->GetClassName( ) << "\": " << error
+ "Error: \"" << this->m_Name << "\": " << error
);
-
- } // fi
}
// eof - $RCSfile$
--- /dev/null
+#include <ITKImageGenericFilters_1/CastImageFilter.h>
+#include <cpInstances/Image.h>
+
+#include <itkCastImageFilter.h>
+
+// -------------------------------------------------------------------------
+cpPluginsITKImageGenericFilters_1::CastImageFilter::
+CastImageFilter( )
+ : Superclass( )
+{
+ this->_ConfigureInput< cpInstances::Image >( "Input", true, false );
+ this->_ConfigureOutput< cpInstances::Image >( "Output" );
+ this->m_Parameters.ConfigureAsScalarTypesChoices( "OutputPixelType" );
+}
+
+// -------------------------------------------------------------------------
+cpPluginsITKImageGenericFilters_1::CastImageFilter::
+~CastImageFilter( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPluginsITKImageGenericFilters_1::CastImageFilter::
+_GenerateData( )
+{
+ auto o = this->GetInputData( "Input" );
+ cpPlugins_Demangle_Image_ScalarPixels_AllDims_1( o, _GD0 )
+ this->_Error( "Invalid input image." );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInput >
+void cpPluginsITKImageGenericFilters_1::CastImageFilter::
+_GD0( _TInput* input )
+{
+ std::string o_type =
+ this->m_Parameters.GetSelectedChoice( "OutputPixelType" );
+ if( o_type == "char" ) this->_GD1< _TInput, char >( input );
+ else if( o_type == "short" ) this->_GD1< _TInput, short >( input );
+ else if( o_type == "int" ) this->_GD1< _TInput, int >( input );
+ else if( o_type == "long" ) this->_GD1< _TInput, long >( input );
+ else if( o_type == "uchar" ) this->_GD1< _TInput, unsigned char >( input );
+ else if( o_type == "ushort" ) this->_GD1< _TInput, unsigned short >( input );
+ else if( o_type == "uint" ) this->_GD1< _TInput, unsigned int >( input );
+ else if( o_type == "ulong" ) this->_GD1< _TInput, unsigned long >( input );
+ else if( o_type == "float" ) this->_GD1< _TInput, float >( input );
+ else if( o_type == "double" ) this->_GD1< _TInput, double >( input );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInput, class _TOutputPixel >
+void cpPluginsITKImageGenericFilters_1::CastImageFilter::
+_GD1( _TInput* input )
+{
+ typedef itk::Image< _TOutputPixel, _TInput::ImageDimension > _TOutput;
+ typedef itk::CastImageFilter< _TInput, _TOutput > _TFilter;
+
+ auto filter = this->_CreateITK< _TFilter >( );
+ filter->SetInput( input );
+ filter->Update( );
+ this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
+}
+
+// eof - $RCSfile$
--- /dev/null
+#ifndef __cpPluginsITKImageGenericFilters_1__CastImageFilter__h__
+#define __cpPluginsITKImageGenericFilters_1__CastImageFilter__h__
+
+#include <cpPluginsITKImageGenericFilters_1_Export.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+
+namespace cpPluginsITKImageGenericFilters_1
+{
+ /**
+ */
+ class cpPluginsITKImageGenericFilters_1_EXPORT CastImageFilter
+ : public cpPlugins::BaseObjects::ProcessObject
+ {
+ cpPluginsObject(
+ CastImageFilter,
+ cpPlugins::BaseObjects::ProcessObject,
+ ImageFilters
+ );
+
+ protected:
+ template< class _TInput >
+ inline void _GD0( _TInput* input );
+
+ template< class _TInput, class _TOutputPixel >
+ inline void _GD1( _TInput* input );
+ };
+
+} // ecapseman
+
+#endif // __cpPluginsITKImageGenericFilters_1__CastImageFilter__h__
+
+// eof - $RCSfile$
_TSize size;
for( unsigned int d = 0; d < _TImage::ImageDimension; ++d )
- size[ d ] = i1[ d ] - i0[ d ] + 1;
+ size[ d ] = i1[ d ] - i0[ d ];
_TRegion region;
region.SetIndex( i0 );
{
auto o = this->GetInputData( "Input" );
cpPlugins_Demangle_Image_RealPixels_AllDims_1( o, _GD0 )
- this->_Error( "Invalid input image dimension." );
+ this->_Error( "Invalid input image." );
}
// -------------------------------------------------------------------------