1 #include <plugins/ImageMeshFilters/MarchingCubes.h>
2 #include <cpPlugins/DataObjects/Image.h>
3 #include <cpPlugins/DataObjects/Mesh.h>
5 #include <vtkImageData.h>
6 #include <vtkMarchingCubes.h>
7 #include <vtkMarchingSquares.h>
9 // -------------------------------------------------------------------------
10 cpPluginsImageMeshFilters::MarchingCubes::
14 this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input", true, false );
15 this->_ConfigureOutput< cpPlugins::DataObjects::Mesh >( "Output" );
16 this->m_Parameters.ConfigureAsRealList( "Thresholds" );
19 // -------------------------------------------------------------------------
20 cpPluginsImageMeshFilters::MarchingCubes::
25 // -------------------------------------------------------------------------
26 void cpPluginsImageMeshFilters::MarchingCubes::
30 auto image = this->GetInput( "Input" );
31 vtkImageData* vtk_image = image->GetVTK< vtkImageData >( );
32 if( vtk_image == NULL )
33 this->_Error( "Input does not have a valid VTK conversion." );
35 std::vector< double > values =
36 this->m_Parameters.GetRealList( "Thresholds" );
37 vtkPolyData* pd = NULL;
38 if( vtk_image->GetDataDimension( ) == 2 )
40 vtkMarchingSquares* ms = this->_CreateVTK< vtkMarchingSquares >( );
41 ms->SetInputData( vtk_image );
42 for( unsigned int i = 0; i < values.size( ); ++i )
43 ms->SetValue( i, values[ i ] );
45 pd = ms->GetOutput( );
47 else if( vtk_image->GetDataDimension( ) == 3 )
49 vtkMarchingCubes* mc = this->_CreateVTK< vtkMarchingCubes >( );
50 mc->ComputeNormalsOff( );
51 mc->SetInputData( vtk_image );
52 for( unsigned int i = 0; i < values.size( ); ++i )
53 mc->SetValue( i, values[ i ] );
55 pd = mc->GetOutput( );
58 this->_Error( "Input data does not have a valid dimension." );
61 this->GetOutput( "Output" )->SetVTK( pd );