#include "MarchingCubes.h" #include #include #include #include #include // ------------------------------------------------------------------------- cpPlugins::BasicFilters::MarchingCubes:: MarchingCubes( ) : Superclass( ) { this->_AddInput( "Input" ); this->_AddOutput< cpPlugins::Interface::Mesh >( "Output" ); this->m_Parameters->ConfigureAsRealList( "Thresholds" ); } // ------------------------------------------------------------------------- cpPlugins::BasicFilters::MarchingCubes:: ~MarchingCubes( ) { } // ------------------------------------------------------------------------- std::string cpPlugins::BasicFilters::MarchingCubes:: _GenerateData( ) { // Get input auto image = this->GetInputData< cpPlugins::Interface::Image >( "Input" ); if( image == NULL ) return( "MarchingCubes: Input data is not a valid image." ); vtkImageData* vtk_image = image->GetVTK< vtkImageData >( ); if( vtk_image == NULL ) return( "MarchingCubes: Input does not have a valid VTK conversion." ); std::vector< double > values = this->m_Parameters->GetRealList( "Thresholds" ); vtkPolyData* pd = NULL; if( vtk_image->GetDataDimension( ) == 2 ) { vtkMarchingSquares* ms = this->_CreateVTK< vtkMarchingSquares >( ); ms->SetInputData( vtk_image ); for( unsigned int i = 0; i < values.size( ); ++i ) ms->SetValue( i, values[ i ] ); ms->Update( ); pd = ms->GetOutput( ); } else if( vtk_image->GetDataDimension( ) == 3 ) { vtkMarchingCubes* mc = this->_CreateVTK< vtkMarchingCubes >( ); mc->ComputeNormalsOff( ); mc->SetInputData( vtk_image ); for( unsigned int i = 0; i < values.size( ); ++i ) mc->SetValue( i, values[ i ] ); mc->Update( ); pd = mc->GetOutput( ); } else return( "MarchingCubes: Input data does not have a valid dimension." ); // Execute filter auto out = this->GetOutputData< cpPlugins::Interface::Mesh >( "Output" ); out->SetVTK( pd ); return( "" ); } // eof - $RCSfile$